summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-16 15:07:53 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-16 15:07:53 -0800
commit857c620357775c8ee79de2c53dbdc39456332c4b (patch)
treec292486380b340aa6cdaa5c65df0d12a20e105b8
parent37adfa72f2658b0859a61f09cae5d400efec123e (diff)
downloadhands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.tar.gz
hands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.tar.bz2
hands-on-scala-js-857c620357775c8ee79de2c53dbdc39456332c4b.zip
Some part of SyntaxTest parses successfully, the match expression doesn't
-rw-r--r--scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala6
-rw-r--r--scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala49
2 files changed, 38 insertions, 17 deletions
diff --git a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
index 283926e..d0a9b0e 100644
--- a/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
+++ b/scalatexApi/src/main/scala/torimatomeru/ScalaSyntax.scala
@@ -207,7 +207,7 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
def Import(G: B = true): Rule0 = rule { "import" ~ oneOrMore(ImportExpr(G)).separatedBy(',') }
//ImportExpr is slightly changed wrt spec because StableId always consumes all the Ids possible, so there is no need to one at the end
- def ImportExpr(G: B = true): Rule0 = rule { StableId(G) ~ optional('.' ~ ('_' | ImportSelectors(G))) }
+ def ImportExpr(G: B = true): Rule0 = rule { StableId(G) ~ optional('.' ~ (wspStrG("_", G) | ImportSelectors(G))) }
def ImportSelectors(G: B = true): Rule0 = rule { '{' ~ zeroOrMore(ImportSelector ~ ',') ~ (ImportSelector | '_') ~ wspStrG("}", G) }
def ImportSelector: Rule0 = rule { IdS() ~ optional("=>" ~ (IdS() | '_')) }
@@ -250,9 +250,9 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
def ConstrBlock: Rule0 = rule { '{' ~ SelfInvocation ~ zeroOrMore(SemiS ~ BlockStat) ~ '}' }
def SelfInvocation: Rule0 = rule { "this" ~ oneOrMore(ArgumentExprs()) }
- def TopStatSeq: Rule0 = rule { oneOrMore(TopStat).separatedBy(SemiS) }
+ def TopStatSeq: Rule0 = rule { zeroOrMore(TopStat).separatedBy(SemiS) }
def TopStat: Rule0 = rule { Packaging | PackageObject(false) | Import(false) | zeroOrMore(Annotation ~ optional(NewlineS)) ~ zeroOrMore(Modifier) ~ TmplDef(false) | MATCH }
def Packaging: Rule0 = rule { "package" ~ QualId ~ optional(NewlineS) ~ '{' ~ TopStatSeq ~ '}' }
def PackageObject(G: B = true): Rule0 = rule { "package" ~ "object" ~ ObjectDef(G) }
- def CompilationUnit: Rule0 = rule { zeroOrMore("package" ~ QualId ~ SemiS) ~ TopStatSeq }
+ def CompilationUnit: Rule1[String] = rule { capture(zeroOrMore(SemiS) ~ zeroOrMore("package" ~ QualId).separatedBy(SemiS) ~ TopStatSeq) }
}
diff --git a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
index 17b0d5f..4562dbd 100644
--- a/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
+++ b/scalatexApi/src/test/scala/torimatomeru/SyntaxTest.scala
@@ -8,32 +8,53 @@ import utest.util.Tree
import scala.util.{Failure, Success}
object SyntaxTest extends TestSuite{
- def check[T](input: String, parse: ScalaSyntax => scala.util.Try[T], expected: T) = {
- parse(new ScalaSyntax(input)) match{
+ def check[T](input: String) = {
+ new ScalaSyntax(input).CompilationUnit.run() match{
case Failure(f: ParseError) =>
println(f.formatTraces)
- throw new Exception(f.formatTraces)
+ throw new Exception(f.position + "\t" + f.formatTraces)
case Success(parsed) =>
- assert(parsed == expected)
+ assert(parsed == input)
}
-
}
def tests = TestSuite{
* - check(
- """(1
- |)""".stripMargin,
- _.ArgumentExprs().run(), ()
+ "package torimatomeru"
+
+ )
+ * - check(
+ """
+ |package torimatomeru
+ |
+ |import org.parboiled2.ParseError
+ |import utest._
+ |import utest.framework.Test
+ """.stripMargin
+
)
* - check(
- """(1,
- |1)""".stripMargin,
- _.ArgumentExprs().run(), ()
+ """
+ |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(
- """val omg = "omg"
- |omg * 2""".stripMargin,
- _.Block.run(), ()
+ """
+ |object SyntaxTest extends TestSuite{
+ | def check[T](input: String) = {
+ |
+ | }
+ |}
+ """.stripMargin
)
}
}