aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarkDimius <darkdimius@gmail.com>2014-03-02 12:38:55 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-03-02 13:12:09 +0100
commit92a4fefe58cfe4c1bcccc8f98183079a553d477a (patch)
tree76df2064eea6a6407c6ba2d04ea547aee6be3da2
parent0ebdbde3d51f92647f3b1cd452d60648ed8e7a39 (diff)
parent301d0c8a79d56d18fe0ae9c09f350d4364d4baf1 (diff)
downloaddotty-92a4fefe58cfe4c1bcccc8f98183079a553d477a.tar.gz
dotty-92a4fefe58cfe4c1bcccc8f98183079a553d477a.tar.bz2
dotty-92a4fefe58cfe4c1bcccc8f98183079a553d477a.zip
Merge pull request #31 from DarkDimius/tests
Infrastructure for per-phase tests, with inline source as a string.
-rw-r--r--src/dotty/tools/dotc/Compiler.scala3
-rw-r--r--src/dotty/tools/dotc/Run.scala10
-rw-r--r--test/test/DottyTest.scala25
-rw-r--r--test/test/SamplePhaseTest.scala15
4 files changed, 52 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/Compiler.scala b/src/dotty/tools/dotc/Compiler.scala
index e48fed93b..9844557f5 100644
--- a/src/dotty/tools/dotc/Compiler.scala
+++ b/src/dotty/tools/dotc/Compiler.scala
@@ -7,10 +7,11 @@ import Periods._
import Symbols._
import typer.{FrontEnd, Typer, Mode, ImportInfo}
import reporting.ConsoleReporter
+import dotty.tools.dotc.core.Phases.Phase
class Compiler {
- def phases = List(new FrontEnd)
+ def phases: List[Phase] = List(new FrontEnd)
var runId = 1
def nextRunId = { runId += 1; runId }
diff --git a/src/dotty/tools/dotc/Run.scala b/src/dotty/tools/dotc/Run.scala
index 928bf753a..cc9b8db3a 100644
--- a/src/dotty/tools/dotc/Run.scala
+++ b/src/dotty/tools/dotc/Run.scala
@@ -6,6 +6,7 @@ import Contexts._, Periods._, Symbols._
import io.PlainFile
import util.{SourceFile, NoSource, Stats, SimpleMap}
import reporting.Reporter
+import java.io.FileWriter
class Run(comp: Compiler)(implicit ctx: Context) {
@@ -29,6 +30,15 @@ class Run(comp: Compiler)(implicit ctx: Context) {
}
}
+ def compile(sourceCode: String): Unit = {
+ val tmpFile = java.io.File.createTempFile("dotty-source-tmp", ".scala")
+ tmpFile.createNewFile()
+ val writer = new FileWriter(tmpFile)
+ writer.write(sourceCode)
+ writer.close()
+ compile(List(tmpFile.getAbsolutePath))
+ }
+
/** Print summary; return # of errors encountered */
def printSummary(): Reporter = {
ctx.runInfo.printMaxConstraint()
diff --git a/test/test/DottyTest.scala b/test/test/DottyTest.scala
index f2d3ef92e..07b29a5f0 100644
--- a/test/test/DottyTest.scala
+++ b/test/test/DottyTest.scala
@@ -8,6 +8,11 @@ import Types._, Symbols._, Decorators._
import dotty.tools.dotc.printing.Texts._
import dotty.tools.dotc.reporting.ConsoleReporter
import dotty.tools.dotc.core.Decorators._
+import dotty.tools.dotc.ast.tpd
+import dotty.tools.dotc.Compiler
+
+import dotty.tools.dotc
+import dotty.tools.dotc.core.Phases.Phase
class DottyTest {
@@ -33,6 +38,26 @@ class DottyTest {
ctx
}
+ def checkCompile(checkAfterPhase: String, source:String)(assertion:tpd.Tree =>Unit): Unit = {
+ val c = new Compiler {
+ override def phases = {
+ val allPhases = super.phases
+ val targetPhase = allPhases.find{p=> p.name == checkAfterPhase}
+ assert(targetPhase isDefined)
+ val phasesBefore = allPhases.takeWhile(x=> ! (x eq targetPhase.get))
+
+ val checker = new Phase{
+ def name = "assertionChecker"
+ override def run(implicit ctx: Context): Unit = assertion(ctx.compilationUnit.tpdTree)
+ }
+ phasesBefore:::List(targetPhase.get, checker)
+ }
+ }
+ c.rootContext(ctx)
+ val run = c.newRun
+ run.compile(source)
+ }
+
def methType(names: String*)(paramTypes: Type*)(resultType: Type = defn.UnitType) =
MethodType(names.toList map (_.toTermName), paramTypes.toList, resultType)
}
diff --git a/test/test/SamplePhaseTest.scala b/test/test/SamplePhaseTest.scala
new file mode 100644
index 000000000..e86f4459b
--- /dev/null
+++ b/test/test/SamplePhaseTest.scala
@@ -0,0 +1,15 @@
+package test
+
+import org.junit.{Assert, Test}
+
+class SamplePhaseTest extends DottyTest {
+
+ @Test
+ def testTypechekingSimpleClass = checkCompile("frontend", "class A{}") {
+ tree =>
+ Assert.assertTrue("can typecheck simple class",
+ tree.toString == "PackageDef(Ident(<empty>),List(TypeDef(Modifiers(,,List()),A,Template(DefDef(Modifiers(,,List()),<init>,List(),List(List()),TypeTree[TypeRef(ThisType(module class scala),Unit)],EmptyTree),List(Apply(Select(New(TypeTree[TypeRef(ThisType(module class lang),Object)]),<init>),List())),ValDef(Modifiers(private,,List()),_,EmptyTree,EmptyTree),List()))))"
+ )
+ }
+
+}