diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-03-12 21:09:58 +0100 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2014-03-13 14:09:28 +0100 |
commit | 0089217da35aa2445155622fdb55cf8e6e361d9e (patch) | |
tree | f7a228a462a1e425382432cc6e246474c4bd9957 /test/test/transform/PostTyperTransformerTest.scala | |
parent | 29d2d29b7a5a54b1666294c576b85d38f1dd0989 (diff) | |
download | dotty-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/PostTyperTransformerTest.scala')
-rw-r--r-- | test/test/transform/PostTyperTransformerTest.scala | 117 |
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 + ) + } +} |