From 652dfa3414ed81bd0ba3ee443a9b26e9dcd8910e Mon Sep 17 00:00:00 2001 From: Paolo Anastagi Date: Mon, 4 Nov 2019 12:57:56 +0100 Subject: [PATCH 1/5] Bump Scala and SBT version --- build.sbt | 6 +++--- project/build.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index 887f268..73e8214 100644 --- a/build.sbt +++ b/build.sbt @@ -8,12 +8,12 @@ lazy val contributors = Seq( , "mrauilm" -> "Milan Raulim" ) -val fs2Version = "2.0.0" +val fs2Version = "2.0.1" lazy val commonSettings = Seq( organization := "com.spinoco", - scalaVersion := "2.12.4", - crossScalaVersions := Seq("2.11.11", "2.12.4"), + scalaVersion := "2.12.10", + crossScalaVersions := Seq("2.11.12", "2.12.10"), scalacOptions ++= Seq( "-feature", "-deprecation", diff --git a/project/build.properties b/project/build.properties index d6e3507..6adcdc7 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.1.6 +sbt.version=1.3.3 From 947baa25d825091efe44310f4085e5a0fe41d383 Mon Sep 17 00:00:00 2001 From: Paolo Anastagi Date: Mon, 4 Nov 2019 12:59:55 +0100 Subject: [PATCH 2/5] Fix problems in test due to scala upgrade --- .../mail/encoding/quotedPrintableSpec.scala | 4 ++-- .../fs2/mail/imap/IMAPClientFetchSpec.scala | 24 +++++++++---------- .../mail/smtp/MIMEEncodeMultipartSpec.scala | 8 +++---- .../mail/smtp/MIMEEncodePlaintextSpec.scala | 8 +++---- .../fs2/mail/smtp/SMTPClientSpec.scala | 10 ++++---- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/test/scala/spinoco/fs2/mail/encoding/quotedPrintableSpec.scala b/src/test/scala/spinoco/fs2/mail/encoding/quotedPrintableSpec.scala index c7141a0..4e6bbc3 100644 --- a/src/test/scala/spinoco/fs2/mail/encoding/quotedPrintableSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/encoding/quotedPrintableSpec.scala @@ -53,7 +53,7 @@ object quotedPrintableSpec extends Properties("quotedPrintable") { |un moyen, et te trompant ainsi sur la route =C3=A0 suivre les voil=C3=A0 bi= |ent=C3=B4t qui te d=C3=A9gradent, car si leur musique est vulgaire ils te f= |abriquent pour te la vendre une =C3=A2me vulgaire.""" - .stripMargin.lines.toSeq + .stripMargin.linesIterator.toSeq , raw = Seq( """J'interdis aux marchands de vanter trop leur marchandises. Car ils se font vite pédagogues et t'enseignent comme but ce qui n'est par essence qu'un moyen, et te trompant ainsi sur la route à suivre les voilà bientôt qui te dégradent, car si leur musique est vulgaire ils te fabriquent pour te la vendre une âme vulgaire.""" ) @@ -86,7 +86,7 @@ object quotedPrintableSpec extends Properties("quotedPrintable") { |in |wenig aufschieben, denn auch uns f=C3=BCrchten, wie ihr seht, einige Tiere, |welche also wohl noch ungl=C3=BCcklicher sein m=C3=BCssen als wir."""" - .stripMargin.lines.toSeq + .stripMargin.linesIterator.toSeq , raw = Seq( "Die Hasen und die Frösche" , "" diff --git a/src/test/scala/spinoco/fs2/mail/imap/IMAPClientFetchSpec.scala b/src/test/scala/spinoco/fs2/mail/imap/IMAPClientFetchSpec.scala index 1e2d50a..032da66 100644 --- a/src/test/scala/spinoco/fs2/mail/imap/IMAPClientFetchSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/imap/IMAPClientFetchSpec.scala @@ -106,7 +106,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |* 0 EXPUNGE |3 OK Success | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") val multipleHeadersResponse = """* 4249 FETCH (BODY[HEADER] {4774} @@ -277,7 +277,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |) |4 OK Success | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") def parseFetchResponse(resp: String, chunkSz: Int): Vector[Either[String, Long]] = { @@ -420,7 +420,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |AAAASUVORK5CYII=) |10 OK Success | - |""".stripMargin.stripMargin.lines.mkString("\r\n") + |""".stripMargin.stripMargin.linesIterator.mkString("\r\n") val fetchBodyBytes = ByteVector.fromBase64( """iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAPFBMVEX///+1tbWwsLCtra3////5 @@ -470,14 +470,14 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |Please click on the link below to create your account https://accounts.restcomm.com/verify-code?code=1709-4060452b-1b01-4991-9b7e-93e98e139e9d |) |11 OK Success - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") val BodyText8BitResponse = """* 2077 FETCH (BODY[1] {87} |Jestliže se vám newsletter nezobrazil správně, klikněte prosím sem |Červen 2017 ) |12 OK Success - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") val BodyTextQuotedPrintableResponse = """* 4249 FETCH (BODY[1] {745} @@ -498,7 +498,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |">=20 |) |13 OK Success - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") val BodyTextBase64Response = """* 3632 FETCH (BODY[1] {3112} @@ -548,7 +548,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |MDZmZGMwNjliZDQ0OGE2YTI0MTFhZGU2ZGZjMzgzND4gICAgICAgICAgICAgICAgICAg |ICAgICAgICAgICAgICAgICAgDQoNCg==) |13 OK Success - """.stripMargin.lines.mkString("\r\n") + """.stripMargin.linesIterator.mkString("\r\n") val SP = " " @@ -558,13 +558,13 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ | |Please click on the link below to create your account https://accounts.restcomm.com/verify-code?code=1709-4060452b-1b01-4991-9b7e-93e98e139e9d | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") } property("decode-fetch-bytes.8bit") = forAll(Gen.choose(1, BodyText8BitResponse.size)) { sz => decodeFetchText(BodyText8BitResponse, sz, encoding = "8BIT", charset = Some("UTF-8")) ?= """Jestliže se vám newsletter nezobrazil správně, klikněte prosím sem - |Červen 2017 """.stripMargin.lines.mkString("\r\n") + |Červen 2017 """.stripMargin.linesIterator.mkString("\r\n") } @@ -580,14 +580,14 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ |$SP |
$SP | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") } property("decode-fetch-bytes.base64.text") = forAll(Gen.choose(1, BodyTextBase64Response.size)) { sz => val r = decodeFetchText(BodyTextBase64Response, sz, encoding = "BASE64", charset = Some("UTF-8")) - .lines.map(_.trim).mkString("\r\n") + .linesIterator.map(_.trim).mkString("\r\n") val e = s""" @@ -617,7 +617,7 @@ object IMAPClientFetchSpec extends Properties("IMAPClient.Fetch"){ | |To unsubscribe from future emails or to update your email preferences click here | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") r ?= e diff --git a/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodeMultipartSpec.scala b/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodeMultipartSpec.scala index a2d4899..fc5190b 100644 --- a/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodeMultipartSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodeMultipartSpec.scala @@ -30,7 +30,7 @@ object MIMEEncodeMultipartSpec extends Properties("MIMEEncodeMultipart") { |. Dot starting line |--- end | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") )) val htmlText = Stream.chunk(StringChunk( @@ -40,7 +40,7 @@ object MIMEEncodeMultipartSpec extends Properties("MIMEEncodeMultipart") { |
This contains international chars ěščřžý
| | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") )) property("alternative") = protect { @@ -99,7 +99,7 @@ object MIMEEncodeMultipartSpec extends Properties("MIMEEncodeMultipart") { | |------boundary----- | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") } @@ -205,7 +205,7 @@ object MIMEEncodeMultipartSpec extends Properties("MIMEEncodeMultipart") { | |-----mixed-boundary----- | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") } } diff --git a/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodePlaintextSpec.scala b/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodePlaintextSpec.scala index 6bd8321..8f547f1 100644 --- a/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodePlaintextSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/smtp/MIMEEncodePlaintextSpec.scala @@ -27,7 +27,7 @@ object MIMEEncodePlaintextSpec extends Properties("MIMEEncodePlaintext") { |. Dot starting line |--- end | - """.stripMargin.lines.mkString("\r\n") + """.stripMargin.linesIterator.mkString("\r\n") )).covary[IO] property("defaults") = protect { @@ -64,7 +64,7 @@ object MIMEEncodePlaintextSpec extends Properties("MIMEEncodePlaintext") { |. Dot starting line |--- end | - """.stripMargin.lines.mkString("\r\n") + """.stripMargin.linesIterator.mkString("\r\n") } @@ -103,7 +103,7 @@ object MIMEEncodePlaintextSpec extends Properties("MIMEEncodePlaintext") { |. Dot starting line |--- end | - """.stripMargin.lines.mkString("\r\n") + """.stripMargin.linesIterator.mkString("\r\n") } property("specified.transfer-encoding") = protect { @@ -139,7 +139,7 @@ object MIMEEncodePlaintextSpec extends Properties("MIMEEncodePlaintext") { | aGF0IHNoYWxsIGJlIGVuY29kZWQNCi4gRG90IHN0YXJ0aW5nIGxpbmUNCi0tLSBlbmQNCg0KI | CAgICAg | - |""".stripMargin.lines.mkString("\r\n") + |""".stripMargin.linesIterator.mkString("\r\n") } } diff --git a/src/test/scala/spinoco/fs2/mail/smtp/SMTPClientSpec.scala b/src/test/scala/spinoco/fs2/mail/smtp/SMTPClientSpec.scala index 4778a98..bde95f0 100644 --- a/src/test/scala/spinoco/fs2/mail/smtp/SMTPClientSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/smtp/SMTPClientSpec.scala @@ -20,7 +20,7 @@ object SMTPClientSpec extends Properties("SMTPClient"){ | . |x. |...... - """.stripMargin.lines.mkString("\r\n").getBytes)) + """.stripMargin.linesIterator.mkString("\r\n").getBytes)) ).covary[IO] .chunkLimit(chunkSize).flatMap(ch => Stream.chunk(ch)) .through(SMTPClient.impl.insertDotIfNeeded) @@ -29,14 +29,14 @@ object SMTPClientSpec extends Properties("SMTPClient"){ ByteVector.view(bs.values, bs.offset, bs.size) } .compile.toVector - .map(_.reduce(_ ++ _).decodeUtf8.right.toOption.getOrElse("").lines.mkString("\r\n")) + .map(_.reduce(_ ++ _).decodeUtf8.right.toOption.getOrElse("").linesIterator.mkString("\r\n")) .unsafeRunSync() ?= """Line |.. | . |x. |....... - """.stripMargin.lines.mkString("\r\n") + """.stripMargin.linesIterator.mkString("\r\n") } @@ -45,7 +45,7 @@ object SMTPClientSpec extends Properties("SMTPClient"){ Stream.chunk(ByteVectorChunk(ByteVector.view( """220 smtp.gmail.com ESMTP k185sm1251101wma.28 - gsmtp | - """.stripMargin.lines.mkString("\r\n").getBytes + """.stripMargin.linesIterator.mkString("\r\n").getBytes ))).covary[IO] .chunkLimit(chunkSize).flatMap(ch => Stream.chunk(ch)) .through(SMTPClient.impl.readResponse[IO]) @@ -66,7 +66,7 @@ object SMTPClientSpec extends Properties("SMTPClient"){ |250-CHUNKING |250 SMTPUTF8 | - """.stripMargin.lines.mkString("\r\n").getBytes + """.stripMargin.linesIterator.mkString("\r\n").getBytes ))).covary[IO] .chunkLimit(chunkSize).flatMap(ch => Stream.chunk(ch)) .through(SMTPClient.impl.readResponse[IO]) From 71465ee1a2196052f21e87826f7473d5a8f78859 Mon Sep 17 00:00:00 2001 From: Paolo Anastagi Date: Mon, 4 Nov 2019 13:03:43 +0100 Subject: [PATCH 3/5] Fix tests --- .../spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala b/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala index 2c12c1b..4f7d679 100644 --- a/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala @@ -24,7 +24,7 @@ object TakeThroughDrainSpec extends Properties("TakeThroughDrain"){ fs2.concurrent.Queue.unbounded[IO, Int].flatMap{ queue => (source.through(queue.enqueue).drain ++ - queue.dequeue.through(internal.takeThroughDrain(_ != 1)).take(2).drain ++ + Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).take(2).drain ++ Stream.eval(queue.dequeue1) ).compile.last }.unsafeRunTimed(10.second).flatten ?= Some(3) @@ -39,7 +39,7 @@ object TakeThroughDrainSpec extends Properties("TakeThroughDrain"){ fs2.concurrent.Queue.unbounded[IO, Int].flatMap{ queue => (source.through(queue.enqueue).drain ++ - queue.dequeue.through(internal.takeThroughDrain(_ != 1)).drain ++ + Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).drain ++ Stream.eval(queue.dequeue1) ).compile.last }.unsafeRunTimed(10.second).flatten ?= Some(3) From 1fe59ec8b2a7d873115cfcfe4dda12ba396dedc7 Mon Sep 17 00:00:00 2001 From: declspec Date: Mon, 18 Nov 2019 12:55:13 +0300 Subject: [PATCH 4/5] Fix usage of takeThroughDrain to pass unit tests --- src/main/scala/spinoco/fs2/mail/imap/IMAPClient.scala | 2 +- .../spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/spinoco/fs2/mail/imap/IMAPClient.scala b/src/main/scala/spinoco/fs2/mail/imap/IMAPClient.scala index e19d33b..2b95fdb 100644 --- a/src/main/scala/spinoco/fs2/mail/imap/IMAPClient.scala +++ b/src/main/scala/spinoco/fs2/mail/imap/IMAPClient.scala @@ -287,7 +287,7 @@ object IMAPClient { fromServer.through(spinoco.fs2.mail.internal.takeThroughDrain[F, IMAPData] { case IMAPText(l) => ! l.startsWith(tag) case _ => true - }).pull.uncons1.flatMap { + }).onFinalize{Applicative[F].unit}.pull.uncons1.flatMap { case None => unlock.map { _ => Left("* BAD Connection with server terminated") } case Some((IMAPText(resp), tail)) => if (resp.startsWith(tag)) { diff --git a/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala b/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala index 4f7d679..d7c5255 100644 --- a/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala +++ b/src/test/scala/spinoco/fs2/mail/internal/TakeThroughDrainSpec.scala @@ -24,7 +24,7 @@ object TakeThroughDrainSpec extends Properties("TakeThroughDrain"){ fs2.concurrent.Queue.unbounded[IO, Int].flatMap{ queue => (source.through(queue.enqueue).drain ++ - Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).take(2).drain ++ + Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).take(2).onFinalize{IO.unit}.drain ++ Stream.eval(queue.dequeue1) ).compile.last }.unsafeRunTimed(10.second).flatten ?= Some(3) @@ -39,7 +39,7 @@ object TakeThroughDrainSpec extends Properties("TakeThroughDrain"){ fs2.concurrent.Queue.unbounded[IO, Int].flatMap{ queue => (source.through(queue.enqueue).drain ++ - Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).drain ++ + Stream.eval(queue.dequeue1).repeat.through(internal.takeThroughDrain(_ != 1)).onFinalize{IO.unit}.drain ++ Stream.eval(queue.dequeue1) ).compile.last }.unsafeRunTimed(10.second).flatten ?= Some(3) From 3caf02fbca18f67a5b9225422d8d8126b0dd0a99 Mon Sep 17 00:00:00 2001 From: declspec Date: Mon, 18 Nov 2019 12:55:50 +0300 Subject: [PATCH 5/5] Upgrade fs2 to version 2.1.0 --- build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 73e8214..687c803 100644 --- a/build.sbt +++ b/build.sbt @@ -8,7 +8,7 @@ lazy val contributors = Seq( , "mrauilm" -> "Milan Raulim" ) -val fs2Version = "2.0.1" +val fs2Version = "2.1.0" lazy val commonSettings = Seq( organization := "com.spinoco",