1
1
package dotc
2
2
3
- import org .junit .Test
4
3
import test ._
4
+ import dotty .partest ._
5
+ import org .junit .Test
6
+ import org .junit .experimental .categories ._
5
7
6
- class tests extends CompilerTest {
8
+
9
+ object TestOptions {
10
+ val outputDir = " ./out/"
11
+ val testsDir = " ./tests/"
12
+ val posDir = testsDir + " pos/"
7
13
8
14
val noCheckOptions = List (
9
15
// "-verbose",
@@ -16,8 +22,16 @@ class tests extends CompilerTest {
16
22
implicit val defaultOptions = noCheckOptions ++ List (
17
23
" -Yno-deep-subtypes" , " -Yno-double-bindings" ,
18
24
" -Ycheck:tailrec,resolveSuper,mixin,restoreScopes" ,
19
- " -d" , " ./out/ "
25
+ " -d" , outputDir
20
26
)
27
+ }
28
+
29
+ // Always use this annotation together with a subclass of the test that mixes
30
+ // in PartestVersion (see below). This allows the tests to be run by partest
31
+ // instead of JUnit when using sbt test.
32
+ @ Category (Array (classOf [NonPartestTarget ]))
33
+ class tests extends CompilerTest {
34
+ import TestOptions ._
21
35
22
36
val doEmitBytecode = List (" -Ystop-before:terminal" )
23
37
val failedbyName = List (" -Ystop-before:collectEntryPoints" ) // #288
@@ -30,19 +44,21 @@ class tests extends CompilerTest {
30
44
val allowDeepSubtypes = defaultOptions diff List (" -Yno-deep-subtypes" )
31
45
val allowDoubleBindings = defaultOptions diff List (" -Yno-double-bindings" )
32
46
33
- val posDir = " ./tests/pos/"
34
- val posSpecialDir = " ./tests/pos-special/"
35
- val negDir = " ./tests/neg/"
36
- val newDir = " ./tests/new/"
37
- val dotcDir = " ./src/dotty/"
38
- val picklingDir = " ./tests/pickling"
47
+ val posSpecialDir = testsDir + " pos-special/"
48
+ val negDir = testsDir + " neg/"
49
+ val newDir = testsDir + " new/"
39
50
40
- @ Test def pickle_pickleOK = compileDir(picklingDir, testPickling)
41
- @ Test def pickle_pickling = compileDir(dotcDir + " tools/dotc/core/pickling/" , testPickling)
42
- @ Test def pickle_ast = compileDir(dotcDir + " tools/dotc/ast/" , testPickling)
51
+ val dottyDir = " ./src/dotty/"
52
+ val toolsDir = dottyDir + " tools/"
53
+ val dotcDir = toolsDir + " dotc/"
54
+ val coreDir = dotcDir + " core/"
43
55
44
- // @Test def pickle_core = compileDir(dotcDir + "tools/dotc/core", testPickling, xerrors = 2) // two spurious comparison errors in Types and TypeOps
56
+ @ Test def pickle_pickleOK = compileDir(testsDir, " pickling" , testPickling)
57
+ @ Test def pickle_pickling = compileDir(coreDir, " pickling" , testPickling)
58
+ @ Test def pickle_ast = compileDir(dotcDir, " ast" , testPickling)
45
59
60
+ // @Test def pickle_core = compileDir(dotcDir, "core", testPickling, xerrors = 2) // two spurious comparison errors in Types and TypeOps
61
+
46
62
@ Test def pos_t2168_pat = compileFile(posDir, " t2168" , twice)
47
63
@ Test def pos_erasure = compileFile(posDir, " erasure" , twice)
48
64
@ Test def pos_Coder () = compileFile(posDir, " Coder" , twice)
@@ -66,12 +82,12 @@ class tests extends CompilerTest {
66
82
@ Test def pos_packageobject () = compileFile(posDir, " packageobject" , twice)
67
83
@ Test def pos_overloaded () = compileFile(posDir, " overloaded" , twice)
68
84
@ Test def pos_overrides () = compileFile(posDir, " overrides" , twice)
69
- @ Test def pos_javaOverride () = compileDir(posDir + " java-override" , twice)
85
+ @ Test def pos_javaOverride () = compileDir(posDir, " java-override" , twice)
70
86
@ Test def pos_templateParents () = compileFile(posDir, " templateParents" , twice)
71
87
@ Test def pos_overloadedAccess = compileFile(posDir, " overloadedAccess" , twice)
72
88
@ Test def pos_approximateUnion = compileFile(posDir, " approximateUnion" , twice)
73
- @ Test def pos_tailcall = compileDir(posDir + " tailcall/ " , twice)
74
- @ Test def pos_nullarify = compileFile(posDir, " nullarify" , " -Ycheck:nullarify" :: Nil )
89
+ @ Test def pos_tailcall = compileDir(posDir, " tailcall" , twice)
90
+ @ Test def pos_nullarify = compileFile(posDir, " nullarify" , args = " -Ycheck:nullarify" :: Nil )
75
91
@ Test def pos_subtyping = compileFile(posDir, " subtyping" , twice)
76
92
@ Test def pos_t2613 = compileFile(posSpecialDir, " t2613" )(allowDeepSubtypes)
77
93
@ Test def pos_packageObj = compileFile(posDir, " i0239" , twice)
@@ -92,7 +108,7 @@ class tests extends CompilerTest {
92
108
@ Test def neg_privates () = compileFile(negDir, " privates" , xerrors = 2 )
93
109
@ Test def neg_rootImports = compileFile(negDir, " rootImplicits" , xerrors = 2 )
94
110
@ Test def neg_templateParents () = compileFile(negDir, " templateParents" , xerrors = 3 )
95
- @ Test def neg_autoTupling = compileFile(posDir, " autoTuplingTest" , " -language:noAutoTupling" :: Nil , xerrors = 4 )
111
+ @ Test def neg_autoTupling = compileFile(posDir, " autoTuplingTest" , args = " -language:noAutoTupling" :: Nil , xerrors = 4 )
96
112
@ Test def neg_autoTupling2 = compileFile(negDir, " autoTuplingTest" , xerrors = 4 )
97
113
@ Test def neg_companions = compileFile(negDir, " companions" , xerrors = 1 )
98
114
@ Test def neg_over = compileFile(negDir, " over" , xerrors = 3 )
@@ -102,14 +118,18 @@ class tests extends CompilerTest {
102
118
@ Test def neg_i50_volatile = compileFile(negDir, " i50-volatile" , xerrors = 6 )
103
119
@ Test def neg_t0273_doubledefs = compileFile(negDir, " t0273" , xerrors = 1 )
104
120
@ Test def neg_zoo = compileFile(negDir, " zoo" , xerrors = 12 )
105
- @ Test def neg_t1192_legalPrefix = compileFile(negDir, " t1192" , xerrors = 1 )
106
- @ Test def neg_tailcall_t1672b = compileFile(negDir, " tailcall/t1672b" , xerrors = 6 )
107
- @ Test def neg_tailcall_t3275 = compileFile(negDir, " tailcall/t3275" , xerrors = 1 )
108
- @ Test def neg_tailcall_t6574 = compileFile(negDir, " tailcall/t6574" , xerrors = 2 )
109
- @ Test def neg_tailcall = compileFile(negDir, " tailcall/tailrec" , xerrors = 7 )
110
- @ Test def neg_tailcall2 = compileFile(negDir, " tailcall/tailrec-2" , xerrors = 2 )
111
- @ Test def neg_tailcall3 = compileFile(negDir, " tailcall/tailrec-3" , xerrors = 2 )
112
- @ Test def nef_t1279a = compileFile(negDir, " t1279a" , xerrors = 1 )
121
+ // TODO: this test file doesn't exist (anymore?), remove?
122
+ // @Test def neg_t1192_legalPrefix = compileFile(negDir, "t1192", xerrors = 1)
123
+
124
+ val negTailcallDir = negDir + " tailcall/"
125
+ @ Test def neg_tailcall_t1672b = compileFile(negTailcallDir, " t1672b" , xerrors = 6 )
126
+ @ Test def neg_tailcall_t3275 = compileFile(negTailcallDir, " t3275" , xerrors = 1 )
127
+ @ Test def neg_tailcall_t6574 = compileFile(negTailcallDir, " t6574" , xerrors = 2 )
128
+ @ Test def neg_tailcall = compileFile(negTailcallDir, " tailrec" , xerrors = 7 )
129
+ @ Test def neg_tailcall2 = compileFile(negTailcallDir, " tailrec-2" , xerrors = 2 )
130
+ @ Test def neg_tailcall3 = compileFile(negTailcallDir, " tailrec-3" , xerrors = 2 )
131
+
132
+ @ Test def neg_t1279a = compileFile(negDir, " t1279a" , xerrors = 1 )
113
133
@ Test def neg_t1843_variances = compileFile(negDir, " t1843-variances" , xerrors = 1 )
114
134
@ Test def neg_t2660_ambi = compileFile(negDir, " t2660" , xerrors = 2 )
115
135
@ Test def neg_t2994 = compileFile(negDir, " t2994" , xerrors = 2 )
@@ -127,62 +147,75 @@ class tests extends CompilerTest {
127
147
@ Test def neg_moduleSubtyping = compileFile(negDir, " moduleSubtyping" , xerrors = 4 )
128
148
@ Test def neg_escapingRefs = compileFile(negDir, " escapingRefs" , xerrors = 2 )
129
149
130
- @ Test def dotc = compileDir(dotcDir + " tools/ dotc" , failedOther)(allowDeepSubtypes ++ twice) // see dotc_core
131
- @ Test def dotc_ast = compileDir(dotcDir + " tools/dotc/ ast" , failedOther ++ twice)
150
+ @ Test def dotc = compileDir(toolsDir, " dotc" , failedOther)(allowDeepSubtypes ++ twice) // see dotc_core
151
+ @ Test def dotc_ast = compileDir(dotcDir, " ast" , failedOther ++ twice)
132
152
// similar to dotc_core_pickling but for another anon class. Still during firstTransform
133
- @ Test def dotc_config = compileDir(dotcDir + " tools/dotc/ config" )
134
- @ Test def dotc_core = compileDir(dotcDir + " tools/dotc/ core" , failedOther)(" -Yno-double-bindings" :: allowDeepSubtypes)// twice omitted to make tests run faster
153
+ @ Test def dotc_config = compileDir(dotcDir, " config" )
154
+ @ Test def dotc_core = compileDir(dotcDir, " core" , failedOther)(" -Yno-double-bindings" :: allowDeepSubtypes)// twice omitted to make tests run faster
135
155
// error: error while loading ConstraintHandling$$anon$1$,
136
156
// class file 'target/scala-2.11/dotty_2.11-0.1-SNAPSHOT.jar(dotty/tools/dotc/core/ConstraintHandling$$anon$1.class)'
137
157
// has location not matching its contents: contains class $anon
138
158
139
- @ Test def dotc_core_pickling = compileDir(dotcDir + " tools/dotc/core/ pickling" , failedOther)(allowDeepSubtypes)// twice omitted to make tests run faster
159
+ @ Test def dotc_core_pickling = compileDir(coreDir, " pickling" , failedOther)(allowDeepSubtypes)// twice omitted to make tests run faster
140
160
// exception caught when loading class ClassfileParser$$anon$1: dotty.tools.dotc.core.Denotations$NotDefinedHere:
141
161
// demanding denotation of module class ClassfileParser$$anon$1$ at phase frontend(1) outside defined interval:
142
162
// defined periods are Period(31..36, run = 2) Period(3..24, run = 2) Period(25..26, run = 2)
143
163
// Period(27..28, run = 2) Period(29..29, run = 2) Period(30..30, run = 2)
144
164
// inside FirstTransform at dotty.tools.dotc.transform.FirstTransform.transform(FirstTransform.scala:33)
145
165
// weird.
146
166
147
- @ Test def dotc_transform = compileDir(dotcDir + " tools/dotc/ transform" )// twice omitted to make tests run faster
167
+ @ Test def dotc_transform = compileDir(dotcDir, " transform" )// twice omitted to make tests run faster
148
168
149
- @ Test def dotc_parsing = compileDir(dotcDir + " tools/dotc/ parsing" )// twice omitted to make tests run faster
169
+ @ Test def dotc_parsing = compileDir(dotcDir, " parsing" ) // twice omitted to make tests run faster
150
170
151
- @ Test def dotc_printing = compileDir(dotcDir + " tools/dotc/ printing" ) // twice omitted to make tests run faster
171
+ @ Test def dotc_printing = compileDir(dotcDir, " printing" ) // twice omitted to make tests run faster
152
172
153
- @ Test def dotc_reporting = compileDir(dotcDir + " tools/dotc/ reporting" ) // twice omitted to make tests run faster
173
+ @ Test def dotc_reporting = compileDir(dotcDir, " reporting" ) // twice omitted to make tests run faster
154
174
155
- @ Test def dotc_typer = compileDir(dotcDir + " tools/dotc/ typer" , failedOther) // twice omitted to make tests run faster
175
+ @ Test def dotc_typer = compileDir(dotcDir, " typer" , failedOther)// twice omitted to make tests run faster
156
176
// error: error while loading Checking$$anon$2$,
157
177
// class file 'target/scala-2.11/dotty_2.11-0.1-SNAPSHOT.jar(dotty/tools/dotc/typer/Checking$$anon$2.class)'
158
178
// has location not matching its contents: contains class $anon
159
179
160
- @ Test def dotc_util = compileDir(dotcDir + " tools/dotc/ util" , failedOther ++ twice)
180
+ @ Test def dotc_util = compileDir(dotcDir, " util" , failedOther ++ twice)
161
181
// java.lang.ClassCastException: dotty.tools.dotc.core.Types$NoType$ cannot be cast to dotty.tools.dotc.core.Types$ClassInfo
162
182
// at dotty.tools.dotc.core.SymDenotations$ClassDenotation.classInfo(SymDenotations.scala:1026)
163
183
// at dotty.tools.dotc.transform.ExtensionMethods.transform(ExtensionMethods.scala:38)
164
184
165
- @ Test def tools_io = compileDir(dotcDir + " tools/ io" , failedOther ++ twice) // inner class has symbol <none>
185
+ @ Test def tools_io = compileDir(toolsDir, " io" , failedOther ++ twice) // inner class has symbol <none>
166
186
167
187
@ Test def helloWorld = compileFile(posDir, " HelloWorld" , twice)
168
188
@ Test def labels = compileFile(posDir, " Labels" , twice)
169
- // @Test def tools = compileDir(dotcDir + "tools", "-deep" :: Nil)(allowDeepSubtypes)
189
+ // @Test def tools = compileDir(dottyDir, "tools", "-deep" :: Nil)(allowDeepSubtypes)
170
190
171
- @ Test def testNonCyclic = compileArgs(Array (
172
- dotcDir + " tools/dotc/CompilationUnit.scala" ,
173
- dotcDir + " tools/dotc/core/Types.scala" ,
174
- dotcDir + " tools/dotc/ast/Trees.scala" ,
175
- " -Xprompt"
176
- ) ++ staleSymbolError ++ twice)
191
+ @ Test def testNonCyclic = compileList(" testNonCyclic" , List (
192
+ dotcDir + " CompilationUnit.scala" ,
193
+ coreDir + " Types.scala" ,
194
+ dotcDir + " ast/Trees.scala"
195
+ ), List (" -Xprompt" ) ++ staleSymbolError ++ twice)
177
196
178
- @ Test def testIssue_34 = compileArgs(Array (
179
- dotcDir + " tools/dotc/config/Properties.scala" ,
180
- dotcDir + " tools/dotc/config/PathResolver.scala" ,
181
- // "-Ylog:frontend",
182
- " -Xprompt" ) ++ staleSymbolError ++ twice)
197
+ @ Test def testIssue_34 = compileList(" testIssue_34" , List (
198
+ dotcDir + " config/Properties.scala" ,
199
+ dotcDir + " config/PathResolver.scala"
200
+ ), List (/* "-Ylog:frontend", */ " -Xprompt" ) ++ staleSymbolError ++ twice)
183
201
184
202
val javaDir = " ./tests/pos/java-interop/"
185
203
@ Test def java_all = compileFiles(javaDir, twice)
186
204
187
- // @Test def dotc_compilercommand = compileFile(dotcDir + "tools/dotc/config/", "CompilerCommand")
205
+ // @Test def dotc_compilercommand = compileFile(dotcDir + "config/", "CompilerCommand")
206
+ }
207
+
208
+
209
+ // Always mix in the PartestVersion trait when the superclass is annotated as
210
+ // above. Both together allow the tests to be run by partest instead of JUnit
211
+ // when using sbt test.
212
+ @ Category (Array (classOf [PartestTarget ]))
213
+ class testsPartest extends tests with DPCompilerTest {
214
+ // redirect class file output to partest-generated/kind/testname-kind.obj/
215
+ override val defaultOutputDir = TestOptions .outputDir
216
+ }
217
+
218
+ object testsNotPartestable extends CompilerTest {
219
+ import TestOptions ._
220
+ // Add tests here that should always be run by JUnit, not partest
188
221
}
0 commit comments