From 49bd50cef12faf766832a596d19ef972e6a62654 Mon Sep 17 00:00:00 2001 From: rbbowd Date: Sun, 28 Jul 2024 07:46:40 -0400 Subject: [PATCH] Brickie updates --- .scalafmt.conf | 2 +- build.sbt | 5 +- .../cormorant/fs2/StreamingParserSpec.scala | 70 ---------- .../cormorant/fs2/StreamingPrinterSpec.scala | 128 ------------------ .../parser/PrinterParserParity.scala | 58 -------- project/Libraries.scala | 13 +- project/build.properties | 2 +- project/plugins.sbt | 14 +- version.sbt | 2 +- 9 files changed, 17 insertions(+), 277 deletions(-) delete mode 100644 modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingParserSpec.scala delete mode 100644 modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingPrinterSpec.scala delete mode 100644 modules/parser/src/test/scala/io/chrisdavenport/cormorant/parser/PrinterParserParity.scala diff --git a/.scalafmt.conf b/.scalafmt.conf index cbc6f471..0aeea484 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,3 +1,3 @@ -version=3.8.1 +version=3.8.2 runner.dialect = "scala213" trailingCommas = preserve diff --git a/build.sbt b/build.sbt index 3e0dbadb..f8a58eaf 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ val proxy = "https://nexus.garnercorp.com/repository/maven-all" val commonSettings = Seq( name := "gormorant", organization := "com.garnercorp", - scalaVersion := "2.13.12", + scalaVersion := "2.13.14", organizationName := "Garner", homepage := Some(url("https://github.com/ChristopherDavenport/cormorant")), licenses += ("MIT", url("http://opensource.org/licenses/MIT")), @@ -32,13 +32,12 @@ val commonSettings = Seq( }, scalacOptions ++= addScalacOptions, addCompilerPlugin( - "org.typelevel" %% "kind-projector" % "0.13.2" cross CrossVersion.full + "org.typelevel" %% "kind-projector" % "0.13.3" cross CrossVersion.full ), addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.1"), testFrameworks += new TestFramework("munit.Framework"), libraryDependencies ++= Seq( MUnitTest, - MUnitCatsEffectTest, ScalaCheckEffectMUnit ), (sys.env.get("NEXUS_USER"), sys.env.get("NEXUS_PASSWORD")) match { diff --git a/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingParserSpec.scala b/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingParserSpec.scala deleted file mode 100644 index 13d2a22b..00000000 --- a/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingParserSpec.scala +++ /dev/null @@ -1,70 +0,0 @@ -package io.chrisdavenport.cormorant -package fs2 - -import cats.data.NonEmptyList -import cats.effect._ -import munit.CatsEffectSuite -import io.chrisdavenport.cormorant._ -import java.io.ByteArrayInputStream -import java.io.InputStream - -class StreamingParserSpec extends CatsEffectSuite { - - def ruinDelims(str: String) = - augmentString(str).flatMap { - case '\n' => "\r\n" - case c => c.toString - } - - // https://github.com/ChristopherDavenport/cormorant/pull/84 - test( - "Streaming Parser parses a known value that did not work with streaming" - ) { - val x = """First Name,Last Name,Email -Larry,Bordowitz,larry@example.com -Anonymous,Hippopotamus,hippo@example.com""" - val source = - IO.pure(new ByteArrayInputStream(ruinDelims(x).getBytes): InputStream) - _root_.fs2.io - .readInputStream( - source, - chunkSize = 4 - ) - .through(_root_.fs2.text.utf8.decode) - .through(parseComplete[IO]) - .compile - .toVector - .map { v => - val header = CSV.Headers( - NonEmptyList.of( - CSV.Header("First Name"), - CSV.Header("Last Name"), - CSV.Header("Email") - ) - ) - val row1 = CSV.Row( - NonEmptyList - .of( - CSV.Field("Larry"), - CSV.Field("Bordowitz"), - CSV.Field("larry@example.com") - ) - ) - val row2 = CSV.Row( - NonEmptyList - .of( - CSV.Field("Anonymous"), - CSV.Field("Hippopotamus"), - CSV.Field("hippo@example.com") - ) - ) - assertEquals( - Vector( - (header, row1), - (header, row2) - ), - v - ) - } - } -} diff --git a/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingPrinterSpec.scala b/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingPrinterSpec.scala deleted file mode 100644 index 746a6252..00000000 --- a/modules/fs2/src/test/scala/io/chrisdavenport/cormorant/fs2/StreamingPrinterSpec.scala +++ /dev/null @@ -1,128 +0,0 @@ -package io.chrisdavenport.cormorant -package fs2 - -import cats.data.NonEmptyList -import cats.effect._ -import _root_.fs2.Stream -import io.chrisdavenport.cormorant._ -import io.chrisdavenport.cormorant.implicits._ -import munit.CatsEffectSuite -import munit.ScalaCheckEffectSuite -import org.scalacheck.effect.PropF - -class StreamingPrinterSuite - extends CatsEffectSuite - with ScalaCheckEffectSuite - with CormorantArbitraries { - - test("Streaming printer row should round trip") { - PropF.forAllF { (a: CSV.Row) => - Stream - .emit[IO, CSV.Row](a) - .through(encodeRows(Printer.default)) - .through(parseRows) - .compile - .toList - .map(r => assertEquals(r, List(a))) - } - } - - test("Streaming printer rows should round trip") { - PropF.forAllF { (a: CSV.Rows) => - Stream - .emits[IO, CSV.Row](a.rows) - .through(encodeRows(Printer.default)) - .through(parseRows) - .compile - .toList - .map(CSV.Rows) - .map(r => assertEquals(r, a)) - } - } - - test("Streaming printer rows special case for empty removal") { - import CSV._ - - val rows = Rows( - List( - Row(NonEmptyList.of(Field(""))) - // Row(NonEmptyList.of(Field(""))) - ) - ) - val expected = List.empty[CSV.Row] - - Stream - .emits[IO, CSV.Row](rows.rows) - .through(encodeRows(Printer.default)) - .through(parseRows) - .compile - .toList - .map(assertEquals(_, expected)) - } - - test("Streaming printer should complete should write as expected") { - final case class Foo(color: String, food: String, number: Int) - - val list = List( - Foo("Blue", "Pizza", 1), - Foo("Red", "Margarine", 2), - Foo("Yellow", "Broccoli", 3) - ) - - implicit val L: LabelledWrite[Foo] = new LabelledWrite[Foo] { - override def headers: CSV.Headers = - CSV.Headers( - NonEmptyList.of( - CSV.Header("Color"), - CSV.Header("Food"), - CSV.Header("Number") - ) - ) - - override def write(a: Foo): CSV.Row = - CSV.Row( - NonEmptyList.of(a.color.field, a.food.field, a.number.field) - ) - } - - val result = Stream - .emits(list) - .through(writeLabelled(Printer.default)) - .compile - .string - - val expectedCSVString = """Color,Food,Number - |Blue,Pizza,1 - |Red,Margarine,2 - |Yellow,Broccoli,3""".stripMargin - - assertEquals(result, expectedCSVString) - } - - test("Streaming printer should round trip with streaming encoder") { - PropF.forAllF { (csv: CSV.Complete) => - val expected = csv.rows.rows.map(row => (csv.headers, row)) - Stream - .emits(csv.rows.rows) - .through(encodeWithHeaders(csv.headers, Printer.default)) - .covary[IO] - .through(parseComplete) - .compile - .toList - .map(assertEquals(_, expected)) - } - } - - test("Streaming printer should round trip with printer") { - PropF.forAllF { (csv: CSV.Complete) => - val output = Printer.default.print(csv) - val expected = csv.rows.rows.map(row => (csv.headers, row)) - Stream(output) - .covary[IO] - .through(parseComplete) - .compile - .toList - .map(assertEquals(_, expected)) - } - } -} diff --git a/modules/parser/src/test/scala/io/chrisdavenport/cormorant/parser/PrinterParserParity.scala b/modules/parser/src/test/scala/io/chrisdavenport/cormorant/parser/PrinterParserParity.scala deleted file mode 100644 index 2844d89d..00000000 --- a/modules/parser/src/test/scala/io/chrisdavenport/cormorant/parser/PrinterParserParity.scala +++ /dev/null @@ -1,58 +0,0 @@ -package io.chrisdavenport.cormorant.parser - -import cats.syntax.all._ -import io.chrisdavenport.cormorant._ -import _root_.io.chrisdavenport.cormorant.implicits._ -import munit.ScalaCheckSuite -import org.scalacheck.Test.Parameters -import org.scalacheck.Prop._ - -class PrinterParserParity extends ScalaCheckSuite with CormorantArbitraries { - - val minTestsOK = Parameters.default - .withMinSuccessfulTests(20) - .withWorkers(2) - - property("field should round trip") { - forAll { a: CSV.Field => - val encoded = a.print(Printer.default) - assertEquals(parseField(encoded), Either.right(a)) - } - }.check(minTestsOK) - - property("row should round trip") { - forAll { a: CSV.Row => - val encoded = a.print(Printer.default) - assertEquals(parseRow(encoded), Either.right(a)) - } - }.check(minTestsOK) - - property("rows should round trip") { - forAll { a: CSV.Rows => - val encoded = a.print(Printer.default) - assertEquals(parseRows(encoded), Either.right(a)) - } - }.check(minTestsOK) - - property("header should round trip") { - forAll { a: CSV.Header => - val encoded = a.print(Printer.default) - assertEquals(parseHeader(encoded), Either.right(a)) - } - }.check(minTestsOK) - - property("headers should round trip") { - forAll { a: CSV.Headers => - val encoded = a.print(Printer.default) - assertEquals(parseHeaders(encoded), Either.right(a)) - } - }.check(minTestsOK) - - property("complete should round trip") { - forAll { a: CSV.Complete => - val encoded = a.print(Printer.default) - assertEquals(parseComplete(encoded), Either.right(a)) - } - }.check(minTestsOK) - -} diff --git a/project/Libraries.scala b/project/Libraries.scala index a39bdbba..d9f3bb4c 100644 --- a/project/Libraries.scala +++ b/project/Libraries.scala @@ -2,14 +2,13 @@ import sbt._ object Libraries { object Versions { - val CatsVersion = "2.10.0" - val fs2Version = "3.9.2" - val munitV = "0.7.29" - val munitCatsEffectV = "1.0.7" + val CatsVersion = "2.12.0" + val fs2Version = "3.9.4" + val munitV = "1.0.0" val scalacheckEffectV = "1.0.4" - val RefinedVersion = "0.11.0" + val RefinedVersion = "0.11.2" val AttoCoreVersion = "0.9.5" - val ShapelessVersion = "2.3.10" + val ShapelessVersion = "2.3.12" } import Versions._ @@ -26,8 +25,6 @@ object Libraries { val CatsCore = "org.typelevel" %% "cats-core" % CatsVersion val CatsKernel = "org.typelevel" %% "cats-kernel" % CatsVersion val MUnitTest = "org.scalameta" %% "munit" % munitV % Test - val MUnitCatsEffectTest = - "org.typelevel" %% "munit-cats-effect-3" % munitCatsEffectV % Test val ScalaCheckEffectMUnit = "org.typelevel" %% "scalacheck-effect-munit" % scalacheckEffectV % Test diff --git a/project/build.properties b/project/build.properties index 04267b14..ee4c672c 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.9.9 +sbt.version=1.10.1 diff --git a/project/plugins.sbt b/project/plugins.sbt index 7ae90723..a37496be 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,8 +1,8 @@ -addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.3.1") -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.6") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.0") -addSbtPlugin("com.47deg" % "sbt-microsites" % "1.3.2") -addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.0") -addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.2.0") -addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.2") +addSbtPlugin("io.github.davidgregory084" % "sbt-tpolecat" % "0.4.4") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.16.0") +addSbtPlugin("com.47deg" % "sbt-microsites" % "1.4.4") +addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "1.1.3") +addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.3.2") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.3.8") addSbtPlugin("com.github.cb372" % "sbt-explicit-dependencies" % "0.3.1") diff --git a/version.sbt b/version.sbt index d1cb4481..9347ad9a 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "1.0.1" +ThisBuild / version := "1.0.2"