diff options
Diffstat (limited to 'scalaParser/src/test/scala/scalaParser/SyntaxTest.scala')
-rw-r--r-- | scalaParser/src/test/scala/scalaParser/SyntaxTest.scala | 1226 |
1 files changed, 390 insertions, 836 deletions
diff --git a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala index a1e4fe4..fe5fc2c 100644 --- a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala +++ b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala @@ -8,13 +8,6 @@ import utest.util.Tree import scala.util.{Failure, Success} object SyntaxTest extends TestSuite{ - def checkNeg[T](input: String) = { - println("Checking...") - new ScalaSyntax(input).CompilationUnit.run() match{ - case Failure(f: ParseError) => () // yay - case Success(parsed) => assert(parsed.length != input.length) - } - } def check[T](input: String) = { println("Checking...") new ScalaSyntax(input).CompilationUnit.run() match{ @@ -24,820 +17,401 @@ object SyntaxTest extends TestSuite{ println(f.formatTraces) throw new Exception(f.position + "\t" + f.formatTraces) case Success(parsed) => - if(parsed != input) - - throw new Exception( - "Parsing Failed at " + parsed.length + "\n" + input.drop(parsed.length).take(50) - ) + assert(parsed == input) } } println("running") def tests = TestSuite{ 'unit { - 'pos { - * - check( - "package torimatomeru" + * - check( + "package torimatomeru" - ) - * - check( - """package torimatomeru - | - |package lols - """.stripMargin - ) - * - check( - """package torimatomeru - |import a - |import b - """.stripMargin - ) - * - check( - """ - |package torimatomeru - | - |import org.parboiled2.ParseError - |import utest._ - |import utest.framework.Test - |import utest.util.Tree - | - |import scala.util.{Failure, Success} - | - |object SyntaxTest extends TestSuite - """.stripMargin - ) - * - check( - """ - |object SyntaxTest extends TestSuite{ - | def check[T](input: String) = { - | - | } - |} - """.stripMargin - ) - * - check( - """ - |object SyntaxTest{ - | a() - | throw 1 - |} - """.stripMargin - ) - * - check( - """ - |object SyntaxTest extends TestSuite{ - | { - | println - | throw 1 - | } - |} - """.stripMargin - ) - * - check( - """package scalatex - | - | - |import org.parboiled2._ - |import torimatomeru.ScalaSyntax - | - |import scalatex.stages.{Trim, Parser, Ast} - |import scalatex.stages.Ast.Block.{IfElse, For, Text} - |import Ast.Chain.Args - | - |object ParserTests extends utest.TestSuite{ - | import Ast._ - | import utest._ - | def check[T](input: String, parse: Parser => scala.util.Try[T], expected: T) = { - | val parsed = parse(new Parser(input)).get - | assert(parsed == expected) - | } - | def tests = TestSuite{} - |} - """.stripMargin - ) - * - check( - """ - |object Moo{ - | a - | .b - | - | c - |} - """.stripMargin - ) - * - check( - """ - |object Moo{ - | filename - | .asInstanceOf[Literal] - |10 - |} - """.stripMargin - ) - * - check( - """ - |object Cow{ - | ().mkString - | - | 1 - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | private[this] val applyMacroFull = 1 - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | private[this] def applyMacroFull(c: Context) - | (expr: c.Expr[String], - | runtimeErrors: Boolean, - | debug: Boolean) - | : c.Expr[Frag] = { - | } - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | class DebugFailure extends Exception - | - | 1 - |} - """.stripMargin - ) - * - check( - """ - |package torimatomeru - | - |package syntax - | - |import org.parboiled2._ - | - """.stripMargin - ) - * - check( - """ - |object Foo{ - | 0 match { - | case A | B => 0 - | } - |} - """.stripMargin - ) - * - check( - """ - |object Compiler{ + ) + * - check( + """package torimatomeru | - | def apply = { - | def rec = t match { - | case 0 => 0 - | } + |package lols + """.stripMargin + ) + * - check( + """package torimatomeru + |import a + |import b + """.stripMargin + ) + * - check( + """ + |package torimatomeru + | + |import org.parboiled2.ParseError + |import utest._ + |import utest.framework.Test + |import utest.util.Tree + | + |import scala.util.{Failure, Success} + | + |object SyntaxTest extends TestSuite + """.stripMargin + ) + * - check( + """ + |object SyntaxTest extends TestSuite{ + | def check[T](input: String) = { | - | rec(tree) | } |} + """.stripMargin + ) + * - check( + """ + |object SyntaxTest{ + | a() + | throw 1 + |} + """.stripMargin + ) + * - check( + """ + |object SyntaxTest extends TestSuite{ + | { + | println + | throw 1 + | } + |} + """.stripMargin + ) + * - check( + """package scalatex | - """. - stripMargin - ) - * - check( - """ - |object O { - | A(A(A(A(A(A(A(A()))))))) - |} - | - """.stripMargin - ) - * - check( - """ - |object O{ - | A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A()))))))))))))))) - |} - """.stripMargin - ) - * - check( - """ - |object L{ - | a.b = c - | a().b = c - |} - """.stripMargin - ) - * - check( - """ - |object L{ - | a b c - | d = 1 - |} - """.stripMargin - ) - - * - check( - """/* __ *\ - |** ________ ___ / / ___ __ ____ Scala.js CLI ** - |** / __/ __// _ | / / / _ | __ / // __/ (c) 2013-2014, LAMP/EPFL ** - |** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** - |** /____/\___/_/ |_/____/_/ | |__/ /____/ ** - |** |/____/ ** - |\* */ - | - |package scala.scalajs.cli - | - """.stripMargin - ) - * - check( - """ - |object O{ - | for { - | a <- b - | c <- d - | } { - | 1 - | } - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | val jarFile = - | try { 1 } - | catch { case _: F => G } - |} - """.stripMargin - ) - * - check( - """ - |object F{ - | func{ case _: F => fail } - |} - """.stripMargin - ) - * - check( - """ - |object Foo{ - | val a = d // g - | val b = e // h - | val c = f - |} - """.stripMargin - ) - * - check( - """ - |object L{ - | x match{ - | case y.Y(z) => z - | } - |} - """.stripMargin - ) - * - check( - """object K{ - | val a: B { - | val c: D - | } - | - | 1 - |} - """.stripMargin - ) - * - check( - """ - |object LOLS{ - | def run() {} - | - | def apply() {} - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | a =:= b.c - |} - """.stripMargin - ) - * - check( - """ - |object K{ - | a( - | 1: _* - | ) - |} - """.stripMargin - ) - * - check( - """ - |object P{ - | tree match { - | case stats :+ expr => 1 - | } - |} - """.stripMargin - ) - * - check( - """ - |object K{ - | val trueA = 1 - |} - """.stripMargin - ) - * - check( - """ - |object K{ - | val nullo :: cow = 1 - |} - """.stripMargin - ) - * - check( - """ - |object K{ - | val omg_+ = 1 - |} - """.stripMargin - ) - * - check( - """ - |object K{ - | val + = 1 - | var * = 2 - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | c match { - | case b_ => 1 - | } - |} - """.stripMargin - ) - * - check( - """ - |trait Basic { - | b match { - | case C => true; case _ => false - | } - |} - """.stripMargin - ) - * - check( - """trait Basic { - | !a.b - |} - """.stripMargin - ) - * - check( - """ - |class Parser { - | {() => } - |} - | - """.stripMargin - ) - * - check( - """ - | - | - | - |package omg - |; - | - |; - | - |; - |class Parser - |; - | - |; - | - |; - """.stripMargin - ) - * - check( - """ - | - |object GenJSCode { - | code: @switch - |} - """.stripMargin - ) - * - check( - """object B { - | { a: L => } - |} - """.stripMargin - ) - * - check( - """object O{ - | { - | val index = 0 - | i: Int => 10 - | 0 - | } - |} - """.stripMargin - ) - * - check( - """object GenJSCode{ - | val g: G.this.g.type - |} - | - """.stripMargin - ) - * - check( - """object K{ - | class RTTypeTest - | private object O - |} - """.stripMargin - ) - * - check( - """object O{ - | if (eqeq && - | - | false) 1 - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | for( - | x <- Nil map - | - | (x => x) - | ) yield x - |} - """.stripMargin - ) - * - check( - """ - |object O{ - | for{ - | x <- Nil - | if - | - | 1 == 2 - | } yield x - |} - """.stripMargin - ) - * - check( - """ - |object ScopedVar { - | def withScopedVars(ass: Seq[_]) = 1 - |} - | - """.stripMargin - ) - * - check( - """ - |abstract class JSASTTest extends DirectTest { - | def show: this.type = () - |} - | - """.stripMargin - ) - * - check( - """object Traversers { - | { - | 1 - | cases foreach nil - | } - |} - """.stripMargin - ) - * - check( - """object Utils { - | "\\" - |} - | - """.stripMargin - ) - * - check( - """object F{ - | this eq that.asInstanceOf[AnyRef] - |} - """.stripMargin - ) - * - check( - """class C{ - | 0x00 <= 2 && 1 - |} - | - """.stripMargin - ) - * - check( - """class Runtime private - """.stripMargin - ) - * - check( - """ - |object System { - | def a[@b T[@b V]] = 1 - |} - | - """.stripMargin - ) - * - check( - """object U{ - | private val _fragment = fld(Fragment) - | _fld = null - |} - """.stripMargin - ) - * - check( - """class Array{ - | def length_= = 1 - |} - """.stripMargin - ) - * - check( - """object K{ - | def newBuilder = - | new B - | - | @inline def a = 1 - |} - """.stripMargin - ) - * - check( - """trait Function12[-T1, +R] - """.stripMargin - ) - * - check( - """@a // Don't do this at home! - |trait B - """.stripMargin - ) - * - check( - """object T{ - | type B = { def F: S } - |} - | - """.stripMargin - ) - * - check( - """ - |object ScalaJSBuild{ - | ( - | 1 / 2 - | / 3 - | ) - |} - | - """.stripMargin - ) - * - check( - """trait Writer{ - | '\f' - |} - """.stripMargin - ) - * - check( - """object CyclicDependencyException { - | def str(info: ResolutionInfo) = - | s"${info.resourceName} from: ${info.origins.mkString(", ")}" - |} - """.stripMargin - ) - * - check( - """object OptimizerCore { - | tpe match { - | case NothingType | _:RecordType=> 1 - | } - |} - """.stripMargin - ) - * - check( - """class A{ - | 1 - | () => 1 - |} - """.stripMargin - ) - * - check( - """trait ReactorCanReply { - | _: InternalReplyReactor => - |} - """.stripMargin - ) - - * - check( - """object G{ - | def isBefore(pd: SubComponent) = settings.stopBefore - | phaseDescriptors sliding 2 collectFirst () - |} - """.stripMargin - ) - * - check( - """class SymbolLoaders { - | type T = ClassPath[AbstractFile]#ClassRep - |} - """.stripMargin - ) - * - check( - """trait ContextErrors { - | def isUnaffiliatedExpr = expanded.isInstanceOf[scala.reflect.api.Exprs#Expr[_]] - |} - """.stripMargin - ) - * - check( - """trait Typers{ - | s"nested ${ if (1) "trait" else "class" }" - |} - """.stripMargin - ) - * - check( - """trait ReflectSetup { this: Global => - | phase = 1 - |} - """.stripMargin - ) - * - check( - """trait Predef { - | @x - | // a - | type T - |} - """.stripMargin - ) - * - check( - """ - object StringContext { - - s"${ - require(index >= 0 && index < str.length) - val ok = "[\b, \t, \n, \f, \r, \\, \", \']" - if (index == str.length - 1) "at terminal" else s"'\\${str(index + 1)}' not one of $ok at" - }" - - } - """.stripMargin - ) - * - check( - """trait Growable { - | += - |} - """.stripMargin - ) - * - check( - """package immutable { - | object O - |} - """.stripMargin - ) - * - check( - """import java.util.concurrent.TimeUnit.{ NANOSECONDS => NANOS, MILLISECONDS ⇒ MILLIS } - """.stripMargin - ) - * - check( - """class FunFinder{ - | val targetName = s"$name${ if (isModule) "$" else "" }" - |} - """.stripMargin - ) - * - check( - """class AkkaException{ - | for (i ← 0 until trace.length) - | () - |} - """.stripMargin - ) - * - check( - """class FiniteDuration{ - | 1000. - |} - """.stripMargin - ) - * - check( - """object Test4 { - | type T = F @field - | @BeanProperty val x = 1 - |} - """.stripMargin - ) - * - check( - """package `dmacro` { - |} - """.stripMargin - ) - * - check( - """class A { - | def fn1 = List apply 1 - | def fn2 = List apply[Int] 2 - |} - """.stripMargin - ) - * - check( - """class C { - | def this(x: Int) = { - | this(); - | class D; - | } - |} - """.stripMargin - ) - * - check( - """trait B[T] { - | def f1(a: T): Unit { } - |} - """.stripMargin - ) - * - check( - """object test { - | case object Int16 extends SampleFormat1 - | (1) match { - | case _ => 1 - | } - |} - """.stripMargin - ) - * - check( - """object A { - | def x { - | implicit lazy val e: Int = 0 - | } - |} - """.stripMargin - ) - * - check( - """object test { - | for { - | n <- A - | a <- B - | _ <- C - | } yield n - |} - """.stripMargin - ) - * - check( - """object Test { - | def t1: M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[M[Inty @unchecked]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] = x - |} - """.stripMargin - ) - * - check( - """abstract class Mix___eFoo___wBar_I_ extends Foo___ with Bar_I_ { ; ; f; } - """.stripMargin - ) - } - 'neg{ - * - checkNeg( - """ - |object O{ - | for{ - | x <- Nil map - | - | (x => x) - | } yield x - |} - """.stripMargin - ) - * - checkNeg( - """object O{ - | for{ - | x <- Nil - | if 1 == - | - | 2 - | } yield x - |} - """.stripMargin - ) - * - checkNeg( - """object O{ - | for{ - | x <- Nil - | _ = 1 == - | - | 2 - | } yield x - |} - """.stripMargin - ) - * - checkNeg( - """ - |object System { - | def a[@b T[V @b]] = 1 - |} - | - """.stripMargin - ) + | + |import org.parboiled2._ + |import torimatomeru.ScalaSyntax + | + |import scalatex.stages.{Trim, Parser, Ast} + |import scalatex.stages.Ast.Block.{IfElse, For, Text} + |import Ast.Chain.Args + | + |object ParserTests extends utest.TestSuite{ + | import Ast._ + | import utest._ + | def check[T](input: String, parse: Parser => scala.util.Try[T], expected: T) = { + | val parsed = parse(new Parser(input)).get + | assert(parsed == expected) + | } + | def tests = TestSuite{} + |} + """.stripMargin + ) + * - check( + """ + |object Moo{ + | a + | .b + | + | c + |} + """.stripMargin + ) + * - check( + """ + |object Moo{ + | filename + | .asInstanceOf[Literal] + |10 + |} + """.stripMargin + ) + * - check( + """ + |object Cow{ + | ().mkString + | + | 1 + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | private[this] val applyMacroFull = 1 + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | private[this] def applyMacroFull(c: Context) + | (expr: c.Expr[String], + | runtimeErrors: Boolean, + | debug: Boolean) + | : c.Expr[Frag] = { + | } + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | class DebugFailure extends Exception + | + | 1 + |} + """.stripMargin + ) + * - check( + """ + |package torimatomeru + | + |package syntax + | + |import org.parboiled2._ + | + """.stripMargin + ) + * - check( + """ + |object Foo{ + | 0 match { + | case A | B => 0 + | } + |} + """.stripMargin + ) + * - check( + """ + |object Compiler{ + | + | def apply = { + | def rec = t match { + | case 0 => 0 + | } + | + | rec(tree) + | } + |} + | + """.stripMargin + ) + * - check( + """ + |object O { + | A(A(A(A(A(A(A(A()))))))) + |} + | + """.stripMargin + ) + * - check( + """ + |object O{ + | A(A(A(A(A(A(A(A(A(A(A(A(A(A(A(A()))))))))))))))) + |} + """.stripMargin + ) + * - check( + """ + |object L{ + | a.b = c + | a().b = c + |} + """.stripMargin + ) + * - check( + """ + |object L{ + | a b c + | d = 1 + |} + """.stripMargin + ) - } + * - check( + """/* __ *\ + |** ________ ___ / / ___ __ ____ Scala.js CLI ** + |** / __/ __// _ | / / / _ | __ / // __/ (c) 2013-2014, LAMP/EPFL ** + |** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** + |** /____/\___/_/ |_/____/_/ | |__/ /____/ ** + |** |/____/ ** + |\* */ + | + |package scala.scalajs.cli + | + """.stripMargin + ) + * - check( + """ + |object O{ + | for { + | a <- b + | c <- d + | } { + | 1 + | } + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | val jarFile = + | try { 1 } + | catch { case _: F => G } + |} + """.stripMargin + ) + * - check( + """ + |object F{ + | func{ case _: F => fail } + |} + """.stripMargin + ) + * - check( + """ + |object Foo{ + | val a = d // g + | val b = e // h + | val c = f + |} + """.stripMargin + ) + * - check( + """ + |object L{ + | x match{ + | case y.Y(z) => z + | } + |} + """.stripMargin + ) + * - check( + """object K{ + | val a: B { + | val c: D + | } + | + | 1 + |} + """.stripMargin + ) + * - check( + """ + |object LOLS{ + | def run() {} + | + | def apply() {} + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | a =:= b.c + |} + """.stripMargin + ) + * - check( + """ + |object K{ + | a( + | 1: _* + | ) + |} + """.stripMargin + ) + * - check( + """ + |object P{ + | tree match { + | case stats :+ expr => 1 + | } + |} + """.stripMargin + ) + * - check( + """ + |object K{ + | val trueA = 1 + |} + """.stripMargin + ) + * - check( + """ + |object K{ + | val nullo :: cow = 1 + |} + """.stripMargin + ) + * - check( + """ + |object K{ + | val omg_+ = 1 + |} + """.stripMargin + ) + * - check( + """ + |object K{ + | val + = 1 + | var * = 2 + |} + """.stripMargin + ) + * - check( + """ + |object O{ + | c match { + | case b_ => 1 + | } + |} + """.stripMargin + ) + * - check( + """ + |trait Basic { + | b match { + | case C => true; case _ => false + | } + |} + """.stripMargin + ) + * - check( + """trait Basic { + | !a.b + |} + """.stripMargin + ) + * - check( + """ + |class Parser { + | {() => } + |} + | + """.stripMargin + ) + * - check( + """ + | + | + | + |package omg + |; + | + |; + | + |; + |class Parser + |; + | + |; + | + |; + """.stripMargin + ) } def checkFile(path: String) = check(io.Source.fromFile(path).mkString) 'file{ - * - checkFile("scalaParser/src/test/resources/test.scala") + * - checkFile("test.txt") * - checkFile("scalaParser/src/main/scala/scalaParser/syntax/Basic.scala") * - checkFile("scalaParser/src/main/scala/scalaParser/syntax/Identifiers.scala") * - checkFile("scalaParser/src/main/scala/scalaParser/syntax/Literals.scala") @@ -859,36 +433,16 @@ object SyntaxTest extends TestSuite{ * - checkFile("scalatexPlugin/src/main/scala/scalatex/ScalaTexPlugin.scala") } - 'omg{ -// val root = new java.io.File("book/target/clones/scala-js/") - val root = new java.io.File("../scala") - def listFiles(s: java.io.File): Iterator[String] = { - val (dirs, files) = s.listFiles().toIterator.partition(_.isDirectory) - files.map(_.getPath) ++ dirs.flatMap(listFiles) - } - // Things that we won't bother parsing, mainly because they use XML literals - val blacklist = Seq( - "dbuild-meta-json-gen.scala", - "genprod.scala", - "doc/html/HtmlPage.scala", - "scala/src/scaladoc/scala/tools/nsc/doc/html", - "jvm/interpreter.scala", - "disabled", // don't bother parsing disabled tests - "neg", // or neg tests - "deprecate-early-type-defs.scala", // or deprecated tests - // Lots of guys in these folders seem - // to be borked, skip all of them - "test/files/positions", - "test/files/presentation" - ) - for{ - f <- listFiles(root) - if f.endsWith(".scala") - if !blacklist.exists(f.contains) - }{ - println("CHECKING " + f) - checkFile(f) - } - } +// 'omg{ +// val root = new java.io.File("../scala-js/") +// def listFiles(s: java.io.File): Iterator[String] = { +// val (dirs, files) = s.listFiles().toIterator.partition(_.isDirectory) +// files.map(_.getPath) ++ dirs.flatMap(listFiles) +// } +// for(f <- listFiles(root).filter(_.endsWith(".scala"))){ +// println("CHECKING " + f) +// checkFile(f) +// } +// } } }
\ No newline at end of file |