package dotty.tools package dotc package transform import org.junit.{Assert, Test} import core._ import ast.Trees import Contexts._ import Flags._ import Denotations._ import NameOps._ import Symbols._ import Types._ import Decorators._ import Trees._ import TreeTransforms.{TreeTransform, TreeTransformer} class PostTyperTransformerTest extends DottyTest { /* FIXME: re-enable after adapting to new scheme @Test def shouldStripImports = checkCompile("frontend", "class A{ import scala.collection.mutable._; val d = 1}") { (tree, context) => implicit val ctx = context class EmptyTransform extends TreeTransform { override def name: String = "empty" init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId) } 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 extends TreeTransform { override def name: String = "empty" init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId) } 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 extends TreeTransform { override def name: String = "empty" init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId) } 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 extends TreeTransform { override def name: String = "empty" init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId) } 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 extends TreeTransform { override def name: String = "empty" init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId) } 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 ) }*/ }