aboutsummaryrefslogtreecommitdiff
path: root/test/test/OtherEntryPointsTest.scala
blob: ae46fa36f931c961c9d62562a41160e13856ff3b (plain) (blame)
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
67
68
69
70
71
72
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
    }
  }
}