1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
use strict;
use warnings;
use Test::More;
use JSON;
use JSON::Pointer;
my $json = JSON->new->allow_nonref;
sub test_move {
my ($desc, %specs) = @_;
my ($input, $expect) = @specs{qw/input expect/};
subtest $desc => sub {
my ($document, $from_pointer, $to_pointer) = @$input{qw/document from path/};
my $patched_document = JSON::Pointer->move($document, $from_pointer, $to_pointer);
is_deeply(
$patched_document,
$expect->{patched},
sprintf(
"copied document (actual: %s. expected: %s)",
$json->encode($patched_document),
$json->encode($expect->{patched}),
)
);
};
}
subtest "JSON Patch Appendix A. Example" => sub {
test_move "A.6. Moving a Value" => (
input => +{
document => +{
"foo" => +{
"bar" => "baz",
"waldo" => "fred",
},
"qux" => +{
"corge" => "grault"
}
},
from => "/foo/waldo",
path => "/qux/thud",
},
expect => +{
patched => +{
"foo" => +{
"bar" => "baz",
},
"qux" => +{
"corge" => "grault",
"thud" => "fred",
}
},
},
);
test_move "A.6. Moving a Value" => (
input => +{
document => +{
"foo" => [
"all", "grass", "cows", "eat"
],
},
from => "/foo/1",
path => "/foo/3",
},
expect => +{
patched => +{
"foo" => ["all", "cows", "eat", "grass"],
},
},
);
};
subtest "https://github.com/json-patch/json-patch-tests/blob/master/tests.json" => sub {
test_move "Move to same location has no effect" => (
input => +{
document => +{
foo => 1,
},
from => "/foo",
path => "/foo",
},
expect => +{
patched => +{
foo => 1,
},
},
);
test_move "Move to new object field" => (
input => +{
document => +{
foo => 1,
baz => [ +{ qux => "hello", } ],
},
from => "/foo",
path => "/bar",
},
expect => +{
patched => +{
bar => 1,
baz => [ +{ qux => "hello", } ],
},
},
);
test_move "Move to new array element" => (
input => +{
document => +{
bar => 1,
baz => [ +{ qux => "hello", } ],
},
from => "/baz/0/qux",
path => "/baz/1",
},
expect => +{
patched => +{
bar => 1,
baz => [ +{}, "hello", ],
},
},
);
};
done_testing;
|