aboutsummaryrefslogtreecommitdiff
path: root/bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-10-11 17:28:39 +0200
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:06 +0100
commit2d10c87ce537fb42fdb134efcae53dca7305a7b7 (patch)
treea3629c9a3ad6db3e9d07df8fa8621f8c8211076c /bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala
parent34d64f381362b12a595fd26690c7c9b1c26d16f7 (diff)
downloaddotty-2d10c87ce537fb42fdb134efcae53dca7305a7b7.tar.gz
dotty-2d10c87ce537fb42fdb134efcae53dca7305a7b7.tar.bz2
dotty-2d10c87ce537fb42fdb134efcae53dca7305a7b7.zip
Move sbt-bridge
Diffstat (limited to 'bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala')
-rw-r--r--bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala119
1 files changed, 0 insertions, 119 deletions
diff --git a/bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala b/bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala
deleted file mode 100644
index ed463a3e6..000000000
--- a/bridge/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala
+++ /dev/null
@@ -1,119 +0,0 @@
-/** Adapted from https://github.com/sbt/sbt/blob/0.13/compile/interface/src/test/scala/xsbt/ExtractUsedNamesSpecification.scala */
-package xsbt
-
-import org.junit.runner.RunWith
-import xsbti.api.ClassLike
-import xsbti.api.Def
-import xsbti.api.Package
-import xsbt.api.SameAPI
-import org.junit.runners.JUnit4
-
-import org.specs2.mutable.Specification
-
-@RunWith(classOf[JUnit4])
-class ExtractUsedNamesSpecification extends Specification {
-
- /**
- * Standard names that appear in every compilation unit that has any class
- * definition.
- */
- private val standardNames = Set(
- // All class extend Object
- "Object",
- // All class have a default constructor called <init>
- "<init>",
- // the return type of the default constructor is Unit
- "Unit"
- )
-
- "imported name" in {
- val src = """
- |package a { class A }
- |package b {
- | import a.{A => A2}
- |}""".stripMargin
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(src)
- val expectedNames = standardNames ++ Set("a", "A", "A2", "b")
- usedNames === expectedNames
- }
-
- // test covers https://github.com/gkossakowski/sbt/issues/6
- "names in type tree" in {
- val srcA = """|
- |package a {
- | class A {
- | class C { class D }
- | }
- | class B[T]
- | class BB
- |}""".stripMargin
- val srcB = """|
- |package b {
- | abstract class X {
- | def foo: a.A#C#D
- | def bar: a.B[a.BB]
- | }
- |}""".stripMargin
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(srcA, srcB)
- // DOTTY: unlike the scalac sbt phase, this does not contain "X", I believe this is safe
- // TODO: report issue against sbt suggesting that they do the same
- val expectedNames = standardNames ++ Set("a", "A", "B", "C", "D", "b", "BB")
- usedNames === expectedNames
- }
-
- // test for https://github.com/gkossakowski/sbt/issues/5
- "symbolic names" in {
- val srcA = """|
- |class A {
- | def `=`: Int = 3
- |}""".stripMargin
- val srcB = """|
- |class B {
- | def foo(a: A) = a.`=`
- |}""".stripMargin
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(srcA, srcB)
- // DOTTY TODO: "Int" is not actually used, but we collect it because
- // it's the inferred return type so it appears in a TypeTree
- // We could avoid this by checking if the untyped tree has a return type
- // but is it worth it? Revisit this after https://github.com/sbt/sbt/issues/1104
- // has landed.
- val expectedNames = standardNames ++ Set("A", "a", "$eq", "Int")
- usedNames === expectedNames
- }
-
- // test for https://github.com/gkossakowski/sbt/issues/3
- "used names from the same compilation unit" in {
- val src = "class A { def foo: Int = 0; def bar: Int = foo }"
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(src)
- val expectedNames = standardNames ++ Set("A", "foo", "Int")
- usedNames === expectedNames
- }
-
- // pending test for https://issues.scala-lang.org/browse/SI-7173
- "names of constants" in {
- val src = "class A { final val foo = 12; def bar: Int = foo }"
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(src)
- val expectedNames = standardNames ++ Set("A", "foo", "Int")
- usedNames === expectedNames
- }
-
- // pending test for https://github.com/gkossakowski/sbt/issues/4
- // TODO: we should fix it by having special treatment of `selectDynamic` and `applyDynamic` calls
- "names from method calls on Dynamic" in {
- val srcA = """|import scala.language.dynamics
- |class A extends Dynamic {
- | def selectDynamic(name: String): Int = name.length
- |}""".stripMargin
- val srcB = "class B { def foo(a: A): Int = a.bla }"
- val compilerForTesting = new ScalaCompilerForUnitTesting(nameHashing = true)
- val usedNames = compilerForTesting.extractUsedNamesFromSrc(srcA, srcB)
- val expectedNames = standardNames ++ Set("B", "A", "a", "Int", "selectDynamic", "bla")
- usedNames === expectedNames
- }.pendingUntilFixed("Call to Dynamic is desugared in type checker so Select nodes is turned into string literal.")
-
-}