1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package dotty
package tools
package dotc
import org.junit.Test
import org.junit.Assert._
import interfaces.{CompilerCallback, SourceFile}
import reporting._
import reporting.diagnostic.MessageContainer
import core.Contexts._
import java.io.File
import scala.collection.mutable.ListBuffer
/** Test the compiler entry points that depend on dotty
*
* This file also serve as an example for using [[dotty.tools.dotc.Driver#process]].
*
* @see [[InterfaceEntryPointTest]]
*/
class EntryPointsTest {
private val sources =
List("../tests/pos/HelloWorld.scala").map(p => new java.io.File(p).getPath())
private val args = sources ++ List("-d", "../out/", "-usejavacp")
@Test def runCompiler = {
val reporter = new CustomReporter
val callback = new CustomCompilerCallback
Main.process(args.toArray, reporter, callback)
assertEquals("Number of errors", false, reporter.hasErrors)
assertEquals("Number of warnings", false, reporter.hasWarnings)
assertEquals("Compiled sources", sources, callback.paths)
}
@Test def runCompilerWithContext = {
val reporter = new CustomReporter
val callback = new CustomCompilerCallback
val context = (new ContextBase).initialCtx.fresh
.setReporter(reporter)
.setCompilerCallback(callback)
Main.process(args.toArray, context)
assertEquals("Number of errors", false, reporter.hasErrors)
assertEquals("Number of warnings", false, reporter.hasWarnings)
assertEquals("Compiled sources", sources, callback.paths)
}
private class CustomReporter extends Reporter
with UniqueMessagePositions
with HideNonSensicalMessages {
def doReport(m: MessageContainer)(implicit ctx: Context): Unit = {
}
}
private class CustomCompilerCallback extends CompilerCallback {
private val pathsBuffer = new ListBuffer[String]
def paths = pathsBuffer.toList
override def onSourceCompiled(source: SourceFile): Unit = {
if (source.jfile.isPresent)
pathsBuffer += source.jfile.get.getPath
}
}
}
|