From ec7074a340f2e00ce5f1f64a44a429d9f96133d2 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Tue, 18 Aug 2009 10:25:43 -0400 Subject: [PATCH] More plugin tests --- compile/interface/Analyzer.scala | 1 + .../interface/src/test/scala/CheckBasic.scala | 45 ++++++++++++++++--- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/compile/interface/Analyzer.scala b/compile/interface/Analyzer.scala index 666656648..bd45d7721 100644 --- a/compile/interface/Analyzer.scala +++ b/compile/interface/Analyzer.scala @@ -61,6 +61,7 @@ class Analyzer(val global: Global) extends Plugin catch { case fe: scala.tools.nsc.FatalError => callback.superclassNotFound(name.toString); None } } val superclasses = superclassesAll.filter(_.isDefined).map(_.get) + //println("Superclass names: " + superclassNames.mkString(", ") + "\n\tall: " + superclasses.mkString(", ")) for(unit <- currentRun.units) { diff --git a/compile/interface/src/test/scala/CheckBasic.scala b/compile/interface/src/test/scala/CheckBasic.scala index 066e91403..7af655d13 100644 --- a/compile/interface/src/test/scala/CheckBasic.scala +++ b/compile/interface/src/test/scala/CheckBasic.scala @@ -5,17 +5,34 @@ import org.specs.Specification object CheckBasic extends Specification { + val basicName = new File("Basic.scala") + val basicSource = "package org.example { object Basic }" + + val mainName = new File("Main.scala") + val mainSource = "object Main { def main(args: Array[String]) {} }" + + val super1Name = new File("a/Super.scala") + val super2Name = new File("a/Super2.scala") + val midName = new File("b/Middle.scala") + val sub1Name = new File("b/SubA.scala") + val sub2Name = new File("b/SubB.scala") + val sub3Name = new File("SubC.scala") + val super1Source = "package a; trait Super" + val super2Source = "class Super2" + val midSource = "package y.w; trait Mid extends a.Super" + val subSource1 = "package a; trait Sub1 extends y.w.Mid" + val subSource2 = "trait Sub2 extends a.Super" + val subSource3 = "private class F extends a.Super; package c { object Sub3 extends Super2 }" + "Compiling basic file should succeed" in { - val name = new File("Basic.scala") - WithFiles( name -> "package org.example { object Basic }" ){ files => + WithFiles(basicName -> basicSource){ files => TestCompile(files){ loader => Class.forName("org.example.Basic", false, loader) } } } "Analysis plugin" should { "send source begin and end" in { - val name = new File("Basic.scala") - WithFiles(name -> "object Basic" ) { files => + WithFiles(basicName -> basicSource) { files => CallbackTest(files) { callback => (callback.beganSources) must haveTheSameElementsAs(files) (callback.endedSources) must haveTheSameElementsAs(files) @@ -24,13 +41,27 @@ object CheckBasic extends Specification } "detect applications" in { - val name = new File("Main.scala") - WithFiles(name -> "object Main { def main(args: Array[String]) {} }" ) { files => + WithFiles(mainName -> mainSource ) { files => CallbackTest(files) { callback => - println(callback.applications) (callback.applications) must haveTheSameElementsAs(files.map(file => (file, "Main"))) } } } + + "detect subclasses" in { + WithFiles(super1Name -> super1Source, midName -> midSource, sub1Name -> subSource1, sub2Name -> subSource2, + super2Name -> super2Source, sub3Name -> subSource3) + { + case files @ Seq(supFile, midFile, sub1File, sub2File, sup2File, sub3File) => + CallbackTest(files,Seq( "a.Super", "Super2", "x.Super3")) { (callback, ignore, ignore2) => + val expected = (sub1File, "a.Super", "a.Sub1", false) :: (sub2File, "a.Super", "a.Sub2", false) :: + (sub3File, "Super2", "Sub3", true) :: Nil + //println(callback.foundSubclasses) + //println(callback.invalidSuperclasses) + (callback.foundSubclasses) must haveTheSameElementsAs(expected) + (callback.invalidSuperclasses) must haveTheSameElementsAs(Seq("x.Super3")) + } + } + } } } \ No newline at end of file