aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-11-10 12:59:57 +0000
committerJon Pretty <jon.pretty@propensive.com>2017-11-10 12:59:57 +0000
commit657d2fb2c16b75c790bf3c3a63d1f830a42893db (patch)
tree619d43dd310eeb19ab964d3ea3bf7884b088ea71
parent6e90ebbe2f951305bd8f5f02fe4b04531bb31869 (diff)
downloadmagnolia-657d2fb2c16b75c790bf3c3a63d1f830a42893db.tar.gz
magnolia-657d2fb2c16b75c790bf3c3a63d1f830a42893db.tar.bz2
magnolia-657d2fb2c16b75c790bf3c3a63d1f830a42893db.zip
More build cleanup, and a couple of extra tests
-rw-r--r--build.sbt20
-rw-r--r--tests/src/main/scala/tests.scala38
2 files changed, 39 insertions, 19 deletions
diff --git a/build.sbt b/build.sbt
index 3e04384..628088f 100644
--- a/build.sbt
+++ b/build.sbt
@@ -17,7 +17,6 @@ lazy val examples = project
lazy val tests = project
.in(file("tests"))
.settings(buildSettings: _*)
- .settings(noPublishSettings: _*)
.settings(unmanagedSettings)
.settings(moduleName := "magnolia-tests")
.dependsOn(examples)
@@ -25,7 +24,6 @@ lazy val tests = project
lazy val benchmarks = project
.in(file("benchmarks"))
.settings(buildSettings: _*)
- .settings(noPublishSettings: _*)
.settings(moduleName := "magnolia-benchmarks")
.dependsOn(examples)
@@ -77,12 +75,6 @@ lazy val publishSettings = Seq(
)
)
-lazy val noPublishSettings = Seq(
- publish := (()),
- publishLocal := (()),
- publishArtifact := false
-)
-
import java.io.File
lazy val unmanagedSettings = unmanagedBase := (scalaVersion.value.split("\\.").map(_.toInt).to[List] match {
@@ -91,16 +83,6 @@ lazy val unmanagedSettings = unmanagedBase := (scalaVersion.value.split("\\.").m
})
lazy val scalaMacroDependencies: Seq[Setting[_]] = Seq(
- libraryDependencies += "org.typelevel" %% "macro-compat" % "1.1.1",
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value,
- libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value,
- libraryDependencies += compilerPlugin(
- "org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full
- )
+ libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
)
-
-credentials ++= (for {
- username <- Option(System.getenv().get("SONATYPE_USERNAME"))
- password <- Option(System.getenv().get("SONATYPE_PASSWORD"))
-} yield
- Credentials("Sonatype Nexus Repository Manager", "oss.sonatype.org", username, password)).toSeq
diff --git a/tests/src/main/scala/tests.scala b/tests/src/main/scala/tests.scala
index f79a51b..10eb465 100644
--- a/tests/src/main/scala/tests.scala
+++ b/tests/src/main/scala/tests.scala
@@ -18,6 +18,14 @@ case class Company(name: String) extends Entity
case class Person(name: String, age: Int) extends Entity
case class Address(line1: String, occupant: Person)
+case class Lunchbox(fruit: Fruit, drink: String)
+object Fruit {
+ import examples._
+ implicit val showFruit: Show[String, Fruit] =
+ new Show[String, Fruit] { def show(f: Fruit): String = f.name }
+}
+case class Fruit(name: String)
+
case class Item(name: String, quantity: Int = 1, price: Int)
sealed trait Color
@@ -45,6 +53,29 @@ object Tests extends TestApp {
implicitly[Show[String, Branch[String]]].show(Branch(Leaf("LHS"), Leaf("RHS")))
}.assert(_ == "Branch(left=Leaf(value=LHS),right=Leaf(value=RHS))")
+ test("local implicit beats Magnolia") {
+ import magnolia.examples._
+ implicit val showPerson: Show[String, Person] = new Show[String, Person] { def show(p: Person) = "nobody" }
+ implicitly[Show[String, Address]].show(Address("Home", Person("John Smith", 44)))
+ }.assert(_ == "Address(line1=Home,occupant=nobody)")
+
+ test("even low-priority implicit beats Magnolia for nested case") {
+ import magnolia.examples._
+ import Show.gen
+ implicitly[Show[String, Lunchbox]].show(Lunchbox(Fruit("apple"), "lemonade"))
+ }.assert(_ == "Lunchbox(fruit=apple,drink=lemonade)")
+
+ test("low-priority implicit does not beat Magnolia when not nested") {
+ import magnolia.examples._
+ import Show.gen
+ implicitly[Show[String, Fruit]].show(Fruit("apple"))
+ }.assert(_ == "Fruit(name=apple)")
+
+ test("typeclass implicit scope has lower priority than ADT implicit scope") {
+ import magnolia.examples._
+ implicitly[Show[String, Fruit]].show(Fruit("apple"))
+ }.assert(_ == "apple")
+
test("test equality false") {
import examples._
Eq.gen[Entity].equal(Person("John Smith", 34), Person("", 0))
@@ -124,5 +155,12 @@ object Tests extends TestApp {
| in parameter 'alpha' of product type Beta
|"""))
+ val tupleDerivation = test("derive for a tuple") {
+ implicitly[Show[String, (Int, String)]]
+ }.returns()
+
+ test("serialize a tuple") {
+ tupleDerivation().show((42, "Hello World"))
+ }.assert(_ == "Tuple2(_1=42,_2=Hello World)")
}
}