mirror of
https://github.com/romychs/Ocean-240.2-Emulator.git
synced 2026-04-21 11:03:21 +03:00
180 lines
4.4 KiB
Go
180 lines
4.4 KiB
Go
package gval
|
|
|
|
import (
|
|
"regexp/syntax"
|
|
"testing"
|
|
)
|
|
|
|
func TestParsingFailure(t *testing.T) {
|
|
testEvaluate(
|
|
[]evaluationTest{
|
|
{
|
|
name: "Invalid equality comparator",
|
|
expression: "1 = 1",
|
|
wantErr: unexpected(`"="`, "operator"),
|
|
},
|
|
{
|
|
name: "Invalid equality comparator",
|
|
expression: "1 === 1",
|
|
wantErr: unexpected(`"="`, "extension"),
|
|
},
|
|
{
|
|
name: "Too many characters for logical operator",
|
|
expression: "true &&& false",
|
|
wantErr: unexpected(`"&"`, "extension"),
|
|
},
|
|
{
|
|
|
|
name: "Too many characters for logical operator",
|
|
expression: "true ||| false",
|
|
wantErr: unexpected(`"|"`, "extension"),
|
|
},
|
|
{
|
|
|
|
name: "Premature end to expression, via modifier",
|
|
expression: "10 > 5 +",
|
|
wantErr: unexpected("EOF", "extensions"),
|
|
},
|
|
{
|
|
name: "Premature end to expression, via comparator",
|
|
expression: "10 + 5 >",
|
|
wantErr: unexpected("EOF", "extensions"),
|
|
},
|
|
{
|
|
name: "Premature end to expression, via logical operator",
|
|
expression: "10 > 5 &&",
|
|
wantErr: unexpected("EOF", "extensions"),
|
|
},
|
|
{
|
|
|
|
name: "Premature end to expression, via ternary operator",
|
|
expression: "true ?",
|
|
wantErr: unexpected("EOF", "extensions"),
|
|
},
|
|
{
|
|
name: "Hanging REQ",
|
|
expression: "`wat` =~",
|
|
wantErr: unexpected("EOF", "extensions"),
|
|
},
|
|
{
|
|
|
|
name: "Invalid operator change to REQ",
|
|
expression: " / =~",
|
|
wantErr: unexpected(`"/"`, "extensions"),
|
|
},
|
|
{
|
|
name: "Invalid starting token, comparator",
|
|
expression: "> 10",
|
|
wantErr: unexpected(`">"`, "extensions"),
|
|
},
|
|
{
|
|
name: "Invalid starting token, modifier",
|
|
expression: "+ 5",
|
|
wantErr: unexpected(`"+"`, "extensions"),
|
|
},
|
|
{
|
|
name: "Invalid starting token, logical operator",
|
|
expression: "&& 5 < 10",
|
|
wantErr: unexpected(`"&"`, "extensions"),
|
|
},
|
|
{
|
|
name: "Invalid NUMERIC transition",
|
|
expression: "10 10",
|
|
wantErr: unexpected(`Int`, "operator"),
|
|
},
|
|
{
|
|
name: "Invalid STRING transition",
|
|
expression: "`foo` `foo`",
|
|
wantErr: `String while scanning operator`, // can't use func unexpected because the token was changed from String to RawString in go 1.11
|
|
},
|
|
{
|
|
name: "Invalid operator transition",
|
|
expression: "10 > < 10",
|
|
wantErr: unexpected(`"<"`, "extensions"),
|
|
},
|
|
{
|
|
|
|
name: "Starting with unbalanced parens",
|
|
expression: " ) ( arg2",
|
|
wantErr: unexpected(`")"`, "extensions"),
|
|
},
|
|
{
|
|
|
|
name: "Unclosed bracket",
|
|
expression: "[foo bar",
|
|
wantErr: unexpected(`EOF`, "extensions"),
|
|
},
|
|
{
|
|
|
|
name: "Unclosed quote",
|
|
expression: "foo == `responseTime",
|
|
wantErr: "could not parse string",
|
|
},
|
|
{
|
|
|
|
name: "Constant regex pattern fail to compile",
|
|
expression: "foo =~ `[abc`",
|
|
wantErr: string(syntax.ErrMissingBracket),
|
|
},
|
|
{
|
|
|
|
name: "Constant unmatch regex pattern fail to compile",
|
|
expression: "foo !~ `[abc`",
|
|
wantErr: string(syntax.ErrMissingBracket),
|
|
},
|
|
{
|
|
|
|
name: "Unbalanced parentheses",
|
|
expression: "10 > (1 + 50",
|
|
wantErr: unexpected(`EOF`, "parentheses"),
|
|
},
|
|
{
|
|
|
|
name: "Multiple radix",
|
|
expression: "127.0.0.1",
|
|
wantErr: unexpected(`Float`, "operator"),
|
|
},
|
|
{
|
|
|
|
name: "Hanging accessor",
|
|
expression: "foo.Bar.",
|
|
wantErr: unexpected(`EOF`, "field"),
|
|
},
|
|
{
|
|
name: "Incomplete Hex",
|
|
expression: "0x",
|
|
wantErr: `strconv.ParseFloat: parsing "0x": invalid syntax`,
|
|
},
|
|
{
|
|
name: "Invalid Hex literal",
|
|
expression: "0x > 0",
|
|
wantErr: `strconv.ParseFloat: parsing "0x": invalid syntax`,
|
|
},
|
|
{
|
|
name: "Hex float (Unsupported)",
|
|
expression: "0x1.1",
|
|
wantErr: `strconv.ParseFloat: parsing "0x1.1": invalid syntax`,
|
|
},
|
|
{
|
|
name: "Hex invalid letter",
|
|
expression: "0x12g1",
|
|
wantErr: `strconv.ParseFloat: parsing "0x12": invalid syntax`,
|
|
},
|
|
{
|
|
name: "Error after camouflage",
|
|
expression: "0 + ,",
|
|
wantErr: `unexpected "," while scanning extensions`,
|
|
},
|
|
},
|
|
t,
|
|
)
|
|
}
|
|
|
|
func unknownOp(op string) string {
|
|
return "unknown operator " + op
|
|
}
|
|
|
|
func unexpected(token, unit string) string {
|
|
return "unexpected " + token + " while scanning " + unit
|
|
}
|