Verifies: SYS-REQ-116 (incremental path lookup) SYS-REQ-116:nominal:nominal reqproof:proptest:skip targeted streaming witness; not a property-test subject
(t *testing.T)
| 13 | // SYS-REQ-116:nominal:nominal |
| 14 | // reqproof:proptest:skip targeted streaming witness; not a property-test subject |
| 15 | func TestReaderParserGet(t *testing.T) { |
| 16 | tests := []struct { |
| 17 | name string |
| 18 | data string |
| 19 | keys []string |
| 20 | want string |
| 21 | wantType ValueType |
| 22 | }{ |
| 23 | { |
| 24 | name: "nested number", |
| 25 | data: `{"person":{"name":"Ada","age":37}}`, |
| 26 | keys: []string{"person", "age"}, |
| 27 | want: "37", |
| 28 | wantType: Number, |
| 29 | }, |
| 30 | { |
| 31 | name: "object", |
| 32 | data: `{"person":{"name":"Ada","age":37}}`, |
| 33 | keys: []string{"person"}, |
| 34 | want: `{"name":"Ada","age":37}`, |
| 35 | wantType: Object, |
| 36 | }, |
| 37 | { |
| 38 | name: "array index", |
| 39 | data: `{"people":[{"name":"Ada"},{"name":"Grace"}]}`, |
| 40 | keys: []string{"people", "[1]", "name"}, |
| 41 | want: "Grace", |
| 42 | wantType: String, |
| 43 | }, |
| 44 | { |
| 45 | name: "root value", |
| 46 | data: ` [1,{"ok":true}] trailing bytes are not needed`, |
| 47 | want: `[1,{"ok":true}]`, |
| 48 | wantType: Array, |
| 49 | }, |
| 50 | } |
| 51 | |
| 52 | for _, tt := range tests { |
| 53 | t.Run(tt.name, func(t *testing.T) { |
| 54 | rp := NewReaderParser(bytes.NewReader([]byte(tt.data))) |
| 55 | value, vt, err := rp.Get(tt.keys...) |
| 56 | if err != nil { |
| 57 | t.Fatalf("Get returned error: %v", err) |
| 58 | } |
| 59 | if vt != tt.wantType { |
| 60 | t.Fatalf("Get type = %v, want %v", vt, tt.wantType) |
| 61 | } |
| 62 | if got := string(value); got != tt.want { |
| 63 | t.Fatalf("Get value = %q, want %q", got, tt.want) |
| 64 | } |
| 65 | }) |
| 66 | } |
| 67 | |
| 68 | rp := NewReaderParser(strings.NewReader(`{"present":1}`)) |
| 69 | if _, vt, err := rp.Get("missing"); !errors.Is(err, KeyPathNotFoundError) || vt != NotExist { |
| 70 | t.Fatalf("missing Get = type %v, error %v; want NotExist, KeyPathNotFoundError", vt, err) |
| 71 | } |
| 72 | } |
nothing calls this directly
no test coverage detected