diff options
Diffstat (limited to 'compiler/test')
-rw-r--r-- | compiler/test/dotty/tools/dotc/ast/DesugarTests.scala | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/compiler/test/dotty/tools/dotc/ast/DesugarTests.scala b/compiler/test/dotty/tools/dotc/ast/DesugarTests.scala new file mode 100644 index 000000000..8d4d6a583 --- /dev/null +++ b/compiler/test/dotty/tools/dotc/ast/DesugarTests.scala @@ -0,0 +1,49 @@ +package dotty.tools +package dotc +package ast + +import core._ +import Names._, Types._ , Symbols._, StdNames._, Flags._, Contexts._ + +import org.junit.Test +import org.junit.Assert._ + +class DesugarTests extends DottyTest { + import tpd._ + + private def validSym(sym: Symbol)(implicit ctx: Context): Unit = { + assert( + // remaining symbols must be either synthetic: + sym.is(Synthetic) || + // or be a type argument from product: + (sym.isType && sym.is(BaseTypeArg)) || + // or be a constructor: + sym.name == nme.CONSTRUCTOR, + s"found: $sym (${sym.flags})" + ) + } + + @Test def caseClassHasCorrectMembers = + checkCompile("frontend", "case class Foo(x: Int, y: String)") { (tree, context) => + implicit val ctx = context + val ccTree = tree.find(tree => tree.symbol.name == typeName("Foo")).get + val List(_, foo) = defPath(ccTree.symbol, tree).map(_.symbol.info) + + val x :: y :: rest = foo.decls.toList + + // Make sure we extracted the correct values from foo: + assert(x.name == termName("x")) + assert(y.name == termName("y")) + + rest.foreach(validSym) + } + + @Test def caseClassCompanionHasCorrectMembers = + checkCompile("frontend", "case class Foo(x: Int, y: String)") { (tree, context) => + implicit val ctx = context + val ccTree = tree.find(tree => tree.symbol.name == termName("Foo")).get + val List(_, foo) = defPath(ccTree.symbol, tree).map(_.symbol.info) + + foo.decls.foreach(validSym) + } +} |