aboutsummaryrefslogtreecommitdiff
path: root/test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-11-01 18:34:29 +0100
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:07 +0100
commit6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f (patch)
treefe7729ddb03a84728687d5a3068f520b0bc1c297 /test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala
parentb3855424280a821601f126b6b4c6a731b72540ea (diff)
downloaddotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.tar.gz
dotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.tar.bz2
dotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.zip
Move (most) unit tests to correct locations
Should still perhaps move `test/dotc/tests.scala` and the others in the same directory to a better more cohesive location. Would like to delete the worksheets as well - but maybe they hold sentimental value...
Diffstat (limited to 'test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala')
-rw-r--r--test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala128
1 files changed, 128 insertions, 0 deletions
diff --git a/test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala b/test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala
new file mode 100644
index 000000000..18acb2105
--- /dev/null
+++ b/test/dotty/tools/dotc/transform/CreateCompanionObjectsTest.scala
@@ -0,0 +1,128 @@
+package dotty.tools
+package dotc
+package transform
+
+import org.junit.{Assert, Test}
+import core._
+import ast.{tpd, Trees}
+import Contexts._
+import Flags._
+import Denotations._
+import NameOps._
+import Symbols._
+import Types._
+import Decorators._
+import Trees._
+import TreeTransforms.{TreeTransform, TreeTransformer}
+
+
+class CreateCompanionObjectsTest extends DottyTest {
+ /* FIXME: re-enable after adapting to new scheme
+
+ import tpd._
+
+ type PostTyperTransformer = TreeTransformer // FIXME do without
+
+ @Test
+ def shouldCreateNonExistingObjectsInPackage = checkCompile("frontend", "class A{} ") {
+ (tree, context) =>
+ implicit val ctx = context
+
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new CreateCompanionObjects {
+
+ override def name: String = "create all companion objects"
+ override def predicate(cts: TypeDef)(implicit ctx:Context): Boolean = true
+ init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId)
+ })
+
+ 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 <synthetic>,,List()),A$"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should create non-existing objects in package",
+ classPos < modulePos
+ )
+ }
+
+ @Test
+ def shouldCreateNonExistingObjectsInBlock = checkCompile("frontend", "class D {def p = {class A{}; 1}} ") {
+ (tree, context) =>
+ implicit val ctx = context
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new CreateCompanionObjects {
+
+ override def name: String = "create all companion modules"
+ override def predicate(cts: TypeDef)(implicit ctx:Context): Boolean = true
+ init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId)
+ })
+
+ 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 <synthetic>,,List()),A$"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should create non-existing objects in block",
+ classPos < modulePos
+ )
+ }
+
+ @Test
+ def shouldCreateNonExistingObjectsInTemplate = checkCompile("frontend", "class D {class A{}; } ") {
+ (tree, context) =>
+ implicit val ctx = context
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new CreateCompanionObjects {
+ override def name: String = "create all companion modules"
+ override def predicate(cts: TypeDef)(implicit ctx:Context): Boolean = true
+ init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId)
+ })
+
+ 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 <synthetic>,,List()),A$"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ Assert.assertTrue("should create non-existing objects in template",
+ classPos < modulePos
+ )
+ }
+
+ @Test
+ def shouldCreateOnlyIfAskedFor = checkCompile("frontend", "class DONT {class CREATE{}; } ") {
+ (tree, context) =>
+ implicit val ctx = context
+ val transformer = new PostTyperTransformer {
+ override def transformations = Array(new CreateCompanionObjects {
+ override def name: String = "create all companion modules"
+ override def predicate(cts: TypeDef)(implicit ctx:Context): Boolean = cts.name.toString.contains("CREATE")
+ init(ctx, ctx.period.firstPhaseId, ctx.period.lastPhaseId)
+ })
+
+ 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 <synthetic>,,List()),CREATE$"
+ val modulePos = transformed.indexOf(moduleClassPattern)
+
+ val notCreatedModulePattern = "TypeDef(Modifiers(final module <synthetic>,,List()),DONT"
+ val notCreatedPos = transformed.indexOf(notCreatedModulePattern)
+
+ Assert.assertTrue("should create non-existing objects in template",
+ classPos < modulePos && (notCreatedPos < 0)
+ )
+ }
+ */
+}