require "../spec_helper" include Parcom # defining my own JSON alias in case of strange interactions # with the built-in type alias JSONValue = Nil \ | Bool \ | Int64 \ | Float64 \ | String \ | Array(JSONValue) \ | Hash(String, JSONValue) def json_null Parser.token_sequence("null".chars).map { |_| nil.as(JSONValue) } end def json_value : Parser(Char, JSONValue) Parser.first_of([ json_null, ]) end describe "example: JSON parsing" do describe "json_null" do it "parses the string 'null' and returns nil when successful" do result = json_null.parse(Tokens.from_string("null")) result.value.should be_nil result.tokens.empty?.should be_true expect_raises(ParserFail) { json_null.parse(Tokens.from_string("")) } end end describe "json_value" do it "parses null" do result = json_value.parse(Tokens.from_string("null")) result.value.should be_nil result.tokens.empty?.should be_true end end end