vendor: remove dep and use vndr
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
parent
16f44674a4
commit
148e72d81e
16131 changed files with 73815 additions and 4235138 deletions
26
vendor/github.com/go-openapi/jsonpointer/.editorconfig
generated
vendored
26
vendor/github.com/go-openapi/jsonpointer/.editorconfig
generated
vendored
|
@ -1,26 +0,0 @@
|
|||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# Set default charset
|
||||
[*.{js,py,go,scala,rb,java,html,css,less,sass,md}]
|
||||
charset = utf-8
|
||||
|
||||
# Tab indentation (no size specified)
|
||||
[*.go]
|
||||
indent_style = tab
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
# Matches the exact files either package.json or .travis.yml
|
||||
[{package.json,.travis.yml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
117
vendor/github.com/go-openapi/jsonpointer/.github/CONTRIBUTING.md
generated
vendored
117
vendor/github.com/go-openapi/jsonpointer/.github/CONTRIBUTING.md
generated
vendored
|
@ -1,117 +0,0 @@
|
|||
## Contribution Guidelines
|
||||
|
||||
### Pull requests are always welcome
|
||||
|
||||
We are always thrilled to receive pull requests, and do our best to
|
||||
process them as fast as possible. Not sure if that typo is worth a pull
|
||||
request? Do it! We will appreciate it.
|
||||
|
||||
If your pull request is not accepted on the first try, don't be
|
||||
discouraged! If there's a problem with the implementation, hopefully you
|
||||
received feedback on what to improve.
|
||||
|
||||
We're trying very hard to keep go-swagger lean and focused. We don't want it
|
||||
to do everything for everybody. This means that we might decide against
|
||||
incorporating a new feature. However, there might be a way to implement
|
||||
that feature *on top of* go-swagger.
|
||||
|
||||
|
||||
### Conventions
|
||||
|
||||
Fork the repo and make changes on your fork in a feature branch:
|
||||
|
||||
- If it's a bugfix branch, name it XXX-something where XXX is the number of the
|
||||
issue
|
||||
- If it's a feature branch, create an enhancement issue to announce your
|
||||
intentions, and name it XXX-something where XXX is the number of the issue.
|
||||
|
||||
Submit unit tests for your changes. Go has a great test framework built in; use
|
||||
it! Take a look at existing tests for inspiration. Run the full test suite on
|
||||
your branch before submitting a pull request.
|
||||
|
||||
Update the documentation when creating or modifying features. Test
|
||||
your documentation changes for clarity, concision, and correctness, as
|
||||
well as a clean documentation build. See ``docs/README.md`` for more
|
||||
information on building the docs and how docs get released.
|
||||
|
||||
Write clean code. Universally formatted code promotes ease of writing, reading,
|
||||
and maintenance. Always run `gofmt -s -w file.go` on each changed file before
|
||||
committing your changes. Most editors have plugins that do this automatically.
|
||||
|
||||
Pull requests descriptions should be as clear as possible and include a
|
||||
reference to all the issues that they address.
|
||||
|
||||
Pull requests must not contain commits from other users or branches.
|
||||
|
||||
Commit messages must start with a capitalized and short summary (max. 50
|
||||
chars) written in the imperative, followed by an optional, more detailed
|
||||
explanatory text which is separated from the summary by an empty line.
|
||||
|
||||
Code review comments may be added to your pull request. Discuss, then make the
|
||||
suggested modifications and push additional commits to your feature branch. Be
|
||||
sure to post a comment after pushing. The new commits will show up in the pull
|
||||
request automatically, but the reviewers will not be notified unless you
|
||||
comment.
|
||||
|
||||
Before the pull request is merged, make sure that you squash your commits into
|
||||
logical units of work using `git rebase -i` and `git push -f`. After every
|
||||
commit the test suite should be passing. Include documentation changes in the
|
||||
same commit so that a revert would remove all traces of the feature or fix.
|
||||
|
||||
Commits that fix or close an issue should include a reference like `Closes #XXX`
|
||||
or `Fixes #XXX`, which will automatically close the issue when merged.
|
||||
|
||||
### Sign your work
|
||||
|
||||
The sign-off is a simple line at the end of the explanation for the
|
||||
patch, which certifies that you wrote it or otherwise have the right to
|
||||
pass it on as an open-source patch. The rules are pretty simple: if you
|
||||
can certify the below (from
|
||||
[developercertificate.org](http://developercertificate.org/)):
|
||||
|
||||
```
|
||||
Developer Certificate of Origin
|
||||
Version 1.1
|
||||
|
||||
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
||||
660 York Street, Suite 102,
|
||||
San Francisco, CA 94110 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this
|
||||
license document, but changing it is not allowed.
|
||||
|
||||
|
||||
Developer's Certificate of Origin 1.1
|
||||
|
||||
By making a contribution to this project, I certify that:
|
||||
|
||||
(a) The contribution was created in whole or in part by me and I
|
||||
have the right to submit it under the open source license
|
||||
indicated in the file; or
|
||||
|
||||
(b) The contribution is based upon previous work that, to the best
|
||||
of my knowledge, is covered under an appropriate open source
|
||||
license and I have the right under that license to submit that
|
||||
work with modifications, whether created in whole or in part
|
||||
by me, under the same open source license (unless I am
|
||||
permitted to submit under a different license), as indicated
|
||||
in the file; or
|
||||
|
||||
(c) The contribution was provided directly to me by some other
|
||||
person who certified (a), (b) or (c) and I have not modified
|
||||
it.
|
||||
|
||||
(d) I understand and agree that this project and the contribution
|
||||
are public and that a record of the contribution (including all
|
||||
personal information I submit with it, including my sign-off) is
|
||||
maintained indefinitely and may be redistributed consistent with
|
||||
this project or the open source license(s) involved.
|
||||
```
|
||||
|
||||
then you just add a line to every git commit message:
|
||||
|
||||
Signed-off-by: Joe Smith <joe@gmail.com>
|
||||
|
||||
using your real name (sorry, no pseudonyms or anonymous contributions.)
|
||||
|
||||
You can add the sign off when creating the git commit via `git commit -s`.
|
1
vendor/github.com/go-openapi/jsonpointer/.gitignore
generated
vendored
1
vendor/github.com/go-openapi/jsonpointer/.gitignore
generated
vendored
|
@ -1 +0,0 @@
|
|||
secrets.yml
|
13
vendor/github.com/go-openapi/jsonpointer/.travis.yml
generated
vendored
13
vendor/github.com/go-openapi/jsonpointer/.travis.yml
generated
vendored
|
@ -1,13 +0,0 @@
|
|||
language: go
|
||||
go:
|
||||
- 1.7
|
||||
install:
|
||||
- go get -u github.com/stretchr/testify/assert
|
||||
- go get -u github.com/go-openapi/swag
|
||||
script:
|
||||
- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./...
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
notifications:
|
||||
slack:
|
||||
secure: a5VgoiwB1G/AZqzmephPZIhEB9avMlsWSlVnM1dSAtYAwdrQHGTQxAmpOxYIoSPDhWNN5bfZmjd29++UlTwLcHSR+e0kJhH6IfDlsHj/HplNCJ9tyI0zYc7XchtdKgeMxMzBKCzgwFXGSbQGydXTliDNBo0HOzmY3cou/daMFTP60K+offcjS+3LRAYb1EroSRXZqrk1nuF/xDL3792DZUdPMiFR/L/Df6y74D6/QP4sTkTDFQitz4Wy/7jbsfj8dG6qK2zivgV6/l+w4OVjFkxVpPXogDWY10vVXNVynqxfJ7to2d1I9lNCHE2ilBCkWMIPdyJF7hjF8pKW+82yP4EzRh0vu8Xn0HT5MZpQxdRY/YMxNrWaG7SxsoEaO4q5uhgdzAqLYY3TRa7MjIK+7Ur+aqOeTXn6OKwVi0CjvZ6mIU3WUKSwiwkFZMbjRAkSb5CYwMEfGFO/z964xz83qGt6WAtBXNotqCQpTIiKtDHQeLOMfksHImCg6JLhQcWBVxamVgu0G3Pdh8Y6DyPnxraXY95+QDavbjqv7TeYT9T/FNnrkXaTTK0s4iWE5H4ACU0Qvz0wUYgfQrZv0/Hp7V17+rabUwnzYySHCy9SWX/7OV9Cfh31iMp9ZIffr76xmmThtOEqs8TrTtU6BWI3rWwvA9cXQipZTVtL0oswrGw=
|
74
vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md
generated
vendored
74
vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md
generated
vendored
|
@ -1,74 +0,0 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at ivan+abuse@flanders.co.nz. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at [http://contributor-covenant.org/version/1/4][version]
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
573
vendor/github.com/go-openapi/jsonpointer/pointer_test.go
generated
vendored
573
vendor/github.com/go-openapi/jsonpointer/pointer_test.go
generated
vendored
|
@ -1,573 +0,0 @@
|
|||
// Copyright 2013 sigu-399 ( https://github.com/sigu-399 )
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// author sigu-399
|
||||
// author-github https://github.com/sigu-399
|
||||
// author-mail sigu.399@gmail.com
|
||||
//
|
||||
// repository-name jsonpointer
|
||||
// repository-desc An implementation of JSON Pointer - Go language
|
||||
//
|
||||
// description Automated tests on package.
|
||||
//
|
||||
// created 03-03-2013
|
||||
|
||||
package jsonpointer
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const (
|
||||
TestDocumentNBItems = 11
|
||||
TestNodeObjNBItems = 4
|
||||
TestDocumentString = `{
|
||||
"foo": ["bar", "baz"],
|
||||
"obj": { "a":1, "b":2, "c":[3,4], "d":[ {"e":9}, {"f":[50,51]} ] },
|
||||
"": 0,
|
||||
"a/b": 1,
|
||||
"c%d": 2,
|
||||
"e^f": 3,
|
||||
"g|h": 4,
|
||||
"i\\j": 5,
|
||||
"k\"l": 6,
|
||||
" ": 7,
|
||||
"m~n": 8
|
||||
}`
|
||||
)
|
||||
|
||||
var testDocumentJSON interface{}
|
||||
|
||||
type testStructJSON struct {
|
||||
Foo []string `json:"foo"`
|
||||
Obj struct {
|
||||
A int `json:"a"`
|
||||
B int `json:"b"`
|
||||
C []int `json:"c"`
|
||||
D []struct {
|
||||
E int `json:"e"`
|
||||
F []int `json:"f"`
|
||||
} `json:"d"`
|
||||
} `json:"obj"`
|
||||
}
|
||||
|
||||
type aliasedMap map[string]interface{}
|
||||
|
||||
var testStructJSONDoc testStructJSON
|
||||
var testStructJSONPtr *testStructJSON
|
||||
|
||||
func init() {
|
||||
json.Unmarshal([]byte(TestDocumentString), &testDocumentJSON)
|
||||
json.Unmarshal([]byte(TestDocumentString), &testStructJSONDoc)
|
||||
testStructJSONPtr = &testStructJSONDoc
|
||||
}
|
||||
|
||||
func TestEscaping(t *testing.T) {
|
||||
|
||||
ins := []string{`/`, `/`, `/a~1b`, `/a~1b`, `/c%d`, `/e^f`, `/g|h`, `/i\j`, `/k"l`, `/ `, `/m~0n`}
|
||||
outs := []float64{0, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8}
|
||||
|
||||
for i := range ins {
|
||||
p, err := New(ins[i])
|
||||
if assert.NoError(t, err, "input: %v", ins[i]) {
|
||||
result, _, err := p.Get(testDocumentJSON)
|
||||
if assert.NoError(t, err, "input: %v", ins[i]) {
|
||||
assert.Equal(t, outs[i], result, "input: %v", ins[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestFullDocument(t *testing.T) {
|
||||
|
||||
in := ``
|
||||
|
||||
p, err := New(in)
|
||||
if err != nil {
|
||||
t.Errorf("New(%v) error %v", in, err.Error())
|
||||
}
|
||||
|
||||
result, _, err := p.Get(testDocumentJSON)
|
||||
if err != nil {
|
||||
t.Errorf("Get(%v) error %v", in, err.Error())
|
||||
}
|
||||
|
||||
if len(result.(map[string]interface{})) != TestDocumentNBItems {
|
||||
t.Errorf("Get(%v) = %v, expect full document", in, result)
|
||||
}
|
||||
|
||||
result, _, err = p.get(testDocumentJSON, nil)
|
||||
if err != nil {
|
||||
t.Errorf("Get(%v) error %v", in, err.Error())
|
||||
}
|
||||
|
||||
if len(result.(map[string]interface{})) != TestDocumentNBItems {
|
||||
t.Errorf("Get(%v) = %v, expect full document", in, result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodedTokens(t *testing.T) {
|
||||
p, err := New("/obj/a~1b")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []string{"obj", "a/b"}, p.DecodedTokens())
|
||||
}
|
||||
|
||||
func TestIsEmpty(t *testing.T) {
|
||||
p, err := New("")
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, p.IsEmpty())
|
||||
p, err = New("/obj")
|
||||
assert.NoError(t, err)
|
||||
assert.False(t, p.IsEmpty())
|
||||
}
|
||||
|
||||
func TestGetSingle(t *testing.T) {
|
||||
in := `/obj`
|
||||
|
||||
_, err := New(in)
|
||||
assert.NoError(t, err)
|
||||
result, _, err := GetForToken(testDocumentJSON, "obj")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, result, TestNodeObjNBItems)
|
||||
|
||||
result, _, err = GetForToken(testStructJSONDoc, "Obj")
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, result)
|
||||
|
||||
result, _, err = GetForToken(testStructJSONDoc, "Obj2")
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, result)
|
||||
}
|
||||
|
||||
type pointableImpl struct {
|
||||
a string
|
||||
}
|
||||
|
||||
func (p pointableImpl) JSONLookup(token string) (interface{}, error) {
|
||||
if token == "some" {
|
||||
return p.a, nil
|
||||
}
|
||||
return nil, fmt.Errorf("object has no field %q", token)
|
||||
}
|
||||
|
||||
func TestPointableInterface(t *testing.T) {
|
||||
p := &pointableImpl{"hello"}
|
||||
|
||||
result, _, err := GetForToken(p, "some")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, p.a, result)
|
||||
|
||||
result, _, err = GetForToken(p, "something")
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, result)
|
||||
}
|
||||
|
||||
func TestGetNode(t *testing.T) {
|
||||
|
||||
in := `/obj`
|
||||
|
||||
p, err := New(in)
|
||||
assert.NoError(t, err)
|
||||
result, _, err := p.Get(testDocumentJSON)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, result, TestNodeObjNBItems)
|
||||
|
||||
result, _, err = p.Get(aliasedMap(testDocumentJSON.(map[string]interface{})))
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, result, TestNodeObjNBItems)
|
||||
|
||||
result, _, err = p.Get(testStructJSONDoc)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testStructJSONDoc.Obj, result)
|
||||
|
||||
result, _, err = p.Get(testStructJSONPtr)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testStructJSONDoc.Obj, result)
|
||||
}
|
||||
|
||||
func TestArray(t *testing.T) {
|
||||
|
||||
ins := []string{`/foo/0`, `/foo/0`, `/foo/1`}
|
||||
outs := []string{"bar", "bar", "baz"}
|
||||
|
||||
for i := range ins {
|
||||
p, err := New(ins[i])
|
||||
assert.NoError(t, err)
|
||||
|
||||
result, _, err := p.Get(testStructJSONDoc)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, outs[i], result)
|
||||
|
||||
result, _, err = p.Get(testStructJSONPtr)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, outs[i], result)
|
||||
|
||||
result, _, err = p.Get(testDocumentJSON)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, outs[i], result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOtherThings(t *testing.T) {
|
||||
_, err := New("abc")
|
||||
assert.Error(t, err)
|
||||
|
||||
p, err := New("")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "", p.String())
|
||||
|
||||
p, err = New("/obj/a")
|
||||
assert.Equal(t, "/obj/a", p.String())
|
||||
|
||||
s := Escape("m~n")
|
||||
assert.Equal(t, "m~0n", s)
|
||||
s = Escape("m/n")
|
||||
assert.Equal(t, "m~1n", s)
|
||||
|
||||
p, err = New("/foo/3")
|
||||
assert.NoError(t, err)
|
||||
_, _, err = p.Get(testDocumentJSON)
|
||||
assert.Error(t, err)
|
||||
|
||||
p, err = New("/foo/a")
|
||||
assert.NoError(t, err)
|
||||
_, _, err = p.Get(testDocumentJSON)
|
||||
assert.Error(t, err)
|
||||
|
||||
p, err = New("/notthere")
|
||||
assert.NoError(t, err)
|
||||
_, _, err = p.Get(testDocumentJSON)
|
||||
assert.Error(t, err)
|
||||
|
||||
p, err = New("/invalid")
|
||||
assert.NoError(t, err)
|
||||
_, _, err = p.Get(1234)
|
||||
assert.Error(t, err)
|
||||
|
||||
p, err = New("/foo/1")
|
||||
assert.NoError(t, err)
|
||||
expected := "hello"
|
||||
bbb := testDocumentJSON.(map[string]interface{})["foo"]
|
||||
bbb.([]interface{})[1] = "hello"
|
||||
|
||||
v, _, err := p.Get(testDocumentJSON)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, expected, v)
|
||||
|
||||
esc := Escape("a/")
|
||||
assert.Equal(t, "a~1", esc)
|
||||
unesc := Unescape(esc)
|
||||
assert.Equal(t, "a/", unesc)
|
||||
|
||||
unesc = Unescape("~01")
|
||||
assert.Equal(t, "~1", unesc)
|
||||
assert.Equal(t, "~0~1", Escape("~/"))
|
||||
assert.Equal(t, "~/", Unescape("~0~1"))
|
||||
}
|
||||
|
||||
func TestObject(t *testing.T) {
|
||||
|
||||
ins := []string{`/obj/a`, `/obj/b`, `/obj/c/0`, `/obj/c/1`, `/obj/c/1`, `/obj/d/1/f/0`}
|
||||
outs := []float64{1, 2, 3, 4, 4, 50}
|
||||
|
||||
for i := range ins {
|
||||
|
||||
p, err := New(ins[i])
|
||||
assert.NoError(t, err)
|
||||
|
||||
result, _, err := p.Get(testDocumentJSON)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, outs[i], result)
|
||||
|
||||
result, _, err = p.Get(testStructJSONDoc)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, outs[i], result)
|
||||
|
||||
result, _, err = p.Get(testStructJSONPtr)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, outs[i], result)
|
||||
}
|
||||
}
|
||||
|
||||
type setJsonDocEle struct {
|
||||
B int `json:"b"`
|
||||
C int `json:"c"`
|
||||
}
|
||||
type setJsonDoc struct {
|
||||
A []struct {
|
||||
B int `json:"b"`
|
||||
C int `json:"c"`
|
||||
} `json:"a"`
|
||||
D int `json:"d"`
|
||||
}
|
||||
|
||||
type settableDoc struct {
|
||||
Coll settableColl
|
||||
Int settableInt
|
||||
}
|
||||
|
||||
func (s settableDoc) MarshalJSON() ([]byte, error) {
|
||||
var res struct {
|
||||
A settableColl `json:"a"`
|
||||
D settableInt `json:"d"`
|
||||
}
|
||||
res.A = s.Coll
|
||||
res.D = s.Int
|
||||
return json.Marshal(res)
|
||||
}
|
||||
func (s *settableDoc) UnmarshalJSON(data []byte) error {
|
||||
var res struct {
|
||||
A settableColl `json:"a"`
|
||||
D settableInt `json:"d"`
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(data, &res); err != nil {
|
||||
return err
|
||||
}
|
||||
s.Coll = res.A
|
||||
s.Int = res.D
|
||||
return nil
|
||||
}
|
||||
|
||||
// JSONLookup implements an interface to customize json pointer lookup
|
||||
func (s settableDoc) JSONLookup(token string) (interface{}, error) {
|
||||
switch token {
|
||||
case "a":
|
||||
return &s.Coll, nil
|
||||
case "d":
|
||||
return &s.Int, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("%s is not a known field", token)
|
||||
}
|
||||
}
|
||||
|
||||
// JSONLookup implements an interface to customize json pointer lookup
|
||||
func (s *settableDoc) JSONSet(token string, data interface{}) error {
|
||||
switch token {
|
||||
case "a":
|
||||
switch dt := data.(type) {
|
||||
case settableColl:
|
||||
s.Coll = dt
|
||||
return nil
|
||||
case *settableColl:
|
||||
if dt != nil {
|
||||
s.Coll = *dt
|
||||
} else {
|
||||
s.Coll = settableColl{}
|
||||
}
|
||||
return nil
|
||||
case []settableCollItem:
|
||||
s.Coll.Items = dt
|
||||
return nil
|
||||
}
|
||||
case "d":
|
||||
switch dt := data.(type) {
|
||||
case settableInt:
|
||||
s.Int = dt
|
||||
return nil
|
||||
case int:
|
||||
s.Int.Value = dt
|
||||
return nil
|
||||
case int8:
|
||||
s.Int.Value = int(dt)
|
||||
return nil
|
||||
case int16:
|
||||
s.Int.Value = int(dt)
|
||||
return nil
|
||||
case int32:
|
||||
s.Int.Value = int(dt)
|
||||
return nil
|
||||
case int64:
|
||||
s.Int.Value = int(dt)
|
||||
return nil
|
||||
default:
|
||||
return fmt.Errorf("invalid type %T for %s", data, token)
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("%s is not a known field", token)
|
||||
}
|
||||
|
||||
type settableColl struct {
|
||||
Items []settableCollItem
|
||||
}
|
||||
|
||||
func (s settableColl) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(s.Items)
|
||||
}
|
||||
func (s *settableColl) UnmarshalJSON(data []byte) error {
|
||||
return json.Unmarshal(data, &s.Items)
|
||||
}
|
||||
|
||||
// JSONLookup implements an interface to customize json pointer lookup
|
||||
func (s settableColl) JSONLookup(token string) (interface{}, error) {
|
||||
if tok, err := strconv.Atoi(token); err == nil {
|
||||
return &s.Items[tok], nil
|
||||
}
|
||||
return nil, fmt.Errorf("%s is not a valid index", token)
|
||||
}
|
||||
|
||||
// JSONLookup implements an interface to customize json pointer lookup
|
||||
func (s *settableColl) JSONSet(token string, data interface{}) error {
|
||||
if _, err := strconv.Atoi(token); err == nil {
|
||||
_, err := SetForToken(s.Items, token, data)
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("%s is not a valid index", token)
|
||||
}
|
||||
|
||||
type settableCollItem struct {
|
||||
B int `json:"b"`
|
||||
C int `json:"c"`
|
||||
}
|
||||
|
||||
type settableInt struct {
|
||||
Value int
|
||||
}
|
||||
|
||||
func (s settableInt) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(s.Value)
|
||||
}
|
||||
func (s *settableInt) UnmarshalJSON(data []byte) error {
|
||||
return json.Unmarshal(data, &s.Value)
|
||||
}
|
||||
|
||||
func TestSetNode(t *testing.T) {
|
||||
|
||||
jsonText := `{"a":[{"b": 1, "c": 2}], "d": 3}`
|
||||
|
||||
var jsonDocument interface{}
|
||||
if assert.NoError(t, json.Unmarshal([]byte(jsonText), &jsonDocument)) {
|
||||
in := "/a/0/c"
|
||||
p, err := New(in)
|
||||
if assert.NoError(t, err) {
|
||||
|
||||
_, err = p.Set(jsonDocument, 999)
|
||||
assert.NoError(t, err)
|
||||
|
||||
firstNode := jsonDocument.(map[string]interface{})
|
||||
assert.Len(t, firstNode, 2)
|
||||
|
||||
sliceNode := firstNode["a"].([]interface{})
|
||||
assert.Len(t, sliceNode, 1)
|
||||
|
||||
changedNode := sliceNode[0].(map[string]interface{})
|
||||
chNodeVI := changedNode["c"]
|
||||
if assert.IsType(t, 0, chNodeVI) {
|
||||
changedNodeValue := chNodeVI.(int)
|
||||
if assert.Equal(t, 999, changedNodeValue) {
|
||||
assert.Len(t, sliceNode, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
v, err := New("/a/0")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = v.Set(jsonDocument, map[string]interface{}{"b": 3, "c": 8})
|
||||
if assert.NoError(t, err) {
|
||||
firstNode := jsonDocument.(map[string]interface{})
|
||||
assert.Len(t, firstNode, 2)
|
||||
|
||||
sliceNode := firstNode["a"].([]interface{})
|
||||
assert.Len(t, sliceNode, 1)
|
||||
changedNode := sliceNode[0].(map[string]interface{})
|
||||
assert.Equal(t, 3, changedNode["b"])
|
||||
assert.Equal(t, 8, changedNode["c"])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var structDoc setJsonDoc
|
||||
if assert.NoError(t, json.Unmarshal([]byte(jsonText), &structDoc)) {
|
||||
g, err := New("/a")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = g.Set(&structDoc, []struct {
|
||||
B int `json:"b"`
|
||||
C int `json:"c"`
|
||||
}{{B: 4, C: 7}})
|
||||
|
||||
if assert.NoError(t, err) {
|
||||
assert.Len(t, structDoc.A, 1)
|
||||
changedNode := structDoc.A[0]
|
||||
assert.Equal(t, 4, changedNode.B)
|
||||
assert.Equal(t, 7, changedNode.C)
|
||||
}
|
||||
}
|
||||
|
||||
v, err := New("/a/0")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = v.Set(structDoc, struct {
|
||||
B int `json:"b"`
|
||||
C int `json:"c"`
|
||||
}{B: 3, C: 8})
|
||||
|
||||
if assert.NoError(t, err) {
|
||||
assert.Len(t, structDoc.A, 1)
|
||||
changedNode := structDoc.A[0]
|
||||
assert.Equal(t, 3, changedNode.B)
|
||||
assert.Equal(t, 8, changedNode.C)
|
||||
}
|
||||
}
|
||||
|
||||
p, err := New("/a/0/c")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = p.Set(&structDoc, 999)
|
||||
assert.NoError(t, err)
|
||||
if assert.Len(t, structDoc.A, 1) {
|
||||
assert.Equal(t, 999, structDoc.A[0].C)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var setDoc settableDoc
|
||||
if assert.NoError(t, json.Unmarshal([]byte(jsonText), &setDoc)) {
|
||||
g, err := New("/a")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = g.Set(&setDoc, []settableCollItem{{B: 4, C: 7}})
|
||||
|
||||
if assert.NoError(t, err) {
|
||||
assert.Len(t, setDoc.Coll.Items, 1)
|
||||
changedNode := setDoc.Coll.Items[0]
|
||||
assert.Equal(t, 4, changedNode.B)
|
||||
assert.Equal(t, 7, changedNode.C)
|
||||
}
|
||||
}
|
||||
|
||||
v, err := New("/a/0")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = v.Set(setDoc, settableCollItem{B: 3, C: 8})
|
||||
|
||||
if assert.NoError(t, err) {
|
||||
assert.Len(t, setDoc.Coll.Items, 1)
|
||||
changedNode := setDoc.Coll.Items[0]
|
||||
assert.Equal(t, 3, changedNode.B)
|
||||
assert.Equal(t, 8, changedNode.C)
|
||||
}
|
||||
}
|
||||
|
||||
p, err := New("/a/0/c")
|
||||
if assert.NoError(t, err) {
|
||||
_, err = p.Set(setDoc, 999)
|
||||
assert.NoError(t, err)
|
||||
if assert.Len(t, setDoc.Coll.Items, 1) {
|
||||
assert.Equal(t, 999, setDoc.Coll.Items[0].C)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue