From 73ab65855eb2bac9b893c381439d43b9436fdcfd Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Fri, 2 Jul 2021 02:44:38 +0900 Subject: Allow directives to take multiple parameters --- spec/parser_test.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'spec/parser_test.go') diff --git a/spec/parser_test.go b/spec/parser_test.go index 788c4b3..628dd6f 100644 --- a/spec/parser_test.go +++ b/spec/parser_test.go @@ -25,10 +25,10 @@ func TestParse(t *testing.T) { alt.Directive = dir return alt } - dir := func(name string, param *ParameterNode) *DirectiveNode { + dir := func(name string, params ...*ParameterNode) *DirectiveNode { return &DirectiveNode{ - Name: name, - Parameter: param, + Name: name, + Parameters: params, } } idParam := func(id string) *ParameterNode { @@ -209,6 +209,8 @@ push_m2: "-->" #push m2; pop_m1 : "<-" #pop; #mode m2 pop_m2: "<--" #pop; +#mode default m1 m2 +whitespace: "\u{0020}+" #skip; `, ast: &RootNode{ Productions: []*ProductionNode{ @@ -241,7 +243,7 @@ pop_m2: "<--" #pop; prod("pop_m1", withAltDir( alt(pat(`<-`)), - dir("pop", nil), + dir("pop"), ), ), dir("mode", idParam("m1")), @@ -250,11 +252,20 @@ pop_m2: "<--" #pop; prod("pop_m2", withAltDir( alt(pat(`<--`)), - dir("pop", nil), + dir("pop"), ), ), dir("mode", idParam("m2")), ), + withProdDir( + prod("whitespace", + withAltDir( + alt(pat(`\u{0020}+`)), + dir("skip"), + ), + ), + dir("mode", idParam("default"), idParam("m1"), idParam("m2")), + ), }, }, }, @@ -419,14 +430,11 @@ func testDirective(t *testing.T, dir, expected *DirectiveNode) { if expected.Name != dir.Name { t.Fatalf("unexpected directive name; want: %+v, got: %+v", expected.Name, dir.Name) } - if expected.Parameter == nil && dir.Parameter != nil { - t.Fatalf("unexpected directive parameter; want: nil, got: %+v", dir.Parameter) + if len(expected.Parameters) != len(dir.Parameters) { + t.Fatalf("unexpected directive parameter; want: %+v, got: %+v", expected.Parameters, dir.Parameters) } - if expected.Parameter != nil { - if dir.Parameter == nil { - t.Fatalf("unexpected directive parameter; want: %+v, got: nil", expected.Parameter) - } - testParameter(t, dir.Parameter, expected.Parameter) + for i, param := range dir.Parameters { + testParameter(t, param, expected.Parameters[i]) } } -- cgit v1.2.3