Skip to content

Commit 674c8ef

Browse files
committed
Add scripted source-dependencies tests imported from sbt 0.13
With the following changes: - all tests: extend dotty.runtime.LegacyApp instead of App - inherited-dependencies: do not use structural types - implicit-search: imports with same name as implicits do not shadow implicits in dotty (this is an intentional change) - constants: this test is no longer pending, it works in dotty because we run the ExtractDependencies phase before PostTyper And the following tests removed: - *macro* # No macro support in dotty currently - continuations # no continuation plugin in dotty - cross-source # tests that the bridge works for scala 2.9 and 2.10 - struct* # no structural types in dotty - sealed # dotty does not have exhaustiveness checks yet - inherited-dependencies # only makes sense if name hashing is disabled # which is not supported by the dotty sbt phase Until sbt/sbt#2601 gets fixed, we have to copy `DottyInjectedPlugin.scala` into every test to run it with dotty-bridge.
1 parent ab71732 commit 674c8ef

File tree

479 files changed

+3439
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

479 files changed

+3439
-1
lines changed

bridge/LICENSE

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
Copyright (c) 2015 The dotty-bridge contributors.
1+
Copyright (c) 2015-2016 The dotty-bridge contributors.
2+
All rights reserved.
3+
4+
Some parts of this project are copied or adapted from sbt which is:
5+
Copyright (c) 2008-2016 Typesafe Inc, Mark Harrah, Grzegorz Kossakowski,
6+
Josh Suereth, Indrajit Raychaudhuri, Eugene Yokota, and other contributors.
27
All rights reserved.
38

49
Redistribution and use in source and binary forms, with or without

bridge/build.sbt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,32 @@ lazy val root = (project in file(".")).
2121
fork in Test := true,
2222
parallelExecution in Test := false
2323
)
24+
25+
// Options for scripted tests
26+
ScriptedPlugin.scriptedSettings
27+
scriptedLaunchOpts := Seq("-Xmx1024m")
28+
scriptedBufferLog := false
29+
// TODO: Use this instead of manually copying DottyInjectedPlugin.scala
30+
// everywhere once https://github.com/sbt/sbt/issues/2601 gets fixed.
31+
/*
32+
scriptedPrescripted := { f =>
33+
IO.write(inj, """
34+
import sbt._
35+
import Keys._
36+
37+
object DottyInjectedPlugin extends AutoPlugin {
38+
override def requires = plugins.JvmPlugin
39+
override def trigger = allRequirements
40+
41+
override val projectSettings = Seq(
42+
scalaVersion := "0.1-SNAPSHOT",
43+
scalacOptions += "-language:Scala2",
44+
scalaBinaryVersion := "2.11",
45+
autoScalaLibrary := false,
46+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
47+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
48+
)
49+
}
50+
""")
51+
}
52+
*/

bridge/project/scripted.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
libraryDependencies <+= (sbtVersion) { sv =>
2+
"org.scala-sbt" % "scripted-plugin" % sv
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait A {
2+
def x: Int
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait B extends A {
2+
override def x = 2
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait C extends A {
2+
def x = 5
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
trait D extends C with B
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait C extends A {
2+
abstract override def x = super.x + 5
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
> compile
2+
$ copy-file changes/C2.scala C.scala
3+
-> compile
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
InputKey[Unit]("check-number-of-compiler-iterations") <<= inputTask { (argTask: TaskKey[Seq[String]]) =>
2+
(argTask, compile in Compile) map { (args: Seq[String], a: sbt.inc.Analysis) =>
3+
assert(args.size == 1)
4+
val expectedIterationsNumber = args(0).toInt
5+
assert(a.compilations.allCompilations.size == expectedIterationsNumber, "a.compilations.allCompilations.size = %d (expected %d)".format(a.compilations.allCompilations.size, expectedIterationsNumber))
6+
}
7+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
object Bar {
2+
def bar: Outer.TypeInner = null
3+
// comment to trigger recompilation
4+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object Bar {
2+
def bar: Outer.TypeInner = null
3+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
object Outer {
2+
class Inner { type Xyz }
3+
4+
type TypeInner = Inner { type Xyz = Int }
5+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Impl {
2+
def bleep = Bar.bar
3+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Test for separate compilation and proper value of
2+
# the OVERRIDE flag when abstract types, type alias
3+
# and structural type are involved
4+
# See https://github.com/sbt/sbt/issues/726 for details
5+
6+
# introduces first compile iteration
7+
> compile
8+
# this change adds a comment and does not change api so introduces
9+
# only one additional compile iteration
10+
$ copy-file changes/Bar1.scala src/main/scala/Bar.scala
11+
# second iteration
12+
#> compile
13+
# check if there are only two compile iterations performed
14+
> check-number-of-compiler-iterations 2
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait A {
2+
type S[_]
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait B extends A {
2+
type F = S[Int]
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
trait A {
2+
type S
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
> compile
2+
3+
# remove type arguments from S
4+
$ copy-file changes/A.scala A.scala
5+
6+
# Both A.scala and B.scala should be recompiled, producing a compile error
7+
-> compile
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package example
2+
3+
object A
4+
{
5+
val x: Int = 3
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package example
2+
3+
object A
4+
{
5+
val x: Int = B.y
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package example
2+
3+
object A
4+
{
5+
val x: String = B.y
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package example
2+
3+
object B
4+
{
5+
val y: String = "4"
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package example
2+
3+
object B
4+
{
5+
val y: Int = 5
6+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# This test checks that when a source file included in a partial recompilation adds a dependency on
2+
# a file not included in the partial recompilation, the dependency is properly recorded.
3+
4+
# B and A are independent, so both should compile successfully
5+
$ copy-file changes/A1.scala src/main/scala/A.scala
6+
$ copy-file changes/B1.scala src/main/scala/B.scala
7+
> compile
8+
9+
10+
# A now depends on B and to check that it was recompiled, we mismatch the types, which should fail
11+
$ copy-file changes/A2.scala src/main/scala/A.scala
12+
-> compile
13+
14+
15+
# We now correct the type so that it compiles successfully and this should introduce a dependency from A to B
16+
$ copy-file changes/A3.scala src/main/scala/A.scala
17+
> compile
18+
19+
20+
# If the dependency from A to B was properly introduced, changing the type of B.y to Int should make
21+
# the following statement in A a compiler error:
22+
# val x: String = B.y
23+
$ copy-file changes/B2.scala src/main/scala/B.scala
24+
-> compile
25+
26+
# verify this was the correct result by doing a clean+compile
27+
> clean
28+
-> compile
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
abstract class A {
2+
type T
3+
object X {
4+
def foo(x: T): T = x
5+
}
6+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class B extends A {
2+
type T = Int
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
object C extends B
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object D {
2+
C.X.foo(12)
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class B extends A {
2+
type T = String
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
> compile
2+
$ copy-file changes/B2.scala B.scala
3+
-> compile
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class A {
2+
type T <: S
3+
type S
4+
object X {
5+
def foo: T = null.asInstanceOf[T]
6+
}
7+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class B extends A {
2+
type S <: Int
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
object C extends B
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object D {
2+
val x: Int = C.X.foo
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class B extends A {
2+
type S <: String
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
> compile
2+
$ copy-file changes/B2.scala B.scala
3+
-> compile
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object A {
2+
def `=` = 3
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object B extends dotty.runtime.LegacyApp {
2+
println(A.`=`)
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
incOptions := incOptions.value.withNameHashing(true)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
object A {
2+
def asdf = 3
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import sbt._
2+
import Keys._
3+
4+
object DottyInjectedPlugin extends AutoPlugin {
5+
override def requires = plugins.JvmPlugin
6+
override def trigger = allRequirements
7+
8+
override val projectSettings = Seq(
9+
scalaVersion := "0.1-SNAPSHOT",
10+
scalacOptions += "-language:Scala2",
11+
scalaBinaryVersion := "2.11",
12+
autoScalaLibrary := false,
13+
libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"),
14+
scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1-SNAPSHOT" % "component").sources()
15+
)
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
> compile
2+
3+
# rename def with symbolic name (`=`)
4+
$ copy-file changes/A.scala A.scala
5+
6+
# Both A.scala and B.scala should be recompiled, producing a compile error
7+
-> compile

0 commit comments

Comments
 (0)