@@ -96,6 +96,58 @@ func TestParseJqInputRejectsMultipleJSONValuesInJSONMode(t *testing.T) {
9696 }
9797}
9898
99+ func TestRunStdoutJqQueryJSONC (t * testing.T ) {
100+ tests := []struct {
101+ name string
102+ stdout string
103+ query string
104+ want []string
105+ }{
106+ {"queries normalized JSONC" , `{
107+ // Users to query
108+ "users": [/* primary user */ {"name":"Boots",},],
109+ }` , `.users[].name` , []string {`"Boots"` }},
110+ {"large integer" , `{"id":9007199254740993,}` , `.id` , []string {`9007199254740993` }},
111+ {"trailing line comment" , `{"name":"Boots"} // comment` , `.name` , []string {`"Boots"` }},
112+ }
113+ for _ , tt := range tests {
114+ t .Run (tt .name , func (t * testing.T ) {
115+ got := runStdoutJqQuery (tt .stdout , api.StdoutJqTest {InputMode : "jsonc" , Query : tt .query }, nil )
116+ if got .Error != "" {
117+ t .Fatalf ("unexpected error: %s" , got .Error )
118+ }
119+ if ! reflect .DeepEqual (got .Results , tt .want ) {
120+ t .Fatalf ("results = %v, want %v" , got .Results , tt .want )
121+ }
122+ })
123+ }
124+ }
125+
126+ func TestRunStdoutJqQueryReturnsJSONCParseError (t * testing.T ) {
127+ got := runStdoutJqQuery (`{"name":"Boots"} /* unterminated` , api.StdoutJqTest {InputMode : "jsonc" , Query : "." }, nil )
128+ if got .Error == "" || len (got .Results ) != 0 || got .Query != "." {
129+ t .Fatalf ("expected query with parse error and no results, got %#v" , got )
130+ }
131+ }
132+
133+ func TestParseJqInputJSONCModeIsolation (t * testing.T ) {
134+ for _ , mode := range []string {"json" , "jsonl" } {
135+ for _ , stdout := range []string {`{/* comment */ "name":"Boots"}` , `{"name":"Boots",}` } {
136+ t .Run (mode + stdout , func (t * testing.T ) {
137+ if _ , err := parseJqInput (stdout , mode ); err == nil {
138+ t .Fatal ("expected strict input parsing to reject JSONC" )
139+ }
140+ })
141+ }
142+ }
143+ t .Run ("normalized input mode" , func (t * testing.T ) {
144+ got , err := parseJqInput (`/* comment */ true` , " JSONC \t " )
145+ if err != nil || got != true {
146+ t .Fatalf ("got %v, %v; want true, nil" , got , err )
147+ }
148+ })
149+ }
150+
99151func TestValFromJqPath (t * testing.T ) {
100152 tests := []struct {
101153 name string
0 commit comments