在Scala中为解析器组合器II创建测试

时间:2019-09-23 13:11:34

标签: scala testing parser-combinators

考虑this源代码,该源代码在Scala中为术语语言实现了解析器。用于测试其功能的主要功能定义为:

def main(args: Array[String]): Unit = {
    val stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in))
    val tokens = new lexical.Scanner(stdin.readLine())
    phrase(term)(tokens) match {
      case Success(trees, _) =>
        for (t <- path(trees))
          println(t)
        try {
          print("Big step: ")
          println(eval(trees))
        } catch {
          case TermIsStuck(t) => println("Stuck term: " + t)
        }
      case e =>
        println(e)
    }
  }

我编写了以下测试:

package fos

import org.scalatest.FunSuite


class ArithmeticTest extends FunSuite {

  test("testTerm") {

    Arithmetic.term(new Arithmetic.lexical.Scanner("if iszero pred pred 2 then if iszero 0 then true else false else false")) match {
      case Success(res,next) => assert(res == If(IsZero(Pred(Pred(Succ(Succ(Zero))))),If(IsZero(Zero),True,False),False))
      case Failure(msg,next) => assert(false)
    }
  }

}

不幸的是,即使像上面的链接中那样混入StandardTokenParsers,也无法识别成功和失败案例。我该如何运作?

1 个答案:

答案 0 :(得分:1)

您需要CREATE OR REPLACE PROCEDURE sp_comms_update_stg ( ssms_key IN VARCHAR2, spolicyNumber IN VARCHAR2, sclientKey IN VARCHAR2, sclientReference IN VARCHAR2, sresult OUT SYS_REFCURSOR ) IS BEGIN UPDATE stg_update_email SET sms_key := ssms_key, policy_number := spolicyNumber, client_key := sclientKey, process_status := 'Processed' WHERE client_reference = sclientReference; INSERT INTO EVENTLOG VALUES(seq_eventlog.NEXTVAL, spolicyNumber , (select to_date(sysdate) from dual), to_char(sysdate,'HH24:MI:SS'), 101, null, 1, 'Updated stg_update_email', 'stg_update_email successfully updated', 'P', var_Client, null, null); sresult:= true; COMMIT; EXCEPTION WHEN OTHERS Then Rollback; sresult := false; RAISE_APPLICATION_ERROR (-20000,'ERROR IN EXECUTING PROCEDURE SP_UNDEL_UPD_STG - '|| chr(13)||chr(10) || UPPER(SQLERRM) || chr(13)||chr(10)); END; Arithmetic.Success,就像您有Arithmetic.Failure一样。或者,您可以Arithmetic.lexical.Scanner

相关问题