diff --git a/lib/src/test/scala/code/winitzki/jc/BlockingMoleculesSpec.scala b/lib/src/test/scala/code/winitzki/jc/BlockingMoleculesSpec.scala index 25804205..2fa21310 100644 --- a/lib/src/test/scala/code/winitzki/jc/BlockingMoleculesSpec.scala +++ b/lib/src/test/scala/code/winitzki/jc/BlockingMoleculesSpec.scala @@ -84,18 +84,42 @@ class BlockingMoleculesSpec extends FlatSpec with Matchers with TimeLimitedTests behavior of "syntax of blocking molecules with unit values / replies" + it should "allow non-unit values and non-unit replies" in { + val f = new B[Int,Int]("f") + site(tp0)( _go { case f(x, r) if x == 123 => r(456) }) + f(123) shouldEqual 456 + } + + it should "allow non-unit values and non-unit replies with timeout" in { + val f = new B[Int,Int]("f") + site(tp0)( _go { case f(x, r) if x != 123 => r(456) }) + f.timeout(200 millis)(123) shouldEqual None + } + it should "allow non-unit values and unit replies" in { val f = new BE[Int]("f") site(tp0)( _go { case f(x, r) if x == 123 => r() }) f(123) shouldEqual (()) } + it should "allow non-unit values and unit replies with timeout" in { + val f = new BE[Int]("f") + site(tp0)( _go { case f(x, r) if x != 123 => r() }) + f.timeout(200 millis)(123) shouldEqual None + } + it should "allow unit values and unit replies" in { val f = new EE("f") site(tp0)( _go { case f(x, r) if x == (()) => r() }) f() shouldEqual (()) } + it should "allow unit values and unit replies with timeout" in { + val f = new EE("f") + site(tp0)( _go { case f(x, r) if x != (()) => r() }) + f.timeout(200 millis)() shouldEqual None + } + behavior of "reaction sites with invalid replies" it should "use the first reply when a reaction attempts to reply twice" in { diff --git a/macros/src/test/scala/code/winitzki/jc/MacrosSpec.scala b/macros/src/test/scala/code/winitzki/jc/MacrosSpec.scala index e8b85a08..4897e59c 100644 --- a/macros/src/test/scala/code/winitzki/jc/MacrosSpec.scala +++ b/macros/src/test/scala/code/winitzki/jc/MacrosSpec.scala @@ -34,6 +34,26 @@ class MacrosSpec extends FlatSpec with Matchers with BeforeAndAfterEach { s.toString shouldEqual "s/B" } + it should "create an emitter of class E for m[Unit]" in { + val a = m[Unit] + a.isInstanceOf[E] shouldEqual true + } + + it should "create an emitter of class BE[Int] for b[Int, Unit]" in { + val a = b[Int, Unit] + a.isInstanceOf[BE[Int]] shouldEqual true + } + + it should "create an emitter of class EB[Int] for b[Unit, Int]" in { + val a = b[Unit, Int] + a.isInstanceOf[EB[Int]] shouldEqual true + } + + it should "create an emitter of class EE for b[Unit, Unit]" in { + val a = b[Unit, Unit] + a.isInstanceOf[EE] shouldEqual true + } + behavior of "macros for inspecting a reaction body"