Build Logs
gnieh/diffson • 3.8.0-RC5:2025-12-31
Errors
0
Warnings
72
Total Lines
1636
1##################################
2Clonning https://github.com/gnieh/diffson.git into /build/repo using revision v4.6.1
3##################################
4Note: switching to '1fd65da148b9d49bbed1af4df2803b3e93c6498e'.
5
6You are in 'detached HEAD' state. You can look around, make experimental
7changes and commit them, and you can discard any commits you make in this
8state without impacting any branches by switching back to a branch.
9
10If you want to create a new branch to retain commits you create, you may
11do so (now or later) by using -c with the switch command. Example:
12
13 git switch -c <new-branch-name>
14
15Or undo this operation with:
16
17 git switch -
18
19Turn off this advice by setting config variable advice.detachedHead to false
20
21Would override fixed Scala version: 3.3.3
22----
23Preparing build for 3.8.0-RC5
24Scala binary version found: 3.8
25Implicitly using source version 3.8
26Scala binary version found: 3.8
27Implicitly using source version 3.8
28Would try to apply common scalacOption (best-effort, sbt/mill only):
29Append: ,REQUIRE:-source:3.8
30Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
31
32Try apply source patch:
33Path: build.sbt
34Pattern: val scala3 = "3.3.3"
35Replacement: val scala3 = "3.8.0-RC5"
36Starting compilation server
37Compiling project (Scala 3.7.3, JVM (17))
38Compiled project (Scala 3.7.3, JVM (17))
39Successfully applied pattern 'val scala3 = "3.3.3"' in build.sbt
40----
41Starting build for 3.8.0-RC5
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0-RC5
47Targets: org.gnieh%diffson-circe org.gnieh%diffson-core org.gnieh%diffson-play-json org.gnieh%diffson-spray-json org.gnieh%diffson-testkit org.gnieh%diffson-ujson
48Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.3\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
49##################################
50Using extra scalacOptions: ,REQUIRE:-source:3.8
51Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
52[sbt_options] declare -a sbt_options=()
53[process_args] java_version = '17'
54[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
55# Executing command line:
56java
57-Dfile.encoding=UTF-8
58-Xms2g
59-Xmx4g
60-XX:MaxMetaspaceSize=512m
61-Dcommunitybuild.scala=3.8.0-RC5
62-Dcommunitybuild.project.dependencies.add=
63-Xmx7G
64-Xms4G
65-Xss8M
66-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
67-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
68-jar
69/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
70"setCrossScalaVersions 3.8.0-RC5"
71"++3.8.0-RC5 -v"
72"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
73"set every credentials := Nil"
74"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
75"removeScalacOptionsStartingWith -P:wartremover"
76
77moduleMappings
78"runBuild 3.8.0-RC5 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.3\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}""" org.gnieh%diffson-circe org.gnieh%diffson-core org.gnieh%diffson-play-json org.gnieh%diffson-spray-json org.gnieh%diffson-testkit org.gnieh%diffson-ujson"
79
80[info] [launcher] getting org.scala-sbt sbt 1.11.6 (this may take some time)...
81[info] welcome to sbt 1.11.6 (Eclipse Adoptium Java 17.0.8)
82[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
83[info] loading project definition from /build/repo/project
84[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
85[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
86[info] Compilation completed in 9.498s.
87[info] done compiling
88[info] loading settings for project diffson from build.sbt...
89[info] resolving key references (22351 settings) ...
90[info] set scmInfo to https://github.com/gnieh/diffson
91[info] set current project to diffson (in build file:/build/repo/)
92Execute setCrossScalaVersions: 3.8.0-RC5
93OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in benchmarksJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in diffsonJS/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in playJsonJVM/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in ujsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in circeJS/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in circeNative/crossScalaVersions
102OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in diffsonJVM/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in ujsonNative/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in playJsonNative/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in diffsonNative/crossScalaVersions
106[info] set scmInfo to https://github.com/gnieh/diffson
107OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in testkitJVM/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in ujsonJS/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in sprayJsonJVM/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in coreNative/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in circeJVM/crossScalaVersions
112OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0-RC5 -> 3.8.0-RC5 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0-RC5 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0-RC5)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0-RC5)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0-RC5)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0-RC5)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0-RC5)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0-RC5)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0-RC5)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0-RC5)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0-RC5)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0-RC5)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0-RC5)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0-RC5)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0-RC5)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0-RC5)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0-RC5)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0-RC5)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0-RC5)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0-RC5)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0-RC5)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0-RC5)
138[info] Excluding projects:
139[info] * diffson (2.13.13)
140[info] Reapplying settings...
141[info] set scmInfo to https://github.com/gnieh/diffson
142[info] set current project to diffson (in build file:/build/repo/)
143Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
144[info] Reapplying settings...
145[info] set scmInfo to https://github.com/gnieh/diffson
146[info] set current project to diffson (in build file:/build/repo/)
147[info] Defining Global / credentials, benchmarksJVM / credentials and 19 others.
148[info] The new values will be used by Compile / scalafmtOnly, IntegrationTest / scalafmtOnly and 186 others.
149[info] Run `last` for details.
150[info] Reapplying settings...
151[info] set scmInfo to https://github.com/gnieh/diffson
152[info] set current project to diffson (in build file:/build/repo/)
153Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
154[info] Reapplying settings...
155OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
156
157 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
158 Did you mean circeNative / allExcludeDependencies ?
159 , retry without global scopes
160[info] Reapplying settings...
161[info] set scmInfo to https://github.com/gnieh/diffson
162[info] set current project to diffson (in build file:/build/repo/)
163Execute removeScalacOptionsStartingWith: -P:wartremover
164[info] Reapplying settings...
165[info] set scmInfo to https://github.com/gnieh/diffson
166[info] set current project to diffson (in build file:/build/repo/)
167[success] Total time: 0 s, completed Dec 31, 2025, 9:04:16 PM
168Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.3\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
169Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
170Starting build...
171Projects: Set(ujsonJVM, circeJVM, playJsonJVM, coreJVM, testkitJVM, sprayJsonJVM)
172Starting build for ProjectRef(file:/build/repo/,testkitJVM) (diffson-testkit)... [0/6]
173OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
174OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
175OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
176Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
177[info] compiling 16 Scala sources to /build/repo/core/.jvm/target/scala-3.8.0-RC5/classes ...
178[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/main/scala/diffson/jsonmergepatch/package.scala:25:6
179[warn] 25 | Json: Jsony[Json]): Patch[F, Json, JsonMergePatch[Json]] =
180[warn] | ^^^^
181[warn] | unused implicit parameter
182[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/main/scala/diffson/jsonpatch/JsonPatch.scala:190:32
183[warn] 190 |case class JsonPatch[Json: Jsony](ops: List[Operation[Json]]) {
184[warn] | ^
185[warn] | unused implicit parameter
186[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/main/scala/diffson/jsonpatch/JsonPatch.scala:199:6
187[warn] 199 | Json: Jsony[Json]): Patch[F, Json, JsonPatch[Json]] =
188[warn] | ^^^^
189[warn] | unused implicit parameter
190[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/main/scala/diffson/jsonpointer/package.scala:25:31
191[warn] 25 |import scala.collection.compat._
192[warn] | ^
193[warn] | unused import
194[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/main/scala/diffson/lcs/Patience.scala:24:31
195[warn] 24 |import scala.collection.compat._
196[warn] | ^
197[warn] | unused import
198[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/core/src/main/scala/diffson/jsonpatch/JsonPatch.scala:36:46
199[warn] 36 | F: MonadError[F, Throwable]): F[Json] = (value, pointer) match {
200[warn] | ^^^^^^^^^^^^^^^^
201[warn] | match may not be exhaustive.
202[warn] |
203[warn] | It would fail on pattern case: (_, _)
204[warn] |
205[warn] | longer explanation available when compiling with `-explain`
206[warn] -- [E029] Pattern Match Exhaustivity Warning: /build/repo/core/src/main/scala/diffson/jsonpointer/package.scala:41:8
207[warn] 41 | case (JsObject(obj), Inner(Left(elem), tl), parent) =>
208[warn] | ^
209[warn] | match may not be exhaustive.
210[warn] |
211[warn] | It would fail on pattern case: (_, _, _)
212[warn] |
213[warn] | longer explanation available when compiling with `-explain`
214[warn] 7 warnings found
215[info] done compiling
216[info] compiling 11 Scala sources to /build/repo/testkit/jvm/target/scala-3.8.0-RC5/classes ...
217[warn] -- [E198] Unused Symbol Warning: /build/repo/testkit/jvm/src/main/scala/diffson/conformance/TestRfcConformance.scala:29:45
218[warn] 29 |abstract class TestRfcConformance[Json: Jsony] extends AnyFunSuite with Matchers {
219[warn] | ^
220[warn] | unused implicit parameter
221[warn] -- [E198] Unused Symbol Warning: /build/repo/testkit/shared/src/main/scala/diffson/TestJsonMergeDiff.scala:20:12
222[warn] 20 |import cats._
223[warn] | ^
224[warn] | unused import
225[warn] -- [E198] Unused Symbol Warning: /build/repo/testkit/shared/src/main/scala/diffson/TestJsonMergePatch.scala:28:49
226[warn] 28 |abstract class TestJsonMergePatch[Json](implicit Json: Jsony[Json])
227[warn] | ^^^^
228[warn] | unused implicit parameter
229[warn] -- [E198] Unused Symbol Warning: /build/repo/testkit/shared/src/main/scala/diffson/TestJsonPatch.scala:20:19
230[warn] 20 |import jsonpointer._
231[warn] | ^
232[warn] | unused import
233[warn] four warnings found
234[info] done compiling
235Starting build for ProjectRef(file:/build/repo/,sprayJsonJVM) (diffson-spray-json)... [1/6]
236Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
237[info] compiling 2 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC5/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC5/test-classes ...
240[info] done compiling
241[info] SprayJsonJsonMergeDiff:
242[info] a diff
243[info] - should be empty if created between two equal objects
244[info] - should be a simple replacement if the two values are completely different
245[info] - should be generated correctly for nested structures
246[info] SprayJsonSimpleDiff:
247[info] a diff
248[info] - should be empty if created between two equal values
249[info] - should be a simple replacement if the two values are completely different
250[info] - should conta be be bein an add operation for each added field
251[info] - should contain a remove operation for each removed field
252[info] - should correctly handle array diffs in objects (i.e. just replaced)
253[info] - should contain a replace operation for each changed field value
254[info] - should contain a replaced operation for the changed array (additions)
255[info] - should contain a replaced operation for the changed array (deletions)
256[info] - should contain a replace operation for the entire array if at least one element in it changed
257[info] applying a diff
258[info] - should be a fix point when applied to the first object used for the diff
259[info] applying a diff to strings
260[info] - should provide a correct string representation
261[info] - should correctly add removed values in object diffs
262[info] - should correctly add replaced values in object diffs
263[info] a remembering diff
264[info] - should remember old values
265[info] SprayJsonJsonDiff:
266[info] a diff
267[info] - should be empty if created between two equal values
268[info] - should be a simple replacement if the two values are completely different
269[info] - should contain an add operation for each added field
270[info] - should contain a remove operation for each removed field
271[info] - should correctly handle array diffs in objects
272[info] - should contain a replace operation for each changed field value
273[info] - should contain an add operation for each added element
274[info] - should contain a remove operation for each deleted element
275[info] - should contain a replace operation for each value that changed
276[info] applying a diff
277[info] - should be a fix point when applied to the first object used for the diff
278[info] applying a diff to strings
279[info] - should provide a correct string representation
280[info] a remembering diff
281[info] - should correctly add removed values in array diffs
282[info] - should correctly add removed values in object diffs
283[info] - should correctly add replaced values in object diffs
284[info] SprayJsonTestSerialization:
285[info] a patch json
286[info] - should be correctly deserialized from a Json object
287[info] a patch object
288[info] - should be correctly serialized to a Json object
289[info] a merge patch
290[info] - should be correctly deserialized from a Json object
291[info] - should be correctly deserialized from a non-object Json value
292[info] a merge patch object
293[info] - should be correctly serialized
294[info] a non-object patch
295[info] - should be correctly serialized
296[info] SprayJsonTestJsonMergePatch:
297[info] patching {"a":"b"} with {"a":"c"}
298[info] - should result in {"a":"c"}
299[info] patching {"a":"b"} with {"b":"c"}
300[info] - should result in {"a":"b","b":"c"}
301[info] patching {"a":"b"} with {"a":null}
302[info] - should result in {}
303[info] patching {"a":"b","b":"c"} with {"a":null}
304[info] - should result in {"b":"c"}
305[info] patching {"a":["b"]} with {"a":"c"}
306[info] - should result in {"a":"c"}
307[info] patching {"a":"c"} with {"a":["b"]}
308[info] - should result in {"a":["b"]}
309[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
310[info] - should result in {"a": {"b": "d"}}
311[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
312[info] - should result in {"a": [1]}
313[info] patching ["a","b"] with ["c","d"]
314[info] - should result in ["c","d"]
315[info] patching {"a":"b"} with ["c"]
316[info] - should result in ["c"]
317[info] patching {"a":"foo"} with null
318[info] - should result in null
319[info] patching {"a":"foo"} with "bar"
320[info] - should result in "bar"
321[info] patching {"e":null} with {"a":1}
322[info] - should result in {"e":null,"a":1}
323[info] patching [1,2] with {"a":"b","c":null}
324[info] - should result in {"a":"b"}
325[info] patching {} with {"a":{"bb":{"ccc": null}}}
326[info] - should result in {"a":{"bb":{}}}
327[info] SprayJsonTestJsonPatch:
328[info] applying an 'add' operation
329[info] - should add the field to the object if it does not exist
330[info] - should add a value with an empty string as the key
331[info] - should replace the value if the pointer is the root
332[info] - should replace the field value if it does exist
333[info] - should add an element to the array at the given index
334[info] - should add an element at the end of the array if the last element is '-'
335[info] - should create a nested field if needed
336[info] - should throw an error if some element is missing in the middle of the path
337[info] - should throw an error if adding an element out of the array boundaries
338[info] removing a label of an object
339[info] - should result in the object being amputated from this label
340[info] removing an element of an array
341[info] - should result in the array being amputated from this element
342[info] removing the '-' element of an array
343[info] - should result in an error being thrown
344[info] removing an element out of the array boundaries
345[info] - should result in an error being thrown
346[info] removing an unknown label from an object
347[info] - should result in an error being thrown
348[info] removing the root
349[info] - should result in an error being thrown
350[info] replacing an element in an object
351[info] - should result in this element being replaced
352[info] replacing an element in an array
353[info] - should result in this element being replaced
354[info] replacing the root
355[info] - should result in the value being completely replaced
356[info] replacing a non-existing element in an object
357[info] - should result in an error being thrown
358[info] replacing the '-' element of an array
359[info] - should result in an error being thrown
360[info] replacing an element out of the array boundaries
361[info] - should result in an error being thrown
362[info] moving a value from an object to an array
363[info] - should result in the value being added to the array and removed from the object
364[info] moving a value in a sub element
365[info] - should result in an error being thrown
366[info] moving the root
367[info] - should result in an error being thrown
368[info] copying an element in an object
369[info] - should result in this element being copied in the expected path
370[info] testing an existing element of an object
371[info] - should succeed and not modify the original object
372[info] testing an existing element with a non-expected value
373[info] - should result in an error being thrown
374[info] testing a non-existing element in an object
375[info] - should result in an error being thrown
376[info] SprayJsonTestJsonPointer:
377[info] an empty string
378[info] - should be parsed as an empty pointer
379[info] the slash pointer
380[info] - should be parsed as the pointer to empty element at root
381[info] a string with a trailing forward slash
382[info] - should parse with an empty final element
383[info] a pointer string with one chunk
384[info] - should be parsed as a pointer with one element
385[info] occurrences of ~0
386[info] - should be replaced by occurrences of ~
387[info] occurrences of ~1
388[info] - should be replaced by occurrences of /
389[info] occurrences of ~
390[info] - should be directly followed by either 0 or 1
391[info] a non empty pointer
392[info] - should start with a /
393[info] a pointer to a label
394[info] - should be evaluated to the label value if it is one level deep
395[info] - should be evaluated to the end label value if it is several levels deep
396[info] - should be evaluated to nothing if the final element is unknown
397[info] - should produce an error if there is an unknown element in the middle of the pointer
398[info] a pointer to an array element
399[info] - should be evaluated to the value at the given index
400[info] - should produce an error if it is out of the array bounds
401[info] - should produce an error if it is the '-' element
402[info] a number pointer
403[info] - should be parsed as a string label if it overflows int capacity
404[info] SprayJsonConformance:
405[info] + Specification conformance tests
406[info] - 4.1. add with missing object
407[info] - A.1. Adding an Object Member
408[info] - A.2. Adding an Array Element
409[info] - A.3. Removing an Object Member
410[info] - A.4. Removing an Array Element
411[info] - A.5. Replacing a Value
412[info] - A.6. Moving a Value
413[info] - A.7. Moving an Array Element
414[info] - A.8. Testing a Value: Success
415[info] - A.9. Testing a Value: Error
416[info] - A.10. Adding a nested Member Object
417[info] - A.11. Ignoring Unrecognized Elements
418[info] - A.12. Adding to a Non-existent Target
419[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
420[info] - A.14. ~ Escape Ordering
421[info] - A.15. Comparing Strings and Numbers
422[info] - A.16. Adding an Array Value
423[info] + Misceallaneous tests
424[info] - empty list, empty docs
425[info] - empty patch list
426[info] - rearrangements OK?
427[info] - rearrangements OK? How about one level down ... array
428[info] - rearrangements OK? How about one level down...
429[info] - add replaces any existing field
430[info] - toplevel array
431[info] - toplevel array, no change
432[info] - toplevel object, numeric string
433[info] - toplevel object, integer
434[info] - Toplevel scalar values OK?
435[info] - Add, / target
436[info] - Add composite value at top level
437[info] - Add into composite value
438[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/8","value":"5"}]
439[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/-1","value":"5"}]
440[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":true}]
441[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":false}]
442[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":null}]
443[info] - 0 can be an array index or object element name
444[info] - ["foo"] patched with [{"op":"add","path":"/1","value":"bar"}]
445[info] - ["foo","sil"] patched with [{"op":"add","path":"/1","value":"bar"}]
446[info] - ["foo","sil"] patched with [{"op":"add","path":"/0","value":"bar"}]
447[info] - ["foo","sil"] patched with [{"op":"add","path":"/2","value":"bar"}]
448[info] - test against implementation-specific numeric parsing
449[info] - test with bad number should fail
450[info] - ["foo","sil"] patched with [{"op":"add","path":"/bar","value":42}]
451[info] - value in array add not flattened
452[info] - {"bar":[1,2,3,4],"foo":1} patched with [{"op":"remove","path":"/bar"}]
453[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"remove","path":"/baz/0/qux"}]
454[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"replace","path":"/foo","value":[1,2,3,4]}]
455[info] - {"baz":[{"qux":"hello"}],"foo":[1,2,3,4]} patched with [{"op":"replace","path":"/baz/0/qux","value":"world"}]
456[info] - ["foo"] patched with [{"op":"replace","path":"/0","value":"bar"}]
457[info] - [""] patched with [{"op":"replace","path":"/0","value":0}]
458[info] - [""] patched with [{"op":"replace","path":"/0","value":true}]
459[info] - [""] patched with [{"op":"replace","path":"/0","value":false}]
460[info] - [""] patched with [{"op":"replace","path":"/0","value":null}]
461[info] - value in array replace not flattened
462[info] - replace whole document
463[info] - spurious patch properties
464[info] - null value should still be valid obj property
465[info] - test should pass despite rearrangement
466[info] - test should pass despite (nested) rearrangement
467[info] - test should pass - no error
468[info] - {"foo":{"bar":[1,2,5,4]}} patched with [{"op":"test","path":"/foo","value":[1,2]}]
469[info] - Whole document
470[info] - Empty-string element
471[info] - {"":0," ":7,"a/b":1,"c%d":2,"e^f":3,"foo":["bar","baz"],"g|h":4,"i\\j":5,"k\"l":6,"m~n":8} patched with [{"op":"test","path":"/foo","value":["bar","baz"]},{"op":"test","path":"/foo/0","value":"bar"},{"op":"test","path":"/","value":0},{"op":"test","path":"/a~1b","value":1},{"op":"test","path":"/c%d","value":2},{"op":"test","path":"/e^f","value":3},{"op":"test","path":"/g|h","value":4},{"op":"test","path":"/i\\j","value":5},{"op":"test","path":"/k\"l","value":6},{"op":"test","path":"/ ","value":7},{"op":"test","path":"/m~0n","value":8}]
472[info] - Move to same location has no effect
473[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"from":"/foo","op":"move","path":"/bar"}]
474[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0/qux","op":"move","path":"/baz/1"}]
475[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0","op":"copy","path":"/boo"}]
476[info] - replacing the root of the document is possible with add
477[info] - Adding to "/-" adds to the end of the array
478[info] - Adding to "/-" adds to the end of the array, even n levels down
479[info] - test remove with bad number should fail
480[info] - test remove on array
481[info] - test repeated removes
482[info] - test remove with bad index should fail
483[info] - test replace with bad number should fail
484[info] - test copy with bad number should fail
485[info] - test move with bad number should fail
486[info] - test add with bad number should fail
487[info] - missing 'value' parameter to add
488[info] - missing 'value' parameter to replace
489[info] - missing 'value' parameter to test
490[info] - missing value parameter to test - where undef is falsy
491[info] - missing from parameter to copy
492[info] - missing from parameter to move
493[info] - duplicate ops !!! IGNORED !!!
494[info] - unrecognized op should fail
495[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
496Starting build for ProjectRef(file:/build/repo/,ujsonJVM) (diffson-ujson)... [2/6]
497Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
498[info] compiling 2 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC5/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC5/test-classes ...
501[info] done compiling
502[info] UjsonTestJsonPointer:
503[info] an empty string
504[info] - should be parsed as an empty pointer
505[info] the slash pointer
506[info] - should be parsed as the pointer to empty element at root
507[info] a string with a trailing forward slash
508[info] - should parse with an empty final element
509[info] a pointer string with one chunk
510[info] - should be parsed as a pointer with one element
511[info] occurrences of ~0
512[info] - should be replaced by occurrences of ~
513[info] occurrences of ~1
514[info] - should be replaced by occurrences of /
515[info] occurrences of ~
516[info] - should be directly followed by either 0 or 1
517[info] a non empty pointer
518[info] - should start with a /
519[info] a pointer to a label
520[info] - should be evaluated to the label value if it is one level deep
521[info] - should be evaluated to the end label value if it is several levels deep
522[info] - should be evaluated to nothing if the final element is unknown
523[info] - should produce an error if there is an unknown element in the middle of the pointer
524[info] a pointer to an array element
525[info] - should be evaluated to the value at the given index
526[info] - should produce an error if it is out of the array bounds
527[info] - should produce an error if it is the '-' element
528[info] a number pointer
529[info] - should be parsed as a string label if it overflows int capacity
530[info] UjsonJsonDiff:
531[info] a diff
532[info] - should be empty if created between two equal values
533[info] - should be a simple replacement if the two values are completely different
534[info] - should contain an add operation for each added field
535[info] - should contain a remove operation for each removed field
536[info] - should correctly handle array diffs in objects
537[info] - should contain a replace operation for each changed field value
538[info] - should contain an add operation for each added element
539[info] - should contain a remove operation for each deleted element
540[info] - should contain a replace operation for each value that changed
541[info] applying a diff
542[info] - should be a fix point when applied to the first object used for the diff
543[info] applying a diff to strings
544[info] - should provide a correct string representation
545[info] a remembering diff
546[info] - should correctly add removed values in array diffs
547[info] - should correctly add removed values in object diffs
548[info] - should correctly add replaced values in object diffs
549[info] UjsonJsonJsonMergeDiff:
550[info] a diff
551[info] - should be empty if created between two equal objects
552[info] - should be a simple replacement if the two values are completely different
553[info] - should be generated correctly for nested structures
554[info] UjsonTestJsonMergePatch:
555[info] patching {"a":"b"} with {"a":"c"}
556[info] - should result in {"a":"c"}
557[info] patching {"a":"b"} with {"b":"c"}
558[info] - should result in {"a":"b","b":"c"}
559[info] patching {"a":"b"} with {"a":null}
560[info] - should result in {}
561[info] patching {"a":"b","b":"c"} with {"a":null}
562[info] - should result in {"b":"c"}
563[info] patching {"a":["b"]} with {"a":"c"}
564[info] - should result in {"a":"c"}
565[info] patching {"a":"c"} with {"a":["b"]}
566[info] - should result in {"a":["b"]}
567[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
568[info] - should result in {"a": {"b": "d"}}
569[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
570[info] - should result in {"a": [1]}
571[info] patching ["a","b"] with ["c","d"]
572[info] - should result in ["c","d"]
573[info] patching {"a":"b"} with ["c"]
574[info] - should result in ["c"]
575[info] patching {"a":"foo"} with null
576[info] - should result in null
577[info] patching {"a":"foo"} with "bar"
578[info] - should result in "bar"
579[info] patching {"e":null} with {"a":1}
580[info] - should result in {"e":null,"a":1}
581[info] patching [1,2] with {"a":"b","c":null}
582[info] - should result in {"a":"b"}
583[info] patching {} with {"a":{"bb":{"ccc": null}}}
584[info] - should result in {"a":{"bb":{}}}
585[info] UjsonSimpleDiff:
586[info] a diff
587[info] - should be empty if created between two equal values
588[info] - should be a simple replacement if the two values are completely different
589[info] - should conta be be bein an add operation for each added field
590[info] - should contain a remove operation for each removed field
591[info] - should correctly handle array diffs in objects (i.e. just replaced)
592[info] - should contain a replace operation for each changed field value
593[info] - should contain a replaced operation for the changed array (additions)
594[info] - should contain a replaced operation for the changed array (deletions)
595[info] - should contain a replace operation for the entire array if at least one element in it changed
596[info] applying a diff
597[info] - should be a fix point when applied to the first object used for the diff
598[info] applying a diff to strings
599[info] - should provide a correct string representation
600[info] - should correctly add removed values in object diffs
601[info] - should correctly add replaced values in object diffs
602[info] a remembering diff
603[info] - should remember old values
604[info] UjsonTestSerialization:
605[info] a patch json
606[info] - should be correctly deserialized from a Json object
607[info] a patch object
608[info] - should be correctly serialized to a Json object
609[info] a merge patch
610[info] - should be correctly deserialized from a Json object
611[info] - should be correctly deserialized from a non-object Json value
612[info] a merge patch object
613[info] - should be correctly serialized
614[info] a non-object patch
615[info] - should be correctly serialized
616[info] UjsonTestJsonPatch:
617[info] applying an 'add' operation
618[info] - should add the field to the object if it does not exist
619[info] - should add a value with an empty string as the key
620[info] - should replace the value if the pointer is the root
621[info] - should replace the field value if it does exist
622[info] - should add an element to the array at the given index
623[info] - should add an element at the end of the array if the last element is '-'
624[info] - should create a nested field if needed
625[info] - should throw an error if some element is missing in the middle of the path
626[info] - should throw an error if adding an element out of the array boundaries
627[info] removing a label of an object
628[info] - should result in the object being amputated from this label
629[info] removing an element of an array
630[info] - should result in the array being amputated from this element
631[info] removing the '-' element of an array
632[info] - should result in an error being thrown
633[info] removing an element out of the array boundaries
634[info] - should result in an error being thrown
635[info] removing an unknown label from an object
636[info] - should result in an error being thrown
637[info] removing the root
638[info] - should result in an error being thrown
639[info] replacing an element in an object
640[info] - should result in this element being replaced
641[info] replacing an element in an array
642[info] - should result in this element being replaced
643[info] replacing the root
644[info] - should result in the value being completely replaced
645[info] replacing a non-existing element in an object
646[info] - should result in an error being thrown
647[info] replacing the '-' element of an array
648[info] - should result in an error being thrown
649[info] replacing an element out of the array boundaries
650[info] - should result in an error being thrown
651[info] moving a value from an object to an array
652[info] - should result in the value being added to the array and removed from the object
653[info] moving a value in a sub element
654[info] - should result in an error being thrown
655[info] moving the root
656[info] - should result in an error being thrown
657[info] copying an element in an object
658[info] - should result in this element being copied in the expected path
659[info] testing an existing element of an object
660[info] - should succeed and not modify the original object
661[info] testing an existing element with a non-expected value
662[info] - should result in an error being thrown
663[info] testing a non-existing element in an object
664[info] - should result in an error being thrown
665[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
666Starting build for ProjectRef(file:/build/repo/,coreJVM) (diffson-core)... [3/6]
667Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
668[info] compiling 4 Scala sources to /build/repo/core/.jvm/target/scala-3.8.0-RC5/test-classes ...
669[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/test/scala/diffson/TestDynLcs.scala:21:21
670[warn] 21 |import org.scalatest._
671[warn] | ^
672[warn] | unused import
673[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/test/scala/diffson/TestPatience.scala:21:21
674[warn] 21 |import org.scalatest._
675[warn] | ^
676[warn] | unused import
677[warn] two warnings found
678[info] done compiling
679[info] TestPatience:
680[info] the lcs of an empty sequence and another sequence
681[info] - should be the empty sequence
682[info] the lcs of two equal strings
683[info] - should be the strings
684[info] the lcs of a string and a prefix
685[info] - should be the prefix
686[info] the lcs of two strings with no common characters
687[info] - should be empty
688[info] the lcs of two strings
689[info] - should be correctly computed when one is in the middle of the other one
690[info] - should be correctly computed with a repeated character in common
691[info] - should be correctly computed with non unique characters
692[info] - should be correctly computed when both sequences have a common prefix and suffix
693[info] TestDynLcs:
694[info] the lcs of an empty sequence and another sequence
695[info] - should be the empty sequence
696[info] the lcs of two equal strings
697[info] - should be the strings
698[info] the lcs of a string and a prefix
699[info] - should be the prefix
700[info] the lcs of two strings with no common characters
701[info] - should be empty
702[info] the lcs of two strings
703[info] - should be correctly computed when one is in the middle of the other one
704[info] - should be correctly computed with a repeated character in common
705[info] - should be correctly computed with non unique characters
706[info] - should be correctly computed when both sequences have a common prefix and suffix
707[info] TestPatienceBigArray:
708[info] patience algorithm
709[info] - should be able to compute Lcs for big arrays of unique commons
710Starting build for ProjectRef(file:/build/repo/,playJsonJVM) (diffson-play-json)... [4/6]
711Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
712[info] compiling 2 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC5/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC5/test-classes ...
715[info] done compiling
716[info] PlayJsonSimpleDiff:
717[info] a diff
718[info] - should be empty if created between two equal values
719[info] - should be a simple replacement if the two values are completely different
720[info] - should conta be be bein an add operation for each added field
721[info] - should contain a remove operation for each removed field
722[info] - should correctly handle array diffs in objects (i.e. just replaced)
723[info] - should contain a replace operation for each changed field value
724[info] - should contain a replaced operation for the changed array (additions)
725[info] - should contain a replaced operation for the changed array (deletions)
726[info] - should contain a replace operation for the entire array if at least one element in it changed
727[info] applying a diff
728[info] - should be a fix point when applied to the first object used for the diff
729[info] applying a diff to strings
730[info] - should provide a correct string representation
731[info] - should correctly add removed values in object diffs
732[info] - should correctly add replaced values in object diffs
733[info] a remembering diff
734[info] - should remember old values
735[info] PlayJsonTestJsonMergePatch:
736[info] patching {"a":"b"} with {"a":"c"}
737[info] - should result in {"a":"c"}
738[info] patching {"a":"b"} with {"b":"c"}
739[info] - should result in {"a":"b","b":"c"}
740[info] patching {"a":"b"} with {"a":null}
741[info] - should result in {}
742[info] patching {"a":"b","b":"c"} with {"a":null}
743[info] - should result in {"b":"c"}
744[info] patching {"a":["b"]} with {"a":"c"}
745[info] - should result in {"a":"c"}
746[info] patching {"a":"c"} with {"a":["b"]}
747[info] - should result in {"a":["b"]}
748[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
749[info] - should result in {"a": {"b": "d"}}
750[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
751[info] - should result in {"a": [1]}
752[info] patching ["a","b"] with ["c","d"]
753[info] - should result in ["c","d"]
754[info] patching {"a":"b"} with ["c"]
755[info] - should result in ["c"]
756[info] patching {"a":"foo"} with null
757[info] - should result in null
758[info] patching {"a":"foo"} with "bar"
759[info] - should result in "bar"
760[info] patching {"e":null} with {"a":1}
761[info] - should result in {"e":null,"a":1}
762[info] patching [1,2] with {"a":"b","c":null}
763[info] - should result in {"a":"b"}
764[info] patching {} with {"a":{"bb":{"ccc": null}}}
765[info] - should result in {"a":{"bb":{}}}
766[info] PlayJsonTestJsonPatch:
767[info] applying an 'add' operation
768[info] - should add the field to the object if it does not exist
769[info] - should add a value with an empty string as the key
770[info] - should replace the value if the pointer is the root
771[info] - should replace the field value if it does exist
772[info] - should add an element to the array at the given index
773[info] - should add an element at the end of the array if the last element is '-'
774[info] - should create a nested field if needed
775[info] - should throw an error if some element is missing in the middle of the path
776[info] - should throw an error if adding an element out of the array boundaries
777[info] removing a label of an object
778[info] - should result in the object being amputated from this label
779[info] removing an element of an array
780[info] - should result in the array being amputated from this element
781[info] removing the '-' element of an array
782[info] - should result in an error being thrown
783[info] removing an element out of the array boundaries
784[info] - should result in an error being thrown
785[info] removing an unknown label from an object
786[info] - should result in an error being thrown
787[info] removing the root
788[info] - should result in an error being thrown
789[info] replacing an element in an object
790[info] - should result in this element being replaced
791[info] replacing an element in an array
792[info] - should result in this element being replaced
793[info] replacing the root
794[info] - should result in the value being completely replaced
795[info] replacing a non-existing element in an object
796[info] - should result in an error being thrown
797[info] replacing the '-' element of an array
798[info] - should result in an error being thrown
799[info] replacing an element out of the array boundaries
800[info] - should result in an error being thrown
801[info] moving a value from an object to an array
802[info] - should result in the value being added to the array and removed from the object
803[info] moving a value in a sub element
804[info] - should result in an error being thrown
805[info] moving the root
806[info] - should result in an error being thrown
807[info] copying an element in an object
808[info] - should result in this element being copied in the expected path
809[info] testing an existing element of an object
810[info] - should succeed and not modify the original object
811[info] testing an existing element with a non-expected value
812[info] - should result in an error being thrown
813[info] testing a non-existing element in an object
814[info] - should result in an error being thrown
815[info] PlayJsonTestJsonPointer:
816[info] an empty string
817[info] - should be parsed as an empty pointer
818[info] the slash pointer
819[info] - should be parsed as the pointer to empty element at root
820[info] a string with a trailing forward slash
821[info] - should parse with an empty final element
822[info] a pointer string with one chunk
823[info] - should be parsed as a pointer with one element
824[info] occurrences of ~0
825[info] - should be replaced by occurrences of ~
826[info] occurrences of ~1
827[info] - should be replaced by occurrences of /
828[info] occurrences of ~
829[info] - should be directly followed by either 0 or 1
830[info] a non empty pointer
831[info] - should start with a /
832[info] a pointer to a label
833[info] - should be evaluated to the label value if it is one level deep
834[info] - should be evaluated to the end label value if it is several levels deep
835[info] - should be evaluated to nothing if the final element is unknown
836[info] - should produce an error if there is an unknown element in the middle of the pointer
837[info] a pointer to an array element
838[info] - should be evaluated to the value at the given index
839[info] - should produce an error if it is out of the array bounds
840[info] - should produce an error if it is the '-' element
841[info] a number pointer
842[info] - should be parsed as a string label if it overflows int capacity
843[info] PlayJsonJsonDiff:
844[info] a diff
845[info] - should be empty if created between two equal values
846[info] - should be a simple replacement if the two values are completely different
847[info] - should contain an add operation for each added field
848[info] - should contain a remove operation for each removed field
849[info] - should correctly handle array diffs in objects
850[info] - should contain a replace operation for each changed field value
851[info] - should contain an add operation for each added element
852[info] - should contain a remove operation for each deleted element
853[info] - should contain a replace operation for each value that changed
854[info] applying a diff
855[info] - should be a fix point when applied to the first object used for the diff
856[info] applying a diff to strings
857[info] - should provide a correct string representation
858[info] a remembering diff
859[info] - should correctly add removed values in array diffs
860[info] - should correctly add removed values in object diffs
861[info] - should correctly add replaced values in object diffs
862[info] PlayJsonTestSerialization:
863[info] a patch json
864[info] - should be correctly deserialized from a Json object
865[info] a patch object
866[info] - should be correctly serialized to a Json object
867[info] a merge patch
868[info] - should be correctly deserialized from a Json object
869[info] - should be correctly deserialized from a non-object Json value
870[info] a merge patch object
871[info] - should be correctly serialized
872[info] a non-object patch
873[info] - should be correctly serialized
874[info] PlayJsonJsonMergeDiff:
875[info] a diff
876[info] - should be empty if created between two equal objects
877[info] - should be a simple replacement if the two values are completely different
878[info] - should be generated correctly for nested structures
879[info] PlayJsonConformance:
880[info] + Specification conformance tests
881[info] - 4.1. add with missing object
882[info] - A.1. Adding an Object Member
883[info] - A.2. Adding an Array Element
884[info] - A.3. Removing an Object Member
885[info] - A.4. Removing an Array Element
886[info] - A.5. Replacing a Value
887[info] - A.6. Moving a Value
888[info] - A.7. Moving an Array Element
889[info] - A.8. Testing a Value: Success
890[info] - A.9. Testing a Value: Error
891[info] - A.10. Adding a nested Member Object
892[info] - A.11. Ignoring Unrecognized Elements
893[info] - A.12. Adding to a Non-existent Target
894[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
895[info] - A.14. ~ Escape Ordering
896[info] - A.15. Comparing Strings and Numbers
897[info] - A.16. Adding an Array Value
898[info] + Misceallaneous tests
899[info] - empty list, empty docs
900[info] - empty patch list
901[info] - rearrangements OK?
902[info] - rearrangements OK? How about one level down ... array
903[info] - rearrangements OK? How about one level down...
904[info] - add replaces any existing field
905[info] - toplevel array
906[info] - toplevel array, no change
907[info] - toplevel object, numeric string
908[info] - toplevel object, integer
909[info] - Toplevel scalar values OK?
910[info] - Add, / target
911[info] - Add composite value at top level
912[info] - Add into composite value
913[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/8","value":"5"}]
914[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/-1","value":"5"}]
915[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":true}]
916[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":false}]
917[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":null}]
918[info] - 0 can be an array index or object element name
919[info] - ["foo"] patched with [{"op":"add","path":"/1","value":"bar"}]
920[info] - ["foo","sil"] patched with [{"op":"add","path":"/1","value":"bar"}]
921[info] - ["foo","sil"] patched with [{"op":"add","path":"/0","value":"bar"}]
922[info] - ["foo","sil"] patched with [{"op":"add","path":"/2","value":"bar"}]
923[info] - test against implementation-specific numeric parsing
924[info] - test with bad number should fail
925[info] - ["foo","sil"] patched with [{"op":"add","path":"/bar","value":42}]
926[info] - value in array add not flattened
927[info] - {"foo":1,"bar":[1,2,3,4]} patched with [{"op":"remove","path":"/bar"}]
928[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"remove","path":"/baz/0/qux"}]
929[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"replace","path":"/foo","value":[1,2,3,4]}]
930[info] - {"foo":[1,2,3,4],"baz":[{"qux":"hello"}]} patched with [{"op":"replace","path":"/baz/0/qux","value":"world"}]
931[info] - ["foo"] patched with [{"op":"replace","path":"/0","value":"bar"}]
932[info] - [""] patched with [{"op":"replace","path":"/0","value":0}]
933[info] - [""] patched with [{"op":"replace","path":"/0","value":true}]
934[info] - [""] patched with [{"op":"replace","path":"/0","value":false}]
935[info] - [""] patched with [{"op":"replace","path":"/0","value":null}]
936[info] - value in array replace not flattened
937[info] - replace whole document
938[info] - spurious patch properties
939[info] - null value should still be valid obj property
940[info] - test should pass despite rearrangement
941[info] - test should pass despite (nested) rearrangement
942[info] - test should pass - no error
943[info] - {"foo":{"bar":[1,2,5,4]}} patched with [{"op":"test","path":"/foo","value":[1,2]}]
944[info] - Whole document
945[info] - Empty-string element
946[info] - {"foo":["bar","baz"],"":0,"a/b":1,"c%d":2,"e^f":3,"g|h":4,"i\\j":5,"k\"l":6," ":7,"m~n":8} patched with [{"op":"test","path":"/foo","value":["bar","baz"]},{"op":"test","path":"/foo/0","value":"bar"},{"op":"test","path":"/","value":0},{"op":"test","path":"/a~1b","value":1},{"op":"test","path":"/c%d","value":2},{"op":"test","path":"/e^f","value":3},{"op":"test","path":"/g|h","value":4},{"op":"test","path":"/i\\j","value":5},{"op":"test","path":"/k\"l","value":6},{"op":"test","path":"/ ","value":7},{"op":"test","path":"/m~0n","value":8}]
947[info] - Move to same location has no effect
948[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"move","from":"/foo","path":"/bar"}]
949[info] - {"baz":[{"qux":"hello"}],"bar":1} patched with [{"op":"move","from":"/baz/0/qux","path":"/baz/1"}]
950[info] - {"baz":[{"qux":"hello"}],"bar":1} patched with [{"op":"copy","from":"/baz/0","path":"/boo"}]
951[info] - replacing the root of the document is possible with add
952[info] - Adding to "/-" adds to the end of the array
953[info] - Adding to "/-" adds to the end of the array, even n levels down
954[info] - test remove with bad number should fail
955[info] - test remove on array
956[info] - test repeated removes
957[info] - test remove with bad index should fail
958[info] - test replace with bad number should fail
959[info] - test copy with bad number should fail
960[info] - test move with bad number should fail
961[info] - test add with bad number should fail
962[info] - missing 'value' parameter to add
963[info] - missing 'value' parameter to replace
964[info] - missing 'value' parameter to test
965[info] - missing value parameter to test - where undef is falsy
966[info] - missing from parameter to copy
967[info] - missing from parameter to move
968[info] - duplicate ops !!! IGNORED !!!
969[info] - unrecognized op should fail
970[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
971Starting build for ProjectRef(file:/build/repo/,circeJVM) (diffson-circe)... [5/6]
972Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
973[info] compiling 1 Scala source to /build/repo/circe/jvm/target/scala-3.8.0-RC5/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0-RC5/test-classes ...
976[warn] -- [E198] Unused Symbol Warning: /build/repo/circe/jvm/src/test/scala/diffson/conformance/CirceConformance.scala:23:23
977[warn] 23 |import io.circe.syntax._
978[warn] | ^
979[warn] | unused import
980[warn] -- [E198] Unused Symbol Warning: /build/repo/circe/shared/src/test/scala/diffson/circe/TestProtocol.scala:23:22
981[warn] 23 |import cats.implicits._
982[warn] | ^
983[warn] | unused import
984[warn] two warnings found
985[info] done compiling
986[info] CirceJsonMergeDiff:
987[info] a diff
988[info] - should be empty if created between two equal objects
989[info] - should be a simple replacement if the two values are completely different
990[info] - should be generated correctly for nested structures
991[info] CirceTestJsonMergePatch:
992[info] patching {"a":"b"} with {"a":"c"}
993[info] - should result in {"a":"c"}
994[info] patching {"a":"b"} with {"b":"c"}
995[info] - should result in {"a":"b","b":"c"}
996[info] patching {"a":"b"} with {"a":null}
997[info] - should result in {}
998[info] patching {"a":"b","b":"c"} with {"a":null}
999[info] - should result in {"b":"c"}
1000[info] patching {"a":["b"]} with {"a":"c"}
1001[info] - should result in {"a":"c"}
1002[info] patching {"a":"c"} with {"a":["b"]}
1003[info] - should result in {"a":["b"]}
1004[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
1005[info] - should result in {"a": {"b": "d"}}
1006[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
1007[info] - should result in {"a": [1]}
1008[info] patching ["a","b"] with ["c","d"]
1009[info] - should result in ["c","d"]
1010[info] patching {"a":"b"} with ["c"]
1011[info] - should result in ["c"]
1012[info] patching {"a":"foo"} with null
1013[info] - should result in null
1014[info] patching {"a":"foo"} with "bar"
1015[info] - should result in "bar"
1016[info] patching {"e":null} with {"a":1}
1017[info] - should result in {"e":null,"a":1}
1018[info] patching [1,2] with {"a":"b","c":null}
1019[info] - should result in {"a":"b"}
1020[info] patching {} with {"a":{"bb":{"ccc": null}}}
1021[info] - should result in {"a":{"bb":{}}}
1022[info] CirceTestSerialization:
1023[info] a patch json
1024[info] - should be correctly deserialized from a Json object
1025[info] a patch object
1026[info] - should be correctly serialized to a Json object
1027[info] a merge patch
1028[info] - should be correctly deserialized from a Json object
1029[info] - should be correctly deserialized from a non-object Json value
1030[info] a merge patch object
1031[info] - should be correctly serialized
1032[info] a non-object patch
1033[info] - should be correctly serialized
1034[info] CirceTestJsonPatch:
1035[info] applying an 'add' operation
1036[info] - should add the field to the object if it does not exist
1037[info] - should add a value with an empty string as the key
1038[info] - should replace the value if the pointer is the root
1039[info] - should replace the field value if it does exist
1040[info] - should add an element to the array at the given index
1041[info] - should add an element at the end of the array if the last element is '-'
1042[info] - should create a nested field if needed
1043[info] - should throw an error if some element is missing in the middle of the path
1044[info] - should throw an error if adding an element out of the array boundaries
1045[info] removing a label of an object
1046[info] - should result in the object being amputated from this label
1047[info] removing an element of an array
1048[info] - should result in the array being amputated from this element
1049[info] removing the '-' element of an array
1050[info] - should result in an error being thrown
1051[info] removing an element out of the array boundaries
1052[info] - should result in an error being thrown
1053[info] removing an unknown label from an object
1054[info] - should result in an error being thrown
1055[info] removing the root
1056[info] - should result in an error being thrown
1057[info] replacing an element in an object
1058[info] - should result in this element being replaced
1059[info] replacing an element in an array
1060[info] - should result in this element being replaced
1061[info] replacing the root
1062[info] - should result in the value being completely replaced
1063[info] replacing a non-existing element in an object
1064[info] - should result in an error being thrown
1065[info] replacing the '-' element of an array
1066[info] - should result in an error being thrown
1067[info] replacing an element out of the array boundaries
1068[info] - should result in an error being thrown
1069[info] moving a value from an object to an array
1070[info] - should result in the value being added to the array and removed from the object
1071[info] moving a value in a sub element
1072[info] - should result in an error being thrown
1073[info] moving the root
1074[info] - should result in an error being thrown
1075[info] copying an element in an object
1076[info] - should result in this element being copied in the expected path
1077[info] testing an existing element of an object
1078[info] - should succeed and not modify the original object
1079[info] testing an existing element with a non-expected value
1080[info] - should result in an error being thrown
1081[info] testing a non-existing element in an object
1082[info] - should result in an error being thrown
1083[info] CirceSimpleDiff:
1084[info] a diff
1085[info] - should be empty if created between two equal values
1086[info] - should be a simple replacement if the two values are completely different
1087[info] - should conta be be bein an add operation for each added field
1088[info] - should contain a remove operation for each removed field
1089[info] - should correctly handle array diffs in objects (i.e. just replaced)
1090[info] - should contain a replace operation for each changed field value
1091[info] - should contain a replaced operation for the changed array (additions)
1092[info] - should contain a replaced operation for the changed array (deletions)
1093[info] - should contain a replace operation for the entire array if at least one element in it changed
1094[info] applying a diff
1095[info] - should be a fix point when applied to the first object used for the diff
1096[info] applying a diff to strings
1097[info] - should provide a correct string representation
1098[info] - should correctly add removed values in object diffs
1099[info] - should correctly add replaced values in object diffs
1100[info] a remembering diff
1101[info] - should remember old values
1102[info] CirceJsonDiff:
1103[info] a diff
1104[info] - should be empty if created between two equal values
1105[info] - should be a simple replacement if the two values are completely different
1106[info] - should contain an add operation for each added field
1107[info] - should contain a remove operation for each removed field
1108[info] - should correctly handle array diffs in objects
1109[info] - should contain a replace operation for each changed field value
1110[info] - should contain an add operation for each added element
1111[info] - should contain a remove operation for each deleted element
1112[info] - should contain a replace operation for each value that changed
1113[info] applying a diff
1114[info] - should be a fix point when applied to the first object used for the diff
1115[info] applying a diff to strings
1116[info] - should provide a correct string representation
1117[info] a remembering diff
1118[info] - should correctly add removed values in array diffs
1119[info] - should correctly add removed values in object diffs
1120[info] - should correctly add replaced values in object diffs
1121[info] CirceTestJsonPointer:
1122[info] an empty string
1123[info] - should be parsed as an empty pointer
1124[info] the slash pointer
1125[info] - should be parsed as the pointer to empty element at root
1126[info] a string with a trailing forward slash
1127[info] - should parse with an empty final element
1128[info] a pointer string with one chunk
1129[info] - should be parsed as a pointer with one element
1130[info] occurrences of ~0
1131[info] - should be replaced by occurrences of ~
1132[info] occurrences of ~1
1133[info] - should be replaced by occurrences of /
1134[info] occurrences of ~
1135[info] - should be directly followed by either 0 or 1
1136[info] a non empty pointer
1137[info] - should start with a /
1138[info] a pointer to a label
1139[info] - should be evaluated to the label value if it is one level deep
1140[info] - should be evaluated to the end label value if it is several levels deep
1141[info] - should be evaluated to nothing if the final element is unknown
1142[info] - should produce an error if there is an unknown element in the middle of the pointer
1143[info] a pointer to an array element
1144[info] - should be evaluated to the value at the given index
1145[info] - should produce an error if it is out of the array bounds
1146[info] - should produce an error if it is the '-' element
1147[info] a number pointer
1148[info] - should be parsed as a string label if it overflows int capacity
1149[info] CirceTestObjectDiff:
1150[info] a wide object diffed with an empty one
1151[info] - should not cause stack overflows
1152[info] a wide object diffed with itself
1153[info] - should not cause stack overflows
1154[info] CirceConformance:
1155[info] + Specification conformance tests
1156[info] - 4.1. add with missing object
1157[info] - A.1. Adding an Object Member
1158[info] - A.2. Adding an Array Element
1159[info] - A.3. Removing an Object Member
1160[info] - A.4. Removing an Array Element
1161[info] - A.5. Replacing a Value
1162[info] - A.6. Moving a Value
1163[info] - A.7. Moving an Array Element
1164[info] - A.8. Testing a Value: Success
1165[info] - A.9. Testing a Value: Error
1166[info] - A.10. Adding a nested Member Object
1167[info] - A.11. Ignoring Unrecognized Elements
1168[info] - A.12. Adding to a Non-existent Target
1169[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
1170[info] - A.14. ~ Escape Ordering
1171[info] - A.15. Comparing Strings and Numbers
1172[info] - A.16. Adding an Array Value
1173[info] + Misceallaneous tests
1174[info] - empty list, empty docs
1175[info] - empty patch list
1176[info] - rearrangements OK?
1177[info] - rearrangements OK? How about one level down ... array
1178[info] - rearrangements OK? How about one level down...
1179[info] - add replaces any existing field
1180[info] - toplevel array
1181[info] - toplevel array, no change
1182[info] - toplevel object, numeric string
1183[info] - toplevel object, integer
1184[info] - Toplevel scalar values OK?
1185[info] - Add, / target
1186[info] - Add composite value at top level
1187[info] - Add into composite value
1188[info] - {
1189[info] "bar" : [
1190[info] 1,
1191[info] 2
1192[info] ]
1193[info] } patched with [
1194[info] {
1195[info] "op" : "add",
1196[info] "path" : "/bar/8",
1197[info] "value" : "5"
1198[info] }
1199[info] ]
1200[info] - {
1201[info] "bar" : [
1202[info] 1,
1203[info] 2
1204[info] ]
1205[info] } patched with [
1206[info] {
1207[info] "op" : "add",
1208[info] "path" : "/bar/-1",
1209[info] "value" : "5"
1210[info] }
1211[info] ]
1212[info] - {
1213[info] "foo" : 1
1214[info] } patched with [
1215[info] {
1216[info] "op" : "add",
1217[info] "path" : "/bar",
1218[info] "value" : true
1219[info] }
1220[info] ]
1221[info] - {
1222[info] "foo" : 1
1223[info] } patched with [
1224[info] {
1225[info] "op" : "add",
1226[info] "path" : "/bar",
1227[info] "value" : false
1228[info] }
1229[info] ]
1230[info] - {
1231[info] "foo" : 1
1232[info] } patched with [
1233[info] {
1234[info] "op" : "add",
1235[info] "path" : "/bar",
1236[info] "value" : null
1237[info] }
1238[info] ]
1239[info] - 0 can be an array index or object element name
1240[info] - [
1241[info] "foo"
1242[info] ] patched with [
1243[info] {
1244[info] "op" : "add",
1245[info] "path" : "/1",
1246[info] "value" : "bar"
1247[info] }
1248[info] ]
1249[info] - [
1250[info] "foo",
1251[info] "sil"
1252[info] ] patched with [
1253[info] {
1254[info] "op" : "add",
1255[info] "path" : "/1",
1256[info] "value" : "bar"
1257[info] }
1258[info] ]
1259[info] - [
1260[info] "foo",
1261[info] "sil"
1262[info] ] patched with [
1263[info] {
1264[info] "op" : "add",
1265[info] "path" : "/0",
1266[info] "value" : "bar"
1267[info] }
1268[info] ]
1269[info] - [
1270[info] "foo",
1271[info] "sil"
1272[info] ] patched with [
1273[info] {
1274[info] "op" : "add",
1275[info] "path" : "/2",
1276[info] "value" : "bar"
1277[info] }
1278[info] ]
1279[info] - test against implementation-specific numeric parsing
1280[info] - test with bad number should fail
1281[info] - [
1282[info] "foo",
1283[info] "sil"
1284[info] ] patched with [
1285[info] {
1286[info] "op" : "add",
1287[info] "path" : "/bar",
1288[info] "value" : 42
1289[info] }
1290[info] ]
1291[info] - value in array add not flattened
1292[info] - {
1293[info] "foo" : 1,
1294[info] "bar" : [
1295[info] 1,
1296[info] 2,
1297[info] 3,
1298[info] 4
1299[info] ]
1300[info] } patched with [
1301[info] {
1302[info] "op" : "remove",
1303[info] "path" : "/bar"
1304[info] }
1305[info] ]
1306[info] - {
1307[info] "foo" : 1,
1308[info] "baz" : [
1309[info] {
1310[info] "qux" : "hello"
1311[info] }
1312[info] ]
1313[info] } patched with [
1314[info] {
1315[info] "op" : "remove",
1316[info] "path" : "/baz/0/qux"
1317[info] }
1318[info] ]
1319[info] - {
1320[info] "foo" : 1,
1321[info] "baz" : [
1322[info] {
1323[info] "qux" : "hello"
1324[info] }
1325[info] ]
1326[info] } patched with [
1327[info] {
1328[info] "op" : "replace",
1329[info] "path" : "/foo",
1330[info] "value" : [
1331[info] 1,
1332[info] 2,
1333[info] 3,
1334[info] 4
1335[info] ]
1336[info] }
1337[info] ]
1338[info] - {
1339[info] "foo" : [
1340[info] 1,
1341[info] 2,
1342[info] 3,
1343[info] 4
1344[info] ],
1345[info] "baz" : [
1346[info] {
1347[info] "qux" : "hello"
1348[info] }
1349[info] ]
1350[info] } patched with [
1351[info] {
1352[info] "op" : "replace",
1353[info] "path" : "/baz/0/qux",
1354[info] "value" : "world"
1355[info] }
1356[info] ]
1357[info] - [
1358[info] "foo"
1359[info] ] patched with [
1360[info] {
1361[info] "op" : "replace",
1362[info] "path" : "/0",
1363[info] "value" : "bar"
1364[info] }
1365[info] ]
1366[info] - [
1367[info] ""
1368[info] ] patched with [
1369[info] {
1370[info] "op" : "replace",
1371[info] "path" : "/0",
1372[info] "value" : 0
1373[info] }
1374[info] ]
1375[info] - [
1376[info] ""
1377[info] ] patched with [
1378[info] {
1379[info] "op" : "replace",
1380[info] "path" : "/0",
1381[info] "value" : true
1382[info] }
1383[info] ]
1384[info] - [
1385[info] ""
1386[info] ] patched with [
1387[info] {
1388[info] "op" : "replace",
1389[info] "path" : "/0",
1390[info] "value" : false
1391[info] }
1392[info] ]
1393[info] - [
1394[info] ""
1395[info] ] patched with [
1396[info] {
1397[info] "op" : "replace",
1398[info] "path" : "/0",
1399[info] "value" : null
1400[info] }
1401[info] ]
1402[info] - value in array replace not flattened
1403[info] - replace whole document
1404[info] - spurious patch properties
1405[info] - null value should still be valid obj property
1406[info] - test should pass despite rearrangement
1407[info] - test should pass despite (nested) rearrangement
1408[info] - test should pass - no error
1409[info] - {
1410[info] "foo" : {
1411[info] "bar" : [
1412[info] 1,
1413[info] 2,
1414[info] 5,
1415[info] 4
1416[info] ]
1417[info] }
1418[info] } patched with [
1419[info] {
1420[info] "op" : "test",
1421[info] "path" : "/foo",
1422[info] "value" : [
1423[info] 1,
1424[info] 2
1425[info] ]
1426[info] }
1427[info] ]
1428[info] - Whole document
1429[info] - Empty-string element
1430[info] - {
1431[info] "foo" : [
1432[info] "bar",
1433[info] "baz"
1434[info] ],
1435[info] "" : 0,
1436[info] "a/b" : 1,
1437[info] "c%d" : 2,
1438[info] "e^f" : 3,
1439[info] "g|h" : 4,
1440[info] "i\\j" : 5,
1441[info] "k\"l" : 6,
1442[info] " " : 7,
1443[info] "m~n" : 8
1444[info] } patched with [
1445[info] {
1446[info] "op" : "test",
1447[info] "path" : "/foo",
1448[info] "value" : [
1449[info] "bar",
1450[info] "baz"
1451[info] ]
1452[info] },
1453[info] {
1454[info] "op" : "test",
1455[info] "path" : "/foo/0",
1456[info] "value" : "bar"
1457[info] },
1458[info] {
1459[info] "op" : "test",
1460[info] "path" : "/",
1461[info] "value" : 0
1462[info] },
1463[info] {
1464[info] "op" : "test",
1465[info] "path" : "/a~1b",
1466[info] "value" : 1
1467[info] },
1468[info] {
1469[info] "op" : "test",
1470[info] "path" : "/c%d",
1471[info] "value" : 2
1472[info] },
1473[info] {
1474[info] "op" : "test",
1475[info] "path" : "/e^f",
1476[info] "value" : 3
1477[info] },
1478[info] {
1479[info] "op" : "test",
1480[info] "path" : "/g|h",
1481[info] "value" : 4
1482[info] },
1483[info] {
1484[info] "op" : "test",
1485[info] "path" : "/i\\j",
1486[info] "value" : 5
1487[info] },
1488[info] {
1489[info] "op" : "test",
1490[info] "path" : "/k\"l",
1491[info] "value" : 6
1492[info] },
1493[info] {
1494[info] "op" : "test",
1495[info] "path" : "/ ",
1496[info] "value" : 7
1497[info] },
1498[info] {
1499[info] "op" : "test",
1500[info] "path" : "/m~0n",
1501[info] "value" : 8
1502[info] }
1503[info] ]
1504[info] - Move to same location has no effect
1505[info] - {
1506[info] "foo" : 1,
1507[info] "baz" : [
1508[info] {
1509[info] "qux" : "hello"
1510[info] }
1511[info] ]
1512[info] } patched with [
1513[info] {
1514[info] "op" : "move",
1515[info] "from" : "/foo",
1516[info] "path" : "/bar"
1517[info] }
1518[info] ]
1519[info] - {
1520[info] "baz" : [
1521[info] {
1522[info] "qux" : "hello"
1523[info] }
1524[info] ],
1525[info] "bar" : 1
1526[info] } patched with [
1527[info] {
1528[info] "op" : "move",
1529[info] "from" : "/baz/0/qux",
1530[info] "path" : "/baz/1"
1531[info] }
1532[info] ]
1533[info] - {
1534[info] "baz" : [
1535[info] {
1536[info] "qux" : "hello"
1537[info] }
1538[info] ],
1539[info] "bar" : 1
1540[info] } patched with [
1541[info] {
1542[info] "op" : "copy",
1543[info] "from" : "/baz/0",
1544[info] "path" : "/boo"
1545[info] }
1546[info] ]
1547[info] - replacing the root of the document is possible with add
1548[info] - Adding to "/-" adds to the end of the array
1549[info] - Adding to "/-" adds to the end of the array, even n levels down
1550[info] - test remove with bad number should fail
1551[info] - test remove on array
1552[info] - test repeated removes
1553[info] - test remove with bad index should fail
1554[info] - test replace with bad number should fail
1555[info] - test copy with bad number should fail
1556[info] - test move with bad number should fail
1557[info] - test add with bad number should fail
1558[info] - missing 'value' parameter to add
1559[info] - missing 'value' parameter to replace
1560[info] - missing 'value' parameter to test
1561[info] - missing value parameter to test - where undef is falsy
1562[info] - missing from parameter to copy
1563[info] - missing from parameter to move
1564[info] - duplicate ops !!! IGNORED !!!
1565[info] - unrecognized op should fail
1566[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
1567
1568************************
1569Build summary:
1570[{
1571 "module": "diffson-testkit",
1572 "compile": {"status": "ok", "tookMs": 23023, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 298, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 192, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
1576 "publish": {"status": "skipped", "tookMs": 0},
1577 "metadata": {
1578 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1579}
1580},{
1581 "module": "diffson-spray-json",
1582 "compile": {"status": "ok", "tookMs": 1998, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1605, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1489, "passed": 183, "failed": 0, "ignored": 2, "skipped": 0, "total": 185, "byFramework": [{"framework": "unknown", "stats": {"passed": 183, "failed": 0, "ignored": 2, "skipped": 0, "total": 185}}]},
1586 "publish": {"status": "skipped", "tookMs": 0},
1587 "metadata": {
1588 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1589}
1590},{
1591 "module": "diffson-ujson",
1592 "compile": {"status": "ok", "tookMs": 1855, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 1104, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 923, "passed": 97, "failed": 0, "ignored": 0, "skipped": 0, "total": 97, "byFramework": [{"framework": "unknown", "stats": {"passed": 97, "failed": 0, "ignored": 0, "skipped": 0, "total": 97}}]},
1596 "publish": {"status": "skipped", "tookMs": 0},
1597 "metadata": {
1598 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1599}
1600},{
1601 "module": "diffson-core",
1602 "compile": {"status": "ok", "tookMs": 60, "warnings": 7, "errors": 0, "sourceVersion": "3.8"},
1603 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1604 "test-compile": {"status": "ok", "tookMs": 1727, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 488, "passed": 17, "failed": 0, "ignored": 0, "skipped": 0, "total": 17, "byFramework": [{"framework": "unknown", "stats": {"passed": 17, "failed": 0, "ignored": 0, "skipped": 0, "total": 17}}]},
1606 "publish": {"status": "skipped", "tookMs": 0},
1607 "metadata": {
1608 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1609}
1610},{
1611 "module": "diffson-play-json",
1612 "compile": {"status": "ok", "tookMs": 1787, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1340, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1615 "test": {"status": "ok", "tookMs": 1040, "passed": 183, "failed": 0, "ignored": 2, "skipped": 0, "total": 185, "byFramework": [{"framework": "unknown", "stats": {"passed": 183, "failed": 0, "ignored": 2, "skipped": 0, "total": 185}}]},
1616 "publish": {"status": "skipped", "tookMs": 0},
1617 "metadata": {
1618 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1619}
1620},{
1621 "module": "diffson-circe",
1622 "compile": {"status": "ok", "tookMs": 1474, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1959, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 900, "passed": 185, "failed": 0, "ignored": 2, "skipped": 0, "total": 187, "byFramework": [{"framework": "unknown", "stats": {"passed": 185, "failed": 0, "ignored": 2, "skipped": 0, "total": 187}}]},
1626 "publish": {"status": "skipped", "tookMs": 0},
1627 "metadata": {
1628 "crossScalaVersions": ["2.12.19", "2.13.13", "3.3.3"]
1629}
1630}]
1631************************
1632[success] Total time: 50 s, completed Dec 31, 2025, 9:05:06 PM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.