aboutsummaryrefslogtreecommitdiff
path: root/test/test/transform
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2014-03-12 21:09:58 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-03-13 14:09:28 +0100
commit0089217da35aa2445155622fdb55cf8e6e361d9e (patch)
treef7a228a462a1e425382432cc6e246474c4bd9957 /test/test/transform
parent29d2d29b7a5a54b1666294c576b85d38f1dd0989 (diff)
downloaddotty-0089217da35aa2445155622fdb55cf8e6e361d9e.tar.gz
dotty-0089217da35aa2445155622fdb55cf8e6e361d9e.tar.bz2
dotty-0089217da35aa2445155622fdb55cf8e6e361d9e.zip
PostTyper transformers
1) reorders companion objects so that they allways follow matching classes 2) removes imports and named arguments 3) rewrites all trees holding types are to TypeTrees
Diffstat (limited to 'test/test/transform')
-rw-r--r--test/test/transform/PostTyperTransformerTest.scala117
1 files changed, 117 insertions, 0 deletions
diff --git a/test/test/transform/PostTyperTransformerTest.scala b/test/test/transform/PostTyperTransformerTest.scala
new file mode 100644
index 000000000..50696728e
--- /dev/null
+++ b/test/test/transform/PostTyperTransformerTest.scala
@@ -0,0 +1,117 @@
+package test.transform
+
+
+import org.junit.{Assert, Test}
+import test.DottyTest
+import dotty.tools.dotc.core._
+import dotty.tools.dotc.ast.Trees
+import Contexts._
+import Flags._
+import Denotations._
+import NameOps._
+import Symbols._
+import Types._
+import Decorators._
+import Trees._
+import dotty.tools.dotc.transform.TreeTransforms.{TreeTransform, TreeTransformer}
+import dotty.tools.dotc.transform.PostTyperTransformers.PostTyperTransformer
+
+class PostTyperTransformerTest extends DottyTest {
+
+ @Test
+ def shouldStripImports = checkCompile("frontend", "class A{ import scala.collection.mutable._; val d = 1}") {
+ (tree, context) =>
+ implicit val ctx = context
+ class EmptyTransform(group: TreeTransformer, idx: Int) extends TreeTransform(group, idx) {}
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new EmptyTransform(_, _))
+
+ override def name: String = "test"
+ }
+ val transformed = transformer.transform(tree)
+
+ Assert.assertTrue("should strip imports",
+ !transformed.toString.toLowerCase.contains("import")
+ )
+ }
+
+ @Test
+ def shouldStripNamedArgs = checkCompile("frontend", "class A{ def p(x:Int, y:Int= 2) = 1; p(1, y = 2)}") {
+ (tree, context) =>
+ implicit val ctx = context
+ class EmptyTransform(group: TreeTransformer, idx: Int) extends TreeTransform(group, idx) {}
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new EmptyTransform(_, _))
+
+ override def name: String = "test"
+ }
+ val transformed = transformer.transform(tree)
+
+ Assert.assertTrue("should string named arguments",
+ !transformed.toString.contains("NamedArg")
+ )
+ }
+
+ @Test
+ def shouldReorderExistingObjectsInPackage = checkCompile("frontend", "object A{}; class A{} ") {
+ (tree, context) =>
+ implicit val ctx = context
+ class EmptyTransform(group: TreeTransformer, idx: Int) extends TreeTransform(group, idx) {}
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new EmptyTransform(_, _))
+
+ override def name: String = "test"
+ }
+ val transformed = transformer.transform(tree).toString
+ val classPattern = "TypeDef(Modifiers(,,List()),A,"
+ val classPos = transformed.indexOf(classPattern)
+ val moduleClassPattern = "TypeDef(Modifiers(final module,,List()),A$,"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should reorder existing objects in package",
+ classPos < modulePos
+ )
+ }
+
+ @Test
+ def shouldReorderExistingObjectsInBlock = checkCompile("frontend", "class D {def p = {object A{}; class A{}; 1}} ") {
+ (tree, context) =>
+ implicit val ctx = context
+ class EmptyTransform(group: TreeTransformer, idx: Int) extends TreeTransform(group, idx) {}
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new EmptyTransform(_, _))
+
+ override def name: String = "test"
+ }
+ val transformed = transformer.transform(tree).toString
+ val classPattern = "TypeDef(Modifiers(,,List()),A,"
+ val classPos = transformed.indexOf(classPattern)
+ val moduleClassPattern = "TypeDef(Modifiers(final module,,List()),A$,"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should reorder existing objects in block",
+ classPos < modulePos
+ )
+ }
+
+ @Test
+ def shouldReorderExistingObjectsInTemplate = checkCompile("frontend", "class D {object A{}; class A{}; } ") {
+ (tree, context) =>
+ implicit val ctx = context
+ class EmptyTransform(group: TreeTransformer, idx: Int) extends TreeTransform(group, idx) {}
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new EmptyTransform(_, _))
+
+ override def name: String = "test"
+ }
+ val transformed = transformer.transform(tree).toString
+ val classPattern = "TypeDef(Modifiers(,,List()),A,"
+ val classPos = transformed.indexOf(classPattern)
+ val moduleClassPattern = "TypeDef(Modifiers(final module,,List()),A$,"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should reorder existing objects in template",
+ classPos < modulePos
+ )
+ }
+}