From 8a61ff432543a29234193cd1f7c14abd3f3d31a0 Mon Sep 17 00:00:00 2001 From: Felix Mulder Date: Wed, 2 Nov 2016 11:08:28 +0100 Subject: Move compiler and compiler tests to compiler dir --- .../dotty/tools/dotc/InterfaceEntryPointTest.scala | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 compiler/test/dotty/tools/dotc/InterfaceEntryPointTest.scala (limited to 'compiler/test/dotty/tools/dotc/InterfaceEntryPointTest.scala') diff --git a/compiler/test/dotty/tools/dotc/InterfaceEntryPointTest.scala b/compiler/test/dotty/tools/dotc/InterfaceEntryPointTest.scala new file mode 100644 index 000000000..b36ea2955 --- /dev/null +++ b/compiler/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 + } + } +} + -- cgit v1.2.3