aboutsummaryrefslogblamecommitdiff
path: root/test/test/OtherEntryPointsTest.scala
blob: ae46fa36f931c961c9d62562a41160e13856ff3b (plain) (tree)
1
2
3
4
5
6
7
8






                                                                 
                                                             










                                                                                     









                                                                                               
 
                           










                                                                   















                                                                   
                                                                      












                                                                 
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.reporting.diagnostic.MessageContainer
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 {
  private val sources =
    List("./tests/pos/HelloWorld.scala").map(p => new java.io.File(p).getPath())
  private val dottyInterfaces =
    new java.io.File("./interfaces/dotty-interfaces-0.1-SNAPSHOT.jar").getPath
  private val dottyLibrary =
    new java.io.File("./library/target/scala-2.11/dotty-library_2.11-0.1-SNAPSHOT.jar").getPath
  private val args =
    sources ++
    List("-d", "./out/") ++
    List("-classpath", dottyInterfaces + ":" + dottyLibrary)

  @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
    }
  }
}