summaryrefslogtreecommitdiff
path: root/test/files/scalacheck
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-02-21 15:02:43 +0100
committerJason Zaugg <jzaugg@gmail.com>2014-02-21 15:02:43 +0100
commit25f23a443bc6831d1c8d7f6f57212a29e84bbaa5 (patch)
treee281e0034c7c3de89b1969da1791ab91daf66b54 /test/files/scalacheck
parentd79fc2cae4e550bf0a3276a3961ed007bdd428e7 (diff)
parent48a706dee8f7df9d1a6267b6b117cf1546915506 (diff)
downloadscala-25f23a443bc6831d1c8d7f6f57212a29e84bbaa5.tar.gz
scala-25f23a443bc6831d1c8d7f6f57212a29e84bbaa5.tar.bz2
scala-25f23a443bc6831d1c8d7f6f57212a29e84bbaa5.zip
Merge pull request #3546 from VladimirNik/typedTreesPrinter-2.11.0
CodePrinter added to Printers 2.11.0
Diffstat (limited to 'test/files/scalacheck')
-rw-r--r--test/files/scalacheck/quasiquotes/TypecheckedProps.scala72
1 files changed, 71 insertions, 1 deletions
diff --git a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
index 8b1cb6cc49..432c0959c9 100644
--- a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
+++ b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
@@ -65,7 +65,7 @@ object TypecheckedProps extends QuasiquoteProperties("typechecked") {
}
property("extract UnApply (2)") = test {
- val q"object $_ { $_; $_; $m }" = typecheck(q"""
+ val q"object $_ { $_; $m }" = typecheck(q"""
object Test {
case class Cell(val x: Int)
new Cell(0) match { case Cell(v) => v }
@@ -82,4 +82,74 @@ object TypecheckedProps extends QuasiquoteProperties("typechecked") {
val q"val x: ${tq""} = 42" = typechecked
val q"val x: ${t: Type} = 42" = typechecked
}
+
+ property("class with param (1)") = test {
+ val paramName = TermName("x")
+ val q"class $_($param)" = typecheck(q"class Test(val $paramName: Int)")
+
+ assert(param.name == paramName)
+ }
+
+ property("class with param (2)") = test {
+ val paramName = TermName("y")
+ val q"{class $_($param)}" = typecheck(q"class Test(val $paramName: Int = 3)")
+
+ assert(param.name == paramName)
+ assert(param.rhs ≈ q"3")
+ }
+
+ property("class with params") = test {
+ val pName1 = TermName("x1")
+ val pName2 = TermName("x2")
+ val q"{class $_($param1)(..$params2)}" = typecheck(q"class Test(val x0: Float)(val $pName1: Int = 3, $pName2: String)")
+
+ val List(p1, p2, _*) = params2
+
+ assert(p1.name == pName1)
+ assert(p2.name == pName2)
+ assert(params2.size == 2)
+ }
+
+ property("implicit class") = test {
+ val clName = TypeName("Test")
+ val paramName = TermName("x")
+ val q"{implicit class $name($param)}" = typecheck(q"implicit class $clName(val $paramName: String)")
+
+ assert(name == clName)
+ assert(param.name == paramName)
+ }
+
+ property("block with lazy") = test {
+ val lazyName = TermName("x")
+ val lazyRhsVal = 42
+ val lazyRhs = Literal(Constant(lazyRhsVal))
+ val q"{lazy val $pname = $rhs}" = typecheck(q"{lazy val $lazyName = $lazyRhsVal}")
+
+ assert(pname == lazyName)
+ assert(rhs ≈ lazyRhs)
+ }
+
+ property("class with lazy") = test {
+ val clName = TypeName("Test")
+ val paramName = TermName("x")
+ val q"class $name{lazy val $pname = $_}" = typecheck(q"class $clName {lazy val $paramName = 42}")
+
+ assert(name == clName)
+ assert(pname == paramName)
+ }
+
+ property("case class with object") = test {
+ val defName = TermName("z")
+ val defRhsVal = 42
+ val defRhs = Literal(Constant(defRhsVal))
+ val q"object $_{ $_; object $_ extends ..$_ {def $name = $rhs} }" =
+ typecheck(q"""
+ object Test{
+ case class C(x: Int) { def y = x };
+ object C { def $defName = $defRhsVal }
+ }""")
+
+ assert(name == defName)
+ assert(rhs ≈ defRhs)
+ }
}