aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/dotc/tests.scala2
-rw-r--r--test/test/InterfaceEntryPointTest.scala61
-rw-r--r--test/test/OtherEntryPointsTest.scala66
3 files changed, 128 insertions, 1 deletions
diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala
index f60674ede..0bb27ab14 100644
--- a/test/dotc/tests.scala
+++ b/test/dotc/tests.scala
@@ -188,7 +188,7 @@ class tests extends CompilerTest {
@Test def neg_validateRefchecks = compileFile(negDir, "validate-refchecks", xerrors = 2)
@Test def neg_skolemize = compileFile(negDir, "skolemize", xerrors = 2)
@Test def neg_nested_bounds = compileFile(negDir, "nested_bounds", xerrors = 1)
- @Test def neg_valueClasses = compileFile(negDir, "valueClasses", xerrors = 4)
+ @Test def neg_valueClasses = compileFile(negDir, "valueClasses", xerrors = 2)
@Test def run_all = runFiles(runDir)
diff --git a/test/test/InterfaceEntryPointTest.scala b/test/test/InterfaceEntryPointTest.scala
new file mode 100644
index 000000000..b193b5f64
--- /dev/null
+++ b/test/test/InterfaceEntryPointTest.scala
@@ -0,0 +1,61 @@
+package test
+
+import org.junit.Test
+import org.junit.Assert._
+import dotty.tools.dotc.interfaces._
+import scala.collection.mutable.ListBuffer
+
+/** Test that demonstrates how to use dotty-interfaces
+ *
+ * This test requires:
+ * - dotty-interfaces to be present at compile-time
+ * - dotty-interfaces and dotty to be present at run-time
+ *
+ * Since the ABI of dotty-interfaces is stable, this means that users can write
+ * code that works with multiple versions of dotty without recompilation.
+ *
+ * @see [[OtherEntryPointsTest]]
+ */
+class InterfaceEntryPointTest {
+ @Test def runCompilerFromInterface = {
+ val sources = List("./tests/pos/HelloWorld.scala")
+ val args = sources ++ List("-d", "./out/")
+
+ val mainClass = Class.forName("dotty.tools.dotc.Main")
+ val process = mainClass.getMethod("process",
+ classOf[Array[String]], classOf[SimpleReporter], classOf[CompilerCallback])
+
+ val reporter = new CustomSimpleReporter
+ val callback = new CustomCompilerCallback
+
+ // Run the compiler by calling dotty.tools.dotc.Main.process
+ process.invoke(null, args.toArray, reporter, callback)
+
+ assertEquals("Number of errors", 0, reporter.errorCount)
+ assertEquals("Number of warnings", 0, reporter.warningCount)
+ assertEquals("Compiled sources", sources, callback.paths)
+ }
+
+ private class CustomSimpleReporter extends SimpleReporter {
+ var errorCount = 0
+ var warningCount = 0
+
+ def report(diag: Diagnostic): Unit = {
+ if (diag.level == Diagnostic.ERROR)
+ errorCount += 1
+ if (diag.level == Diagnostic.WARNING)
+ warningCount += 1
+ }
+ }
+
+ 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
+ }
+ }
+}
+
diff --git a/test/test/OtherEntryPointsTest.scala b/test/test/OtherEntryPointsTest.scala
new file mode 100644
index 000000000..0186b357b
--- /dev/null
+++ b/test/test/OtherEntryPointsTest.scala
@@ -0,0 +1,66 @@
+package test
+
+import org.junit.Test
+import org.junit.Assert._
+import dotty.tools.dotc.Main
+import dotty.tools.dotc.interfaces.{CompilerCallback, SourceFile}
+import dotty.tools.dotc.reporting._
+import dotty.tools.dotc.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 OtherEntryPointsTest {
+ @Test def runCompiler = {
+ val sources = List("./tests/pos/HelloWorld.scala")
+ val args = sources ++ List("-d", "./out/")
+
+ 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 sources = List("./tests/pos/HelloWorld.scala")
+ val args = sources ++ List("-d", "./out/")
+
+ 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(d: Diagnostic)(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
+ }
+ }
+}