From fdb150b12d40e0349e747aa0d631317d8d71c436 Mon Sep 17 00:00:00 2001 From: Pat Garrity Date: Sun, 18 Feb 2024 10:27:00 -0600 Subject: [PATCH] Starting to write tests for character reader. --- .../src/test/resources/test-source-1.ava | 11 ++++++ .../ava/parser/CharacterReaderTests.scala | 39 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 modules/parser/src/test/resources/test-source-1.ava create mode 100644 modules/parser/src/test/scala/ava/parser/CharacterReaderTests.scala diff --git a/modules/parser/src/test/resources/test-source-1.ava b/modules/parser/src/test/resources/test-source-1.ava new file mode 100644 index 0000000..a1b8fa7 --- /dev/null +++ b/modules/parser/src/test/resources/test-source-1.ava @@ -0,0 +1,11 @@ +namespace tests + +given A +class Semigroup + defn combine: A -> A -> A +end class + +given A :: Semigroup +class Monoid + defn empty: A +end class diff --git a/modules/parser/src/test/scala/ava/parser/CharacterReaderTests.scala b/modules/parser/src/test/scala/ava/parser/CharacterReaderTests.scala new file mode 100644 index 0000000..edfd93e --- /dev/null +++ b/modules/parser/src/test/scala/ava/parser/CharacterReaderTests.scala @@ -0,0 +1,39 @@ +package ava.parser + +import cats.effect.IO +import cats.effect.unsafe.IORuntime +import java.io.InputStream +import scala.io.Source + +class CharacterReaderTests extends munit.FunSuite: + import CharacterReaderTests.* + + implicit val runtime: IORuntime = cats.effect.unsafe.IORuntime.global + + test("should read a file end to end") { + val file = Files.TestSource1 + val expected = loadFileToString(file) + val reader = CharacterReader.forInputStream(loadFileToStream(file)) + + val output = fs2.Stream + .repeatEval(IO(reader.consume())) + .takeWhile(_.isDefined) + .compile + .toList + .map(_.flatten) + .map(_.mkString) + .unsafeRunSync() + + assertEquals(output, expected) + } + + private def loadFileToString(name: String): String = + Source.fromResource(name).mkString + + private def loadFileToStream(name: String): InputStream = + getClass().getClassLoader().getResourceAsStream(name) + +object CharacterReaderTests: + + object Files: + val TestSource1: String = "test-source-1.ava"