Update dependencies and replace uuid library (#100)
This commit is contained in:
+1
-3
@@ -5,14 +5,12 @@
|
||||
"gotype",
|
||||
"goimports",
|
||||
"golint",
|
||||
"gosimple",
|
||||
"gofmt",
|
||||
"vet",
|
||||
"lll",
|
||||
"staticcheck",
|
||||
"megacheck",
|
||||
"ineffassign",
|
||||
"deadcode",
|
||||
"unused",
|
||||
"unconvert",
|
||||
"misspell",
|
||||
"test",
|
||||
|
||||
+1
-2
@@ -2,8 +2,7 @@ language: go
|
||||
sudo: false
|
||||
|
||||
go:
|
||||
- 1.7
|
||||
- 1.8
|
||||
- 1.10.x
|
||||
|
||||
before_install:
|
||||
- go get golang.org/x/tools/cmd/cover
|
||||
|
||||
+201
@@ -411,6 +411,207 @@ func TestValuePathError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// based on github.com/yalp/jsonpath
|
||||
func TestValuePathExpressions(t *testing.T) {
|
||||
data := map[string]interface{}{
|
||||
"A": []interface{}{
|
||||
"string",
|
||||
23.3,
|
||||
3.0,
|
||||
true,
|
||||
false,
|
||||
nil,
|
||||
},
|
||||
"B": "value",
|
||||
"C": 3.14,
|
||||
"D": map[string]interface{}{
|
||||
"C": 3.1415,
|
||||
"V": []interface{}{
|
||||
"string2a",
|
||||
"string2b",
|
||||
map[string]interface{}{
|
||||
"C": 3.141592,
|
||||
},
|
||||
},
|
||||
},
|
||||
"E": map[string]interface{}{
|
||||
"A": []interface{}{"string3"},
|
||||
"D": map[string]interface{}{
|
||||
"V": map[string]interface{}{
|
||||
"C": 3.14159265,
|
||||
},
|
||||
},
|
||||
},
|
||||
"F": map[string]interface{}{
|
||||
"V": []interface{}{
|
||||
"string4a",
|
||||
"string4b",
|
||||
map[string]interface{}{
|
||||
"CC": 3.1415926535,
|
||||
},
|
||||
map[string]interface{}{
|
||||
"CC": "hello",
|
||||
},
|
||||
[]interface{}{
|
||||
"string5a",
|
||||
"string5b",
|
||||
},
|
||||
[]interface{}{
|
||||
"string6a",
|
||||
"string6b",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
reporter := newMockReporter(t)
|
||||
|
||||
runTests := func(tests map[string]interface{}) {
|
||||
value := NewValue(reporter, data)
|
||||
value.chain.assertOK(t)
|
||||
|
||||
for path, expected := range tests {
|
||||
actual := value.Path(path)
|
||||
actual.chain.assertOK(t)
|
||||
|
||||
assert.Equal(t, expected, actual.Raw())
|
||||
}
|
||||
}
|
||||
|
||||
t.Run("pick", func(t *testing.T) {
|
||||
runTests(map[string]interface{}{
|
||||
"$": data,
|
||||
"$.A[0]": "string",
|
||||
`$["A"][0]`: "string",
|
||||
"$.A": []interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
"$.A[*]": []interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
"$.A.*": []interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
"$.A.*.a": []interface{}{},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("slice", func(t *testing.T) {
|
||||
runTests(map[string]interface{}{
|
||||
"$.A[1,4,2]": []interface{}{23.3, false, 3.0},
|
||||
`$["B","C"]`: []interface{}{"value", 3.14},
|
||||
`$["C","B"]`: []interface{}{3.14, "value"},
|
||||
"$.A[1:4]": []interface{}{23.3, 3.0, true},
|
||||
"$.A[::2]": []interface{}{"string", 3.0, false},
|
||||
"$.A[-2:]": []interface{}{false, nil},
|
||||
"$.A[:-1]": []interface{}{"string", 23.3, 3.0, true, false},
|
||||
"$.A[::-1]": []interface{}{nil, false, true, 3.0, 23.3, "string"},
|
||||
"$.F.V[4:5][0,1]": []interface{}{"string5a", "string5b"},
|
||||
"$.F.V[4:6][1]": []interface{}{"string5b", "string6b"},
|
||||
"$.F.V[4:6][0,1]": []interface{}{"string5a", "string5b", "string6a", "string6b"},
|
||||
"$.F.V[4,5][0:2]": []interface{}{"string5a", "string5b", "string6a", "string6b"},
|
||||
"$.F.V[4:6]": []interface{}{
|
||||
[]interface{}{
|
||||
"string5a",
|
||||
"string5b",
|
||||
},
|
||||
[]interface{}{
|
||||
"string6a",
|
||||
"string6b",
|
||||
},
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("quote", func(t *testing.T) {
|
||||
runTests(map[string]interface{}{
|
||||
`$[A][0]`: "string",
|
||||
`$["A"][0]`: "string",
|
||||
`$[B,C]`: []interface{}{"value", 3.14},
|
||||
`$["B","C"]`: []interface{}{"value", 3.14},
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("search", func(t *testing.T) {
|
||||
runTests(map[string]interface{}{
|
||||
"$..C": []interface{}{3.14, 3.1415, 3.141592, 3.14159265},
|
||||
`$..["C"]`: []interface{}{3.14, 3.1415, 3.141592, 3.14159265},
|
||||
"$.D.V..C": []interface{}{3.141592},
|
||||
"$.D.V.*.C": []interface{}{3.141592},
|
||||
"$.D.V..*.C": []interface{}{3.141592},
|
||||
"$.D.*..C": []interface{}{3.141592},
|
||||
"$.*.V..C": []interface{}{3.141592},
|
||||
"$.*.D.V.C": []interface{}{3.14159265},
|
||||
"$.*.D..C": []interface{}{3.14159265},
|
||||
"$.*.D.V..*": []interface{}{3.14159265},
|
||||
"$..D..V..C": []interface{}{3.141592, 3.14159265},
|
||||
"$.*.*.*.C": []interface{}{3.141592, 3.14159265},
|
||||
"$..V..C": []interface{}{3.141592, 3.14159265},
|
||||
"$.D.V..*": []interface{}{
|
||||
"string2a",
|
||||
"string2b",
|
||||
map[string]interface{}{
|
||||
"C": 3.141592,
|
||||
},
|
||||
3.141592,
|
||||
},
|
||||
"$..A": []interface{}{
|
||||
[]interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
[]interface{}{"string3"},
|
||||
},
|
||||
"$..A..*": []interface{}{"string", 23.3, 3.0, true, false, nil, "string3"},
|
||||
"$.A..*": []interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
"$.A.*": []interface{}{"string", 23.3, 3.0, true, false, nil},
|
||||
"$..A[0,1]": []interface{}{"string", 23.3},
|
||||
"$..A[0]": []interface{}{"string", "string3"},
|
||||
"$.*.V[0]": []interface{}{"string2a", "string4a"},
|
||||
"$.*.V[1]": []interface{}{"string2b", "string4b"},
|
||||
"$.*.V[0,1]": []interface{}{"string2a", "string2b", "string4a", "string4b"},
|
||||
"$.*.V[0:2]": []interface{}{"string2a", "string2b", "string4a", "string4b"},
|
||||
"$.*.V[2].C": []interface{}{3.141592},
|
||||
"$..V[2].C": []interface{}{3.141592},
|
||||
"$..V[*].C": []interface{}{3.141592},
|
||||
"$.*.V[2].*": []interface{}{3.141592, 3.1415926535},
|
||||
"$.*.V[2:3].*": []interface{}{3.141592, 3.1415926535},
|
||||
"$.*.V[2:4].*": []interface{}{3.141592, 3.1415926535, "hello"},
|
||||
"$..V[2,3].CC": []interface{}{3.1415926535, "hello"},
|
||||
"$..V[2:4].CC": []interface{}{3.1415926535, "hello"},
|
||||
"$..V[*].*": []interface{}{
|
||||
3.141592,
|
||||
3.1415926535,
|
||||
"hello",
|
||||
"string5a",
|
||||
"string5b",
|
||||
"string6a",
|
||||
"string6b",
|
||||
},
|
||||
"$..[0]": []interface{}{
|
||||
"string",
|
||||
"string2a",
|
||||
"string3",
|
||||
"string4a",
|
||||
"string5a",
|
||||
"string6a",
|
||||
},
|
||||
"$..ZZ": []interface{}{},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestValuePathIntFloat(t *testing.T) {
|
||||
reporter := newMockReporter(t)
|
||||
|
||||
data := map[string]interface{}{
|
||||
"A": 123,
|
||||
"B": 123.0,
|
||||
}
|
||||
|
||||
value := NewValue(reporter, data)
|
||||
value.chain.assertOK(t)
|
||||
|
||||
a := value.Path(`$["A"]`)
|
||||
a.chain.assertOK(t)
|
||||
assert.Equal(t, 123.0, a.Raw())
|
||||
|
||||
b := value.Path(`$["B"]`)
|
||||
b.chain.assertOK(t)
|
||||
assert.Equal(t, 123.0, b.Raw())
|
||||
}
|
||||
|
||||
func TestValueSchema(t *testing.T) {
|
||||
reporter := newMockReporter(t)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user