aboutsummaryrefslogtreecommitdiff
path: root/core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala
diff options
context:
space:
mode:
authorKseniya Tomskikh <ktomskikh@driver.xyz>2018-10-17 17:02:58 +0800
committerKseniya Tomskikh <ktomskikh@driver.xyz>2018-10-17 17:02:58 +0800
commit95c3aeecd7e6ad04ce8d216c09e779f5ca38aa6a (patch)
treedfc94f20d00c84f9dde120f065bfc9298bdff0dc /core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala
parentf5d0b038457ed9d01687f0949e22e08a6b116066 (diff)
parenta43556851bf986b81351fc9f1ae5ba51bf21dc47 (diff)
downloaddriver-core-kseniya/typized-id.tar.gz
driver-core-kseniya/typized-id.tar.bz2
driver-core-kseniya/typized-id.zip
Merge branch 'master' into kseniya/typized-idkseniya/typized-id
Diffstat (limited to 'core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala')
-rw-r--r--core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala63
1 files changed, 63 insertions, 0 deletions
diff --git a/core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala b/core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala
new file mode 100644
index 0000000..14dfaf9
--- /dev/null
+++ b/core-types/src/test/scala/xyz/driver/core/tagging/TaggingTest.scala
@@ -0,0 +1,63 @@
+package xyz.driver.core.tagging
+
+import org.scalatest.{Matchers, WordSpec}
+import xyz.driver.core.{@@, Name}
+
+/**
+ * @author sergey
+ * @since 9/11/18
+ */
+class TaggingTest extends WordSpec with Matchers {
+
+ "@@ Trimmed" should {
+ "produce values transparently from Strings and Names (by default)" in {
+ val s: String @@ Trimmed = " trimmed "
+ val n: Name[Int] @@ Trimmed = Name(" trimmed ")
+
+ s shouldBe "trimmed"
+ n shouldBe Name[Int]("trimmed")
+ }
+
+ "produce values transparently from values that have an implicit conversion defined" in {
+ import scala.language.implicitConversions
+ implicit def stringSeq2Trimmed(stringSeq: Seq[String]): Seq[String] @@ Trimmed =
+ stringSeq.map(_.trim()).tagged[Trimmed]
+
+ val strings: Seq[String] @@ Trimmed = Seq(" trimmed1 ", " trimmed2 ")
+ strings shouldBe Seq("trimmed1", "trimmed2")
+ }
+
+ "produce values transparently from Options of values that have Trimmed implicits" in {
+ val maybeStringDirect: Option[String @@ Trimmed] = Some(" trimmed ")
+ val maybeStringFromMap: Option[String @@ Trimmed] = Map("s" -> " trimmed ").get("s")
+
+ val maybeNameDirect: Option[Name[Int] @@ Trimmed] = Some(Name(" trimmed "))
+ val maybeNameFromMap: Option[Name[Int] @@ Trimmed] = Map("s" -> Name[Int](" trimmed ")).get("s")
+
+ maybeStringDirect shouldBe Some("trimmed")
+ maybeStringFromMap shouldBe Some("trimmed")
+ maybeNameDirect shouldBe Some(Name[Int]("trimmed"))
+ maybeNameFromMap shouldBe Some(Name[Int]("trimmed"))
+ }
+
+ "produce values transparently from collections of values that have Trimmed implicits" in {
+ val strings = Seq("s" -> " trimmed1 ", "s" -> " trimmed2 ")
+ val names = strings.map {
+ case (k, v) => k -> Name[Int](v)
+ }
+
+ val trimmedStrings: Seq[String @@ Trimmed] = strings.groupBy(_._1)("s").map(_._2)
+ val trimmedNames: Seq[Name[Int] @@ Trimmed] = names.groupBy(_._1)("s").map(_._2)
+
+ trimmedStrings shouldBe Seq("trimmed1", "trimmed2")
+ trimmedNames shouldBe Seq("trimmed1", "trimmed2").map(Name[Int])
+ }
+
+ "have Ordering" in {
+ val names: Seq[Name[Int] @@ Trimmed] = Seq(" 2 ", " 1 ", "3").map(Name[Int])
+
+ names.sorted should contain inOrderOnly (Name("1"), Name("2"), Name("3"))
+ }
+ }
+
+}