2015-05-24 40 views
-1

我正在逐步完成我的第一個Scala項目,特別是在查看解析器組合器。我無法獲得簡單的單元測試場景,並試圖瞭解我錯過了什麼。模式匹配單元測試中的ParseResult

我被模式匹配ParseResult模式成功,失敗和錯誤的案例類。我無法讓Scala解決案例類。這裏有幾個例子,但它們似乎都在解析器類的擴展中使用它們。例如,tests on github位於同一個包中。示例here位於擴展解析器的類中。

測試我想寫的樣子:

package test.parsertests 

import parser.InputParser // my sut 
import scala.util.parsing.combinator._ 

import org.scalatest.FunSuite 
class SetSuite extends FunSuite { 

    val sut = new InputParser() 

    test("Parsing a valid command") { 
    val result = sut.applyParser(sut.commandParser, "SOME VALID INPUT") 
    result match { 
     case Success(x, _) => println("Result: " + x.toString) // <-- not found: value Success 
     case Failure(msg, _) => println("Failure: " + msg) // similar 
     case Error(msg, _) => println("Error: " + msg) // similar 
    } 
    } 
} 

,我調用該方法的目的是讓我exersize我的每一個解析器在我的SUT:

package parser 

import scala.util.parsing.combinator._ 
import scala.util.parsing.combinator.syntactical._ 

class InputParser extends StandardTokenParsers { 

    def commandParser: Parser[Command] = 
("Command " ~> coord ~ coord ~ direction) ^^ { case x ~ y ~ d => new Command(x, y, d) } 

    def applyParser[T](p: Parser[T], c: String): ParseResult[T] = { 
    val tokens = new lexical.Scanner(c) 
    phrase(p)(tokens) 

} 

根本的問題是在我的測試範圍內解決案例類。基於解析器類的source,我怎樣才能定義它們?我可以通過一些額外的導入語句來解決這個問題嗎,還是隻能通過繼承來訪問?我嘗試了所有可以解決這個問題的組合,但我顯然在這裏錯過了一些東西。

+0

可以在這裏發佈您的InputParser代碼或github的要點? – Biswanath

+0

我已經填寫了更多的InputParser類代碼片段 –

回答

0

右欄FTW!我無意中在related question的答案。問題在於將案例類標識爲解析器的嵌套類。