aboutsummaryrefslogblamecommitdiff
path: root/compiler/test/dotty/tools/dotc/ast/DesugarTests.scala
blob: 8d4d6a583e7f735f2b155bf2424feaab51e914ee (plain) (tree)
















































                                                                                      
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)
    }
}