From 8e42c6f340b2a35bfb5c08df116a1e88de052eb7 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sat, 3 Dec 2016 22:36:23 -0800 Subject: Add test suite --- .../ch/jodersky/flow/SerialOperatorSpec.scala | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 flow-core/src/test/scala/ch/jodersky/flow/SerialOperatorSpec.scala (limited to 'flow-core/src/test/scala/ch/jodersky/flow/SerialOperatorSpec.scala') diff --git a/flow-core/src/test/scala/ch/jodersky/flow/SerialOperatorSpec.scala b/flow-core/src/test/scala/ch/jodersky/flow/SerialOperatorSpec.scala new file mode 100644 index 0000000..4a6cf1e --- /dev/null +++ b/flow-core/src/test/scala/ch/jodersky/flow/SerialOperatorSpec.scala @@ -0,0 +1,53 @@ +package ch.jodersky.flow + +import scala.concurrent.duration._ + +import akka.actor.{ActorRef, ActorSystem} +import akka.testkit.{ImplicitSender, TestKit} +import akka.util.ByteString +import org.scalatest._ + +case class Ack(n: Int) extends Serial.Event + +class SerialOperatorSpec + extends TestKit(ActorSystem("serial-operator")) + with ImplicitSender + with WordSpecLike + with Matchers + with BeforeAndAfterAll + with SequentialNestedSuiteExecution + with PseudoTerminal { + + override def afterAll { + TestKit.shutdownActorSystem(system) + } + + def withEchoOp[A](action: ActorRef => A): A = { + withEcho { case (port, settings) => + val connection = SerialConnection.open(port, settings) + val operator = system.actorOf(SerialOperator.apply(connection, 1024, testActor)) + action(operator) + } + } + + "Serial operator" should { + + "follow the correct protocol" in withEchoOp { op => + expectMsgType[Serial.Opened] + + val data = ByteString("hello world".getBytes("utf-8")) + op ! Serial.Write(data) + expectMsg(Serial.Received(data)) + + op ! Serial.Write(data, n => Ack(n)) + expectMsg(Serial.Received(data)) + expectMsg(Ack(data.length)) + + op ! Serial.Close + expectMsg(Serial.Closed) + + } + + } + +} -- cgit v1.2.3