@@ -104,8 +104,36 @@ namespace tao
104104 TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/2" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 3 }, { " b" , value::array ( { 1 , 2 , 4 } ) } } ) );
105105 TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " move" }, { " from" , " /b/3" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 4 }, { " b" , value::array ( { 1 , 2 , 3 } ) } } ) );
106106
107- // TODO: copy
108-
107+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " " }, { " path" , " " } } } ) ) );
108+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a" }, { " path" , " " } } } ) ) );
109+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a" }, { " path" , " /a" } } } ) ) == a );
110+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a/foo" }, { " path" , " /a/foo" } } } ) ) == a );
111+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a" }, { " path" , " /b" } } } ) ) == value ( { { " a" , { { " foo" , 1 } } }, { " b" , { { " foo" , 1 } } } } ) );
112+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a/foo" }, { " path" , " /b" } } } ) ) == value ( { { " a" , { { " foo" , 1 } } }, { " b" , 1 } } ) );
113+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a/foo" }, { " path" , " /a" } } } ) ) == value ( { { " a" , 1 } } ) );
114+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a" }, { " path" , " /a/foo" } } } ) ) == value ( { { " a" , { { " foo" , { { " foo" , 1 } } } } } } ) );
115+ TEST_ASSERT ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /a" }, { " path" , " /a/bar" } } } ) ) == value ( { { " a" , { { " foo" , 1 }, { " bar" , { { " foo" , 1 } } } } } } ) );
116+ TEST_THROWS ( patch ( a, value::array ( { { { " op" , " copy" }, { " from" , " /b" }, { " path" , " /a" } } } ) ) );
117+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { 1 , 1 , 2 , 3 , 4 } ) } } ) );
118+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/1" } } } ) ) == value ( { { " b" , value::array ( { 1 , 1 , 2 , 3 , 4 } ) } } ) );
119+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/2" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 1 , 3 , 4 } ) } } ) );
120+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/3" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 1 , 4 } ) } } ) );
121+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/4" } } } ) ) );
122+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/0" }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 4 , 1 } ) } } ) );
123+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { 3 , 1 , 2 , 3 , 4 } ) } } ) );
124+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/1" } } } ) ) == value ( { { " b" , value::array ( { 1 , 3 , 2 , 3 , 4 } ) } } ) );
125+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/2" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 3 , 4 } ) } } ) );
126+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/3" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 3 , 4 } ) } } ) );
127+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/4" } } } ) ) );
128+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/2" }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 4 , 3 } ) } } ) );
129+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/4" }, { " path" , " /b/-" } } } ) ) );
130+ TEST_THROWS ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b/-" }, { " path" , " /b/-" } } } ) ) );
131+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b" }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { value::array ( { 1 , 2 , 3 , 4 } ), 1 , 2 , 3 , 4 } ) } } ) );
132+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b" }, { " path" , " /b/2" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , value::array ( { 1 , 2 , 3 , 4 } ), 3 , 4 } ) } } ) );
133+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " /b" }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 4 , value::array ( { 1 , 2 , 3 , 4 } ) } ) } } ) );
134+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " " }, { " path" , " /b/0" } } } ) ) == value ( { { " b" , value::array ( { { { " b" , value::array ( { 1 , 2 , 3 , 4 } ) } }, 1 , 2 , 3 , 4 } ) } } ) );
135+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " " }, { " path" , " /b/2" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , { { " b" , value::array ( { 1 , 2 , 3 , 4 } ) } }, 3 , 4 } ) } } ) );
136+ TEST_ASSERT ( patch ( b, value::array ( { { { " op" , " copy" }, { " from" , " " }, { " path" , " /b/-" } } } ) ) == value ( { { " b" , value::array ( { 1 , 2 , 3 , 4 , { { " b" , value::array ( { 1 , 2 , 3 , 4 } ) } } } ) } } ) );
109137 }
110138
111139 } // json
0 commit comments