@@ -42,7 +42,7 @@ namespace tao
4242 TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " remove" }, { " path" , " /a" } } } ) ) == eo );
4343 TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " remove" }, { " path" , " /a/foo" } } } ) ) == value ( { { " a" , empty_object } } ) );
4444 TEST_THROWS ( patch ( a, value::array ( { { { " op" , " remove" }, { " path" , " /q" } } } ) ) );
45- TEST_THROWS ( patch ( a, value::array ( { { { " op" , " remove" }, { " path" , " " } } } ) ) ); // TODO: clarify correctness
45+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " remove" }, { " path" , " " } } } ) ) );
4646 TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " remove" }, { " path" , " /b" } } } ) ) == empty_object );
4747 TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " remove" }, { " path" , " /b" } } } ) ) == eo );
4848 TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " remove" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { 2 , 3 , 4 } ) } } ) );
@@ -67,7 +67,45 @@ namespace tao
6767 TEST_THROWS ( patch ( b, value::array ( { { { " op" , " add" }, { " path" , " /b/a" }, { " value" , 42 } } } ) ) );
6868 TEST_THROWS ( patch ( q, value::array ( { { { " op" , " add" }, { " path" , " /a/b" }, { " value" , 42 } } } ) ) );
6969
70- // TODO: Way more tests...
70+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " replace" }, { " path" , " " }, { " value" , 42 } } } ) ) == 42 );
71+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " replace" }, { " path" , " /a" }, { " value" , 42 } } } ) ) == value ( { { " a" , 42 } } ) );
72+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " replace" }, { " path" , " /a/foo" }, { " value" , 42 } } } ) ) == value ( { { " a" , { { " foo" , 42 } } } } ) );
73+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " replace" }, { " path" , " /b" }, { " value" , 42 } } } ) ) );
74+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " replace" }, { " path" , " /a/b" }, { " value" , 42 } } } ) ) );
75+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/0" }, { " value" , 42 } } } ) ) == value ( { { " b" , value::array ( { 42 , 2 , 3 , 4 } ) } } ) );
76+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/1" }, { " value" , 42 } } } ) ) == value ( { { " b" , value::array ( { 1 , 42 , 3 , 4 } ) } } ) );
77+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/2" }, { " value" , 42 } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 42 , 4 } ) } } ) );
78+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/3" }, { " value" , 42 } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 42 } ) } } ) );
79+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/4" }, { " value" , 42 } } } ) ) );
80+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/-" }, { " value" , 42 } } } ) ) );
81+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " replace" }, { " path" , " /b/a" }, { " value" , 42 } } } ) ) );
82+ TEST_THROWS ( patch ( q, value::array ( { { { " op" , " replace" }, { " path" , " /a/foo" }, { " value" , 42 } } } ) ) );
83+
84+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " " }, { " path" , " " } } } ) ) );
85+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a" }, { " path" , " " } } } ) ) );
86+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a" }, { " path" , " /a" } } } ) ) == a );
87+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a/foo" }, { " path" , " /a/foo" } } } ) ) == a );
88+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a" }, { " path" , " /b" } } } ) ) == value ( { { " b" , { { " foo" , 1 } } } } ) );
89+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a/foo" }, { " path" , " /b" } } } ) ) == value ( { { " a" , empty_object }, { " b" , 1 } } ) );
90+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a/foo" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 1 } } ) );
91+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /a" }, { " path" , " /a/foo" } } } ) ) );
92+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " move" }, { " from" , " /b" }, { " path" , " /a" } } } ) ) );
93+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/0" }, { " path" , " /b/0" } } } ) ) == b );
94+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/0" }, { " path" , " /b/1" } } } ) ) == value ( { { " b" , value::array ( { 2 , 1 , 3 , 4 } ) } } ) );
95+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/1" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { 2 , 1 , 3 , 4 } ) } } ) );
96+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/0" }, { " path" , " /b/2" } } } ) ) == value ( { { " b" , value::array ( { 2 , 3 , 1 , 4 } ) } } ) );
97+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/2" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { 3 , 1 , 2 , 4 } ) } } ) );
98+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/0" }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 2 , 3 , 4 , 1 } ) } } ) );
99+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/2" }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 4 , 3 } ) } } ) );
100+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/3" }, { " path" , " /b/-" } } } ) ) == b );
101+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/4" }, { " path" , " /b/-" } } } ) ) );
102+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/-" }, { " path" , " /b/-" } } } ) ) );
103+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/0" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 1 }, { " b" , value::array ( { 2 , 3 , 4 } ) } } ) );
104+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/2" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 3 }, { " b" , value::array ( { 1 , 2 , 4 } ) } } ) );
105+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/3" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 4 }, { " b" , value::array ( { 1 , 2 , 3 } ) } } ) );
106+
107+ // TODO: copy
108+
71109 }
72110
73111 } // json
0 commit comments