diff options
Diffstat (limited to 'scalaParser/src/test/scala/scalaParser/SyntaxTest.scala')
-rw-r--r-- | scalaParser/src/test/scala/scalaParser/SyntaxTest.scala | 956 |
1 files changed, 540 insertions, 416 deletions
diff --git a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala index 45f86b2..0f9b734 100644 --- a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala +++ b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala @@ -8,6 +8,13 @@ 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{ @@ -27,429 +34,546 @@ object SyntaxTest extends TestSuite{ println("running") def tests = TestSuite{ 'unit { - * - 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{ - | - | 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 - ) + 'pos { + * - check( + "package torimatomeru" - * - check( - """/* __ *\ - |** ________ ___ / / ___ __ ____ Scala.js CLI ** - |** / __/ __// _ | / / / _ | __ / // __/ (c) 2013-2014, LAMP/EPFL ** - |** __\ \/ /__/ __ |/ /__/ __ |/_// /_\ \ http://scala-js.org/ ** - |** /____/\___/_/ |_/____/_/ | |__/ /____/ ** - |** |/____/ ** - |\* */ + ) + * - 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{ | - |package scala.scalajs.cli + | def apply = { + | def rec = t match { + | case 0 => 0 + | } | - """.stripMargin - ) - * - check( - """ - |object O{ - | for { - | a <- b - | c <- d - | } { - | 1 + | rec(tree) | } |} - """.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 - ) + """. + 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 + ) + } + '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 + ) + } } def checkFile(path: String) = check(io.Source.fromFile(path).mkString) 'file{ |