Skip to content

Commit 970bafa

Browse files
committed
Adapt the tests to the use of -Yscala2-unpickler
The tests that import things defined in the dotty-compiler jar should only be run with a bootstrapped compiler.
1 parent cb54dbb commit 970bafa

35 files changed

+145
-87
lines changed

compiler/test/dotty/TestCategories.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,6 @@ trait SlowTests
55

66
/** Meta tests category for JUnit */
77
trait VulpixMetaTests
8+
9+
/** Tests that should only be run with a bootstrapped compiler */
10+
trait BootstrappedOnlyTests
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package dotty
2+
package tools
3+
package dotc
4+
5+
import org.junit.{ Test, BeforeClass, AfterClass }
6+
import org.junit.Assert._
7+
import org.junit.Assume._
8+
import org.junit.experimental.categories.Category
9+
10+
import java.nio.file._
11+
import java.util.stream.{ Stream => JStream }
12+
import scala.collection.JavaConverters._
13+
import scala.util.matching.Regex
14+
import scala.concurrent.duration._
15+
import vulpix._
16+
import dotty.tools.io.JFile
17+
18+
@Category(Array(classOf[BootstrappedOnlyTests]))
19+
class BootstrappedOnlyCompilationTests extends ParallelTesting {
20+
import ParallelTesting._
21+
import TestConfiguration._
22+
import CompilationTests._
23+
24+
// Test suite configuration --------------------------------------------------
25+
26+
def maxDuration = 30.seconds
27+
def numberOfSlaves = 5
28+
def safeMode = Properties.testsSafeMode
29+
def isInteractive = SummaryReport.isInteractive
30+
def testFilter = Properties.testsFilter
31+
32+
// Positive tests ------------------------------------------------------------
33+
34+
@Test def posWithCompiler: Unit = {
35+
implicit val testGroup: TestGroup = TestGroup("compilePosWithCompiler")
36+
compileFilesInDir("tests/pos-with-compiler", defaultOptions) +
37+
compileDir("compiler/src/dotty/tools/dotc/ast", defaultOptions) +
38+
compileDir("compiler/src/dotty/tools/dotc/config", defaultOptions) +
39+
compileDir("compiler/src/dotty/tools/dotc/core", defaultOptions) +
40+
compileDir("compiler/src/dotty/tools/dotc/transform", defaultOptions) +
41+
compileDir("compiler/src/dotty/tools/dotc/parsing", defaultOptions) +
42+
compileDir("compiler/src/dotty/tools/dotc/printing", defaultOptions) +
43+
compileDir("compiler/src/dotty/tools/dotc/reporting", defaultOptions) +
44+
compileDir("compiler/src/dotty/tools/dotc/typer", defaultOptions) +
45+
compileDir("compiler/src/dotty/tools/dotc/util", defaultOptions) +
46+
compileDir("compiler/src/dotty/tools/io", defaultOptions) +
47+
compileDir("compiler/src/dotty/tools/dotc/core", TestFlags(classPath, noCheckOptions))
48+
}
49+
50+
@Test def posTwiceWithCompiler: Unit = {
51+
implicit val testGroup: TestGroup = TestGroup("posTwiceWithCompiler")
52+
compileFile("tests/pos-with-compiler/Labels.scala", defaultOptions) +
53+
compileFile("tests/pos-with-compiler/Patterns.scala", defaultOptions) +
54+
compileList(
55+
"testNonCyclic",
56+
List(
57+
"compiler/src/dotty/tools/dotc/CompilationUnit.scala",
58+
"compiler/src/dotty/tools/dotc/core/Types.scala",
59+
"compiler/src/dotty/tools/dotc/ast/Trees.scala"
60+
),
61+
defaultOptions.and("-Xprompt")
62+
) +
63+
compileList(
64+
"testIssue34",
65+
List(
66+
"compiler/src/dotty/tools/dotc/config/Properties.scala",
67+
"compiler/src/dotty/tools/dotc/config/PathResolver.scala"
68+
),
69+
defaultOptions.and("-Xprompt")
70+
)
71+
}.times(2).checkCompile()
72+
73+
// Negative tests ------------------------------------------------------------
74+
75+
@Test def negAll: Unit = {
76+
implicit val testGroup: TestGroup = TestGroup("compileNegWithCompiler")
77+
compileFilesInDir("tests/neg-with-compiler", defaultOptions)
78+
}.checkExpectedErrors()
79+
80+
// Run tests -----------------------------------------------------------------
81+
82+
@Test def runWithCompiler: Unit = {
83+
implicit val testGroup: TestGroup = TestGroup("runWithCompiler")
84+
compileFilesInDir("tests/run-with-compiler", defaultRunWithCompilerOptions) +
85+
compileFile("tests/run-with-compiler-custom-args/staged-streams_1.scala", defaultRunWithCompilerOptions without "-Yno-deep-subtypes")
86+
}.checkRuns()
87+
88+
// Pickling Tests ------------------------------------------------------------
89+
//
90+
// Pickling tests are very memory intensive and as such need to be run with a
91+
// lower level of concurrency as to not kill their running VMs
92+
93+
@Test def picklingWithCompiler: Unit = {
94+
implicit val testGroup: TestGroup = TestGroup("testPicklingWithCompiler")
95+
compileDir("compiler/src/dotty/tools", picklingOptions, recursive = false) +
96+
compileDir("compiler/src/dotty/tools/dotc", picklingOptions, recursive = false) +
97+
compileDir("library/src/dotty/runtime", picklingOptions) +
98+
compileDir("compiler/src/dotty/tools/backend/jvm", picklingOptions) +
99+
compileDir("compiler/src/dotty/tools/dotc/ast", picklingOptions) +
100+
compileDir("compiler/src/dotty/tools/dotc/core", picklingOptions, recursive = false) +
101+
compileDir("compiler/src/dotty/tools/dotc/config", picklingOptions) +
102+
compileDir("compiler/src/dotty/tools/dotc/parsing", picklingOptions) +
103+
compileDir("compiler/src/dotty/tools/dotc/printing", picklingOptions) +
104+
compileDir("compiler/src/dotty/tools/repl", picklingOptions) +
105+
compileDir("compiler/src/dotty/tools/dotc/rewrite", picklingOptions) +
106+
compileDir("compiler/src/dotty/tools/dotc/transform", picklingOptions) +
107+
compileDir("compiler/src/dotty/tools/dotc/typer", picklingOptions) +
108+
compileDir("compiler/src/dotty/tools/dotc/util", picklingOptions) +
109+
compileDir("compiler/src/dotty/tools/io", picklingOptions) +
110+
compileFile("tests/pos/pickleinf.scala", picklingOptions) +
111+
compileDir("compiler/src/dotty/tools/dotc/core/classfile", picklingOptions) +
112+
compileDir("compiler/src/dotty/tools/dotc/core/tasty", picklingOptions) +
113+
compileDir("compiler/src/dotty/tools/dotc/core/unpickleScala2", picklingOptions)
114+
}.limitThreads(4).checkCompile()
115+
}

compiler/test/dotty/tools/dotc/CompilationTests.scala

Lines changed: 7 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,9 @@ class CompilationTests extends ParallelTesting {
3737
compileList("compileStdLib", StdLibSources.whitelisted, scala2Mode.and("-migration", "-Yno-inline", "-Ydetailed-stats"))
3838
}.checkCompile()
3939

40-
@Test def compilePos: Unit = {
40+
@Test def pos: Unit = {
4141
implicit val testGroup: TestGroup = TestGroup("compilePos")
4242
compileList("compileStdLib", StdLibSources.whitelisted, scala2Mode.and("-migration", "-Yno-inline")) +
43-
compileDir("compiler/src/dotty/tools/dotc/ast", defaultOptions) +
44-
compileDir("compiler/src/dotty/tools/dotc/config", defaultOptions) +
45-
compileDir("compiler/src/dotty/tools/dotc/core", defaultOptions) +
46-
compileDir("compiler/src/dotty/tools/dotc/transform", defaultOptions) +
47-
compileDir("compiler/src/dotty/tools/dotc/parsing", defaultOptions) +
48-
compileDir("compiler/src/dotty/tools/dotc/printing", defaultOptions) +
49-
compileDir("compiler/src/dotty/tools/dotc/reporting", defaultOptions) +
50-
compileDir("compiler/src/dotty/tools/dotc/typer", defaultOptions) +
51-
compileDir("compiler/src/dotty/tools/dotc/util", defaultOptions) +
52-
compileDir("compiler/src/dotty/tools/io", defaultOptions) +
53-
compileDir("compiler/src/dotty/tools/dotc/core", TestFlags(classPath, noCheckOptions)) +
5443
compileFile("tests/pos/nullarify.scala", defaultOptions.and("-Ycheck:nullarify")) +
5544
compileFile("tests/pos-scala2/rewrites.scala", scala2Mode.and("-rewrite")).copyToTarget() +
5645
compileFile("tests/pos-special/utf8encoded.scala", explicitUTF8) +
@@ -111,7 +100,6 @@ class CompilationTests extends ParallelTesting {
111100

112101
@Test def posTwice: Unit = {
113102
implicit val testGroup: TestGroup = TestGroup("posTwice")
114-
compileFile("tests/pos/Labels.scala", defaultOptions) +
115103
compileFilesInDir("tests/pos-java-interop", defaultOptions) +
116104
compileFilesInDir("tests/pos-java-interop-separate", defaultOptions) +
117105
compileFile("tests/pos/t2168.scala", defaultOptions) +
@@ -122,7 +110,6 @@ class CompilationTests extends ParallelTesting {
122110
compileFile("tests/pos/functions1.scala", defaultOptions) +
123111
compileFile("tests/pos/implicits1.scala", defaultOptions) +
124112
compileFile("tests/pos/inferred.scala", defaultOptions) +
125-
compileFile("tests/pos/Patterns.scala", defaultOptions) +
126113
compileFile("tests/pos/selftypes.scala", defaultOptions) +
127114
compileFile("tests/pos/varargs.scala", defaultOptions) +
128115
compileFile("tests/pos/vararg-pattern.scala", defaultOptions) +
@@ -147,29 +134,12 @@ class CompilationTests extends ParallelTesting {
147134
compileFile("tests/pos/i0239.scala", defaultOptions) +
148135
compileFile("tests/pos/anonClassSubtyping.scala", defaultOptions) +
149136
compileFile("tests/pos/extmethods.scala", defaultOptions) +
150-
compileFile("tests/pos/companions.scala", defaultOptions) +
151-
compileList(
152-
"testNonCyclic",
153-
List(
154-
"compiler/src/dotty/tools/dotc/CompilationUnit.scala",
155-
"compiler/src/dotty/tools/dotc/core/Types.scala",
156-
"compiler/src/dotty/tools/dotc/ast/Trees.scala"
157-
),
158-
defaultOptions.and("-Xprompt")
159-
) +
160-
compileList(
161-
"testIssue34",
162-
List(
163-
"compiler/src/dotty/tools/dotc/config/Properties.scala",
164-
"compiler/src/dotty/tools/dotc/config/PathResolver.scala"
165-
),
166-
defaultOptions.and("-Xprompt")
167-
)
137+
compileFile("tests/pos/companions.scala", defaultOptions)
168138
}.times(2).checkCompile()
169139

170140
// Negative tests ------------------------------------------------------------
171141

172-
@Test def compileNeg: Unit = {
142+
@Test def negAll: Unit = {
173143
implicit val testGroup: TestGroup = TestGroup("compileNeg")
174144
compileFilesInDir("tests/neg", defaultOptions) +
175145
compileFilesInDir("tests/neg-tailcall", defaultOptions) +
@@ -195,9 +165,7 @@ class CompilationTests extends ParallelTesting {
195165

196166
@Test def runAll: Unit = {
197167
implicit val testGroup: TestGroup = TestGroup("runAll")
198-
compileFilesInDir("tests/run", defaultOptions) +
199-
compileFilesInDir("tests/run-with-compiler", defaultRunWithCompilerOptions) +
200-
compileFile("tests/run-with-compiler-custom-args/staged-streams_1.scala", defaultRunWithCompilerOptions without "-Yno-deep-subtypes")
168+
compileFilesInDir("tests/run", defaultOptions)
201169
}.checkRuns()
202170

203171
// Generic java signatures tests ---------------------------------------------
@@ -208,34 +176,12 @@ class CompilationTests extends ParallelTesting {
208176
}.checkRuns()
209177

210178
// Pickling Tests ------------------------------------------------------------
211-
//
212-
// Pickling tests are very memory intensive and as such need to be run with a
213-
// lower level of concurrency as to not kill their running VMs
214179

215-
@Test def testPickling: Unit = {
180+
@Test def pickling: Unit = {
216181
implicit val testGroup: TestGroup = TestGroup("testPickling")
217-
compileDir("compiler/src/dotty/tools", picklingOptions, recursive = false) +
218-
compileDir("compiler/src/dotty/tools/dotc", picklingOptions, recursive = false) +
219182
compileFilesInDir("tests/new", picklingOptions) +
220-
compileFilesInDir("tests/pickling", picklingOptions) +
221-
compileDir("library/src/dotty/runtime", picklingOptions) +
222-
compileDir("compiler/src/dotty/tools/backend/jvm", picklingOptions) +
223-
compileDir("compiler/src/dotty/tools/dotc/ast", picklingOptions) +
224-
compileDir("compiler/src/dotty/tools/dotc/core", picklingOptions, recursive = false) +
225-
compileDir("compiler/src/dotty/tools/dotc/config", picklingOptions) +
226-
compileDir("compiler/src/dotty/tools/dotc/parsing", picklingOptions) +
227-
compileDir("compiler/src/dotty/tools/dotc/printing", picklingOptions) +
228-
compileDir("compiler/src/dotty/tools/repl", picklingOptions) +
229-
compileDir("compiler/src/dotty/tools/dotc/rewrite", picklingOptions) +
230-
compileDir("compiler/src/dotty/tools/dotc/transform", picklingOptions) +
231-
compileDir("compiler/src/dotty/tools/dotc/typer", picklingOptions) +
232-
compileDir("compiler/src/dotty/tools/dotc/util", picklingOptions) +
233-
compileDir("compiler/src/dotty/tools/io", picklingOptions) +
234-
compileFile("tests/pos/pickleinf.scala", picklingOptions) +
235-
compileDir("compiler/src/dotty/tools/dotc/core/classfile", picklingOptions) +
236-
compileDir("compiler/src/dotty/tools/dotc/core/tasty", picklingOptions) +
237-
compileDir("compiler/src/dotty/tools/dotc/core/unpickleScala2", picklingOptions)
238-
}.limitThreads(4).checkCompile()
183+
compileFilesInDir("tests/pickling", picklingOptions)
184+
}.checkCompile()
239185

240186
/** The purpose of this test is two-fold, being able to compile dotty
241187
* bootstrapped, and making sure that TASTY can link against a compiled

project/Build.scala

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,8 @@ object Build {
530530
},
531531

532532
testOptions in Test += Tests.Argument(
533-
TestFrameworks.JUnit, "--run-listener=dotty.tools.ContextEscapeDetector"
533+
TestFrameworks.JUnit,
534+
"--run-listener=dotty.tools.ContextEscapeDetector",
534535
),
535536

536537
// Spawn new JVM in run and test
@@ -606,6 +607,9 @@ object Build {
606607
} else if (scalaLib == "") {
607608
println("Couldn't find scala-library on classpath, please run using script in bin dir instead")
608609
} else if (args.contains("-with-compiler")) {
610+
if (!isDotty.value) {
611+
throw new MessageOnlyException("-with-compiler can only be used with a bootstrapped compiler")
612+
}
609613
val args1 = args.filter(_ != "-with-compiler")
610614
val asm = findLib(attList, "scala-asm")
611615
val dottyCompiler = jars("dotty-compiler")
@@ -671,7 +675,12 @@ object Build {
671675

672676
var extraClasspath = dottyLib
673677
if ((decompile || printTasty) && !args.contains("-classpath")) extraClasspath += ":."
674-
if (args0.contains("-with-compiler")) extraClasspath += s":$dottyCompiler"
678+
if (args0.contains("-with-compiler")) {
679+
if (!isDotty.value) {
680+
throw new MessageOnlyException("-with-compiler can only be used with a bootstrapped compiler")
681+
}
682+
extraClasspath += s":$dottyCompiler"
683+
}
675684

676685
val fullArgs = main :: insertClasspathInArgs(args, extraClasspath)
677686

@@ -699,7 +708,12 @@ object Build {
699708
"dotty-library" -> packageBin.in(`dotty-library-bootstrapped`, Compile).value
700709
).mapValues(_.getAbsolutePath)
701710
}
702-
}.value
711+
}.value,
712+
713+
testOptions in Test += Tests.Argument(
714+
TestFrameworks.JUnit,
715+
"--exclude-categories=dotty.BootstrappedOnlyTests",
716+
),
703717
)
704718

705719
lazy val bootstrapedDottyCompilerSettings = commonDottyCompilerSettings ++ Seq(

project/scripts/cmdTests

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ SBT="./project/scripts/sbt" # if run on CI
88
SOURCE="tests/pos/HelloWorld.scala"
99
MAIN="HelloWorld"
1010
EXPECTED_OUTPUT="hello world"
11-
COMPILER_CP="compiler/target/scala-2.12/classes" # FIXME: This is not very reliable
1211

1312
# check that benchmarks can run
1413
"$SBT" "dotty-bench/jmh:run 1 1 tests/pos/alias.scala"
@@ -51,7 +50,7 @@ clear_out "$OUT"
5150
grep -qe "def main(args: scala.Array\[scala.Predef.String\]): scala.Unit =" "$tmp"
5251

5352
echo "testing scala.quoted.Expr.run from sbt dotr"
54-
"$SBT" ";dotty-compiler/compile ;dotc -classpath $COMPILER_CP tests/run-with-compiler/quote-run.scala; dotr -with-compiler Test" > "$tmp"
53+
"$SBT" ";dotty-compiler-bootstrapped/dotc -with-compiler tests/run-with-compiler/quote-run.scala; dotty-compiler-bootstrapped/dotr -with-compiler Test" > "$tmp"
5554
grep -qe "val a: scala.Int = 3" "$tmp"
5655

5756

File renamed without changes.

0 commit comments

Comments
 (0)