github.com/nats-io/nsc@v0.0.0-20221206222106-35db9400b257/cmd/jsonpath_test.go (about) 1 /* 2 * Copyright 2020 The NATS Authors 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 package cmd 17 18 import ( 19 "encoding/json" 20 "testing" 21 22 "github.com/stretchr/testify/require" 23 ) 24 25 func TestJsonPath_String(t *testing.T) { 26 d, err := json.Marshal("helloworld") 27 require.NoError(t, err) 28 _, err = GetField(d, "hello") 29 require.Error(t, err) 30 } 31 32 func TestJsonPath_Int(t *testing.T) { 33 d, err := json.Marshal(100) 34 require.NoError(t, err) 35 _, err = GetField(d, "hello") 36 require.Error(t, err) 37 } 38 39 func TestJsonPath_Bool(t *testing.T) { 40 d, err := json.Marshal(true) 41 require.NoError(t, err) 42 _, err = GetField(d, "hello") 43 require.Error(t, err) 44 } 45 46 func TestJsonPath_Nil(t *testing.T) { 47 d, err := json.Marshal(nil) 48 require.NoError(t, err) 49 v, err := GetField(d, "hello") 50 require.NoError(t, err) 51 require.Equal(t, "null", string(v)) 52 } 53 54 func TestJsonPath_BadArrayExpression(t *testing.T) { 55 d := []byte(`{"a": [0,1,2]}`) 56 _, err := GetField(d, "a[1") 57 require.Error(t, err) 58 require.Contains(t, err.Error(), "unterminated index expression") 59 } 60 61 func TestJsonPath_BadArrayIndex(t *testing.T) { 62 d := []byte(`{"a": [0,1,2]}`) 63 _, err := GetField(d, "a[]") 64 require.Error(t, err) 65 require.Contains(t, err.Error(), "error parsing index") 66 } 67 68 func TestJsonPath_BadArrayBadIndex(t *testing.T) { 69 d := []byte(`{"a": [0,1,2]}`) 70 _, err := GetField(d, "a[ab]") 71 require.Error(t, err) 72 require.Contains(t, err.Error(), "error parsing index") 73 } 74 75 func TestJsonPath_OutOfBoundsIndex(t *testing.T) { 76 d := []byte(`{"a": [0,1,2]}`) 77 _, err := GetField(d, "a[4]") 78 require.Error(t, err) 79 require.Contains(t, err.Error(), "index is out of bounds") 80 } 81 82 func TestJsonPath_PrimitiveCannotBeInspected(t *testing.T) { 83 d := []byte(`{"a": [0,1,2]}`) 84 _, err := GetField(d, "a[1].hello") 85 require.Error(t, err) 86 require.Contains(t, err.Error(), "unable to extract") 87 } 88 89 func TestSimple(t *testing.T) { 90 d := `{"a":[1,"hello",true],"b": "hello","c": {"key": "one","value": "two"}}` 91 ba := []byte(d) 92 v, err := GetField(ba, "a") 93 require.NoError(t, err) 94 require.Equal(t, `[1,"hello",true]`, string(v)) 95 96 v, err = GetField(ba, "a[1]") 97 require.NoError(t, err) 98 require.Equal(t, `"hello"`, string(v)) 99 100 v, err = GetField(ba, "a[0]") 101 require.NoError(t, err) 102 require.Equal(t, "1", string(v)) 103 104 v, err = GetField(ba, "a[2]") 105 require.NoError(t, err) 106 require.Equal(t, "true", string(v)) 107 108 v, err = GetField(ba, "b") 109 require.NoError(t, err) 110 require.Equal(t, `"hello"`, string(v)) 111 112 v, err = GetField(ba, "c") 113 require.NoError(t, err) 114 require.Equal(t, `{"key":"one","value":"two"}`, string(v)) 115 116 v, err = GetField(ba, "c.key") 117 require.NoError(t, err) 118 require.Equal(t, `"one"`, string(v)) 119 }