// Copyright (C) 2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package jsonparse import ( "testing" "github.com/stretchr/testify/assert" ) func TestParserHandleRune(t *testing.T) { t.Parallel() type testcase struct { Input string ExpStack []string } testcases := map[string]testcase{ // Keep these test-cases in-sync with the examples in parse.go. "object": { Input: `{"x":"y","a":"b"}`, ExpStack: []string{ // st,// processed `?`, `{`, // { `:"`, // {" `:"`, // {"x `:`, // {"x" `o?`, // {"x": `o"`, // {"x":" `o"`, // {"x":"y `o`, // {"x":"y" `}`, // {"x":"y", `:"`, // {"x":"y"," `:"`, // {"x":"y","a `:`, // {"x":"y","a" `o?`, // {"x":"y","a": `o"`, // {"x":"y","a":" `o"`, // {"x":"y","a":"b `o`, // {"x":"y","a":"b" ``, // {"x":"y","a":"b"} }, }, "array": { Input: `["x","y"]`, ExpStack: []string{ // st,// processed `?`, `[`, // [ `a"`, // [" `a"`, // ["x `a`, // ["x" `a?`, // ["x", `a"`, // ["x"," `a"`, // ["x","y `a`, // ["x","y" ``, // ["x","y"] }, }, } for tcName, tc := range testcases { tc := tc t.Run(tcName, func(t *testing.T) { t.Parallel() var par Parser if !assert.Equal(t, len(tc.Input)+1, len(tc.ExpStack)) { return } for i, r := range tc.Input { assert.Equal(t, tc.ExpStack[i], par.stackString()) _, err := par.HandleRune(r, true) assert.NoError(t, err) assert.Equal(t, tc.ExpStack[i+1], par.stackString()) } }) } }