diff --git a/value_boolean.go b/value_boolean.go new file mode 100644 index 0000000..f42a0df --- /dev/null +++ b/value_boolean.go @@ -0,0 +1,19 @@ +package parser + +import ( + "git.makaay.nl/mauricem/go-parsekit/parse" +) + +var ( + // Booleans are just the tokens you're used to. Always lowercase. + trueOrFalse = a.Str("true").Or(a.Str("false")) +) + +func (t *parser) startBoolean(p *parse.API) { + switch { + case p.Accept(tok.Boolean(nil, trueOrFalse)): + t.emitCommand(csetBoolVal, p.Result().Value(0).(bool)) + default: + p.Expected("true or false") + } +} diff --git a/value_boolean_test.go b/value_boolean_test.go new file mode 100644 index 0000000..182e252 --- /dev/null +++ b/value_boolean_test.go @@ -0,0 +1,20 @@ +package parser + +import ( + "testing" +) + +func TestBoolean(t *testing.T) { + for _, test := range []parseTest{ + {``, []string{`Error: unexpected end of file (expected true or false) at start of file`}}, + {`true`, []string{`boolean(true)`}}, + {`false`, []string{`boolean(false)`}}, + {`yes`, []string{`Error: unexpected input (expected true or false) at start of file`}}, + {`no`, []string{`Error: unexpected input (expected true or false) at start of file`}}, + {`1`, []string{`Error: unexpected input (expected true or false) at start of file`}}, + {`0`, []string{`Error: unexpected input (expected true or false) at start of file`}}, + } { + p := &parser{} + testParseHandler(t, p, p.startBoolean, test) + } +}