aboutsummaryrefslogtreecommitdiff
path: root/tests/src/main/scala/tests.scala
diff options
context:
space:
mode:
authorJon Pretty <jon.pretty@propensive.com>2017-12-28 12:01:25 +0000
committerJon Pretty <jon.pretty@propensive.com>2017-12-28 12:01:25 +0000
commit038a0b1bf3c0f5db872bf1be289ff21f03cc6002 (patch)
tree949712e2583f76159cfaeb97b5c49e6583c7749b /tests/src/main/scala/tests.scala
parentd4f51be01aba1ff32707a91d44f85272b7c2f562 (diff)
parent579cdb1281e7f3e16b13abc591c5e06b1aa32db5 (diff)
downloadmagnolia-038a0b1bf3c0f5db872bf1be289ff21f03cc6002.tar.gz
magnolia-038a0b1bf3c0f5db872bf1be289ff21f03cc6002.tar.bz2
magnolia-038a0b1bf3c0f5db872bf1be289ff21f03cc6002.zip
Merge branch 'md/rawconstruct' of https://github.com/sirthias/magnolia into sirthias-md/rawconstruct
Diffstat (limited to 'tests/src/main/scala/tests.scala')
-rw-r--r--tests/src/main/scala/tests.scala41
1 files changed, 40 insertions, 1 deletions
diff --git a/tests/src/main/scala/tests.scala b/tests/src/main/scala/tests.scala
index e275dee..ca3cc71 100644
--- a/tests/src/main/scala/tests.scala
+++ b/tests/src/main/scala/tests.scala
@@ -1,13 +1,14 @@
package magnolia.tests
import language.experimental.macros
-
import magnolia._
import estrapade._
import contextual.data.scalac._
import contextual.data.fqt._
import contextual.data.txt._
+import scala.util.control.NonFatal
+
sealed trait Tree[+T]
case class Leaf[+L](value: L) extends Tree[L]
case class Branch[+B](left: Tree[B], right: Tree[B]) extends Tree[B]
@@ -237,6 +238,44 @@ object Tests extends TestApp {
|""")
}
+ test("patch a Person via a Patcher[Entity]") {
+ // these two implicits can be removed once https://github.com/propensive/magnolia/issues/58 is closed
+ implicit val stringPatcher = Patcher.forSingleValue[String]
+ implicit val intPatcher = Patcher.forSingleValue[Int]
+
+ val person = Person("Bob", 42)
+ implicitly[Patcher[Entity]]
+ .patch(person, Seq(null, 21))
+ }.assert(_ == Person("Bob", 21))
+
+ test("throw on an illegal patch attempt with field count mismatch") {
+ // these two implicits can be removed once https://github.com/propensive/magnolia/issues/58 is closed
+ implicit val stringPatcher = Patcher.forSingleValue[String]
+ implicit val intPatcher = Patcher.forSingleValue[Int]
+
+ try {
+ val person = Person("Bob", 42)
+ implicitly[Patcher[Entity]]
+ .patch(person, Seq(null, 21, 'killer))
+ } catch {
+ case NonFatal(e) => e.getMessage
+ }
+ }.assert(_ == "Cannot patch value `Person(Bob,42)`, expected 2 fields but got 3")
+
+ test("throw on an illegal patch attempt with field type mismatch") {
+ // these two implicits can be removed once https://github.com/propensive/magnolia/issues/58 is closed
+ implicit val stringPatcher = Patcher.forSingleValue[String]
+ implicit val intPatcher = Patcher.forSingleValue[Int]
+
+ try {
+ val person = Person("Bob", 42)
+ implicitly[Patcher[Entity]]
+ .patch(person, Seq(null, 'killer))
+ } catch {
+ case NonFatal(e) => e.getMessage
+ }
+ }.assert(_ == "scala.Symbol cannot be cast to java.lang.Integer")
+
class ParentClass() {
case class LocalClass(name: String)