aboutsummaryrefslogtreecommitdiff
path: root/test/dotty/tools/dotc/InterfaceEntryPointTest.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-11-01 18:34:29 +0100
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:07 +0100
commit6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f (patch)
treefe7729ddb03a84728687d5a3068f520b0bc1c297 /test/dotty/tools/dotc/InterfaceEntryPointTest.scala
parentb3855424280a821601f126b6b4c6a731b72540ea (diff)
downloaddotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.tar.gz
dotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.tar.bz2
dotty-6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f.zip
Move (most) unit tests to correct locations
Should still perhaps move `test/dotc/tests.scala` and the others in the same directory to a better more cohesive location. Would like to delete the worksheets as well - but maybe they hold sentimental value...
Diffstat (limited to 'test/dotty/tools/dotc/InterfaceEntryPointTest.scala')
-rw-r--r--test/dotty/tools/dotc/InterfaceEntryPointTest.scala72
1 files changed, 72 insertions, 0 deletions
diff --git a/test/dotty/tools/dotc/InterfaceEntryPointTest.scala b/test/dotty/tools/dotc/InterfaceEntryPointTest.scala
new file mode 100644
index 000000000..6624b45dd
--- /dev/null
+++ b/test/dotty/tools/dotc/InterfaceEntryPointTest.scala
@@ -0,0 +1,72 @@
+package dotty.tools.dotc
+
+import org.junit.Test
+import org.junit.Assert._
+import 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").map(p => new java.io.File(p).getPath())
+ val dottyInterfaces =
+ new java.io.File("./interfaces/dotty-interfaces-0.1-SNAPSHOT.jar").getPath
+ val dottyLibrary =
+ new java.io.File("./library/target/scala-2.11/dotty-library_2.11-0.1-SNAPSHOT.jar").getPath
+
+ val args =
+ sources ++
+ List("-d", "./out/") ++
+ List("-classpath", dottyInterfaces + ":" + dottyLibrary)
+
+ 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
+
+ println(diag.message)
+ }
+ }
+
+ 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
+ }
+ }
+}
+