Build Logs
gnieh/diffson • 3.8.0-RC6:2026-01-08
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-RC6
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-RC6"
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-RC6
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0-RC6
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-RC6
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-RC6"
71"++3.8.0-RC6 -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-RC6 """{"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.001s.
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-RC6
93OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in benchmarksJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in diffsonJS/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in playJsonJVM/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in ujsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in circeJS/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in circeNative/crossScalaVersions
102[info] set scmInfo to https://github.com/gnieh/diffson
103OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in diffsonJVM/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in ujsonNative/crossScalaVersions
106OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in playJsonNative/crossScalaVersions
107OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in diffsonNative/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in testkitJVM/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in ujsonJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in coreNative/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in sprayJsonJVM/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in circeJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0-RC6 -> 3.8.0-RC6 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0-RC6 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0-RC6)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0-RC6)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0-RC6)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0-RC6)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0-RC6)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0-RC6)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0-RC6)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0-RC6)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0-RC6)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0-RC6)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0-RC6)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0-RC6)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0-RC6)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0-RC6)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0-RC6)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0-RC6)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0-RC6)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0-RC6)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0-RC6)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0-RC6)
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 Jan 8, 2026, 1:40:45 AM
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-RC6/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-RC6/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-RC6/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC6/test-classes ...
240[info] done compiling
241[info] SprayJsonTestJsonPointer:
242[info] an empty string
243[info] - should be parsed as an empty pointer
244[info] the slash pointer
245[info] - should be parsed as the pointer to empty element at root
246[info] a string with a trailing forward slash
247[info] - should parse with an empty final element
248[info] a pointer string with one chunk
249[info] - should be parsed as a pointer with one element
250[info] occurrences of ~0
251[info] - should be replaced by occurrences of ~
252[info] occurrences of ~1
253[info] - should be replaced by occurrences of /
254[info] occurrences of ~
255[info] - should be directly followed by either 0 or 1
256[info] a non empty pointer
257[info] - should start with a /
258[info] a pointer to a label
259[info] - should be evaluated to the label value if it is one level deep
260[info] - should be evaluated to the end label value if it is several levels deep
261[info] - should be evaluated to nothing if the final element is unknown
262[info] - should produce an error if there is an unknown element in the middle of the pointer
263[info] a pointer to an array element
264[info] - should be evaluated to the value at the given index
265[info] - should produce an error if it is out of the array bounds
266[info] - should produce an error if it is the '-' element
267[info] a number pointer
268[info] - should be parsed as a string label if it overflows int capacity
269[info] SprayJsonJsonMergeDiff:
270[info] a diff
271[info] - should be empty if created between two equal objects
272[info] - should be a simple replacement if the two values are completely different
273[info] - should be generated correctly for nested structures
274[info] SprayJsonTestJsonMergePatch:
275[info] patching {"a":"b"} with {"a":"c"}
276[info] - should result in {"a":"c"}
277[info] patching {"a":"b"} with {"b":"c"}
278[info] - should result in {"a":"b","b":"c"}
279[info] patching {"a":"b"} with {"a":null}
280[info] - should result in {}
281[info] patching {"a":"b","b":"c"} with {"a":null}
282[info] - should result in {"b":"c"}
283[info] patching {"a":["b"]} with {"a":"c"}
284[info] - should result in {"a":"c"}
285[info] patching {"a":"c"} with {"a":["b"]}
286[info] - should result in {"a":["b"]}
287[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
288[info] - should result in {"a": {"b": "d"}}
289[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
290[info] - should result in {"a": [1]}
291[info] patching ["a","b"] with ["c","d"]
292[info] - should result in ["c","d"]
293[info] patching {"a":"b"} with ["c"]
294[info] - should result in ["c"]
295[info] patching {"a":"foo"} with null
296[info] - should result in null
297[info] patching {"a":"foo"} with "bar"
298[info] - should result in "bar"
299[info] patching {"e":null} with {"a":1}
300[info] - should result in {"e":null,"a":1}
301[info] patching [1,2] with {"a":"b","c":null}
302[info] - should result in {"a":"b"}
303[info] patching {} with {"a":{"bb":{"ccc": null}}}
304[info] - should result in {"a":{"bb":{}}}
305[info] SprayJsonJsonDiff:
306[info] a diff
307[info] - should be empty if created between two equal values
308[info] - should be a simple replacement if the two values are completely different
309[info] - should contain an add operation for each added field
310[info] - should contain a remove operation for each removed field
311[info] - should correctly handle array diffs in objects
312[info] - should contain a replace operation for each changed field value
313[info] - should contain an add operation for each added element
314[info] - should contain a remove operation for each deleted element
315[info] - should contain a replace operation for each value that changed
316[info] applying a diff
317[info] - should be a fix point when applied to the first object used for the diff
318[info] applying a diff to strings
319[info] - should provide a correct string representation
320[info] a remembering diff
321[info] - should correctly add removed values in array diffs
322[info] - should correctly add removed values in object diffs
323[info] - should correctly add replaced values in object diffs
324[info] SprayJsonSimpleDiff:
325[info] a diff
326[info] - should be empty if created between two equal values
327[info] - should be a simple replacement if the two values are completely different
328[info] - should conta be be bein an add operation for each added field
329[info] - should contain a remove operation for each removed field
330[info] - should correctly handle array diffs in objects (i.e. just replaced)
331[info] - should contain a replace operation for each changed field value
332[info] - should contain a replaced operation for the changed array (additions)
333[info] - should contain a replaced operation for the changed array (deletions)
334[info] - should contain a replace operation for the entire array if at least one element in it changed
335[info] applying a diff
336[info] - should be a fix point when applied to the first object used for the diff
337[info] applying a diff to strings
338[info] - should provide a correct string representation
339[info] - should correctly add removed values in object diffs
340[info] - should correctly add replaced values in object diffs
341[info] a remembering diff
342[info] - should remember old values
343[info] SprayJsonTestSerialization:
344[info] a patch json
345[info] - should be correctly deserialized from a Json object
346[info] a patch object
347[info] - should be correctly serialized to a Json object
348[info] a merge patch
349[info] - should be correctly deserialized from a Json object
350[info] - should be correctly deserialized from a non-object Json value
351[info] a merge patch object
352[info] - should be correctly serialized
353[info] a non-object patch
354[info] - should be correctly serialized
355[info] SprayJsonTestJsonPatch:
356[info] applying an 'add' operation
357[info] - should add the field to the object if it does not exist
358[info] - should add a value with an empty string as the key
359[info] - should replace the value if the pointer is the root
360[info] - should replace the field value if it does exist
361[info] - should add an element to the array at the given index
362[info] - should add an element at the end of the array if the last element is '-'
363[info] - should create a nested field if needed
364[info] - should throw an error if some element is missing in the middle of the path
365[info] - should throw an error if adding an element out of the array boundaries
366[info] removing a label of an object
367[info] - should result in the object being amputated from this label
368[info] removing an element of an array
369[info] - should result in the array being amputated from this element
370[info] removing the '-' element of an array
371[info] - should result in an error being thrown
372[info] removing an element out of the array boundaries
373[info] - should result in an error being thrown
374[info] removing an unknown label from an object
375[info] - should result in an error being thrown
376[info] removing the root
377[info] - should result in an error being thrown
378[info] replacing an element in an object
379[info] - should result in this element being replaced
380[info] replacing an element in an array
381[info] - should result in this element being replaced
382[info] replacing the root
383[info] - should result in the value being completely replaced
384[info] replacing a non-existing element in an object
385[info] - should result in an error being thrown
386[info] replacing the '-' element of an array
387[info] - should result in an error being thrown
388[info] replacing an element out of the array boundaries
389[info] - should result in an error being thrown
390[info] moving a value from an object to an array
391[info] - should result in the value being added to the array and removed from the object
392[info] moving a value in a sub element
393[info] - should result in an error being thrown
394[info] moving the root
395[info] - should result in an error being thrown
396[info] copying an element in an object
397[info] - should result in this element being copied in the expected path
398[info] testing an existing element of an object
399[info] - should succeed and not modify the original object
400[info] testing an existing element with a non-expected value
401[info] - should result in an error being thrown
402[info] testing a non-existing element in an object
403[info] - should result in an error being thrown
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-RC6/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC6/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] UjsonTestJsonMergePatch:
531[info] patching {"a":"b"} with {"a":"c"}
532[info] - should result in {"a":"c"}
533[info] patching {"a":"b"} with {"b":"c"}
534[info] - should result in {"a":"b","b":"c"}
535[info] patching {"a":"b"} with {"a":null}
536[info] - should result in {}
537[info] patching {"a":"b","b":"c"} with {"a":null}
538[info] - should result in {"b":"c"}
539[info] patching {"a":["b"]} with {"a":"c"}
540[info] - should result in {"a":"c"}
541[info] patching {"a":"c"} with {"a":["b"]}
542[info] - should result in {"a":["b"]}
543[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
544[info] - should result in {"a": {"b": "d"}}
545[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
546[info] - should result in {"a": [1]}
547[info] patching ["a","b"] with ["c","d"]
548[info] - should result in ["c","d"]
549[info] patching {"a":"b"} with ["c"]
550[info] - should result in ["c"]
551[info] patching {"a":"foo"} with null
552[info] - should result in null
553[info] patching {"a":"foo"} with "bar"
554[info] - should result in "bar"
555[info] patching {"e":null} with {"a":1}
556[info] - should result in {"e":null,"a":1}
557[info] patching [1,2] with {"a":"b","c":null}
558[info] - should result in {"a":"b"}
559[info] patching {} with {"a":{"bb":{"ccc": null}}}
560[info] - should result in {"a":{"bb":{}}}
561[info] UjsonJsonDiff:
562[info] a diff
563[info] - should be empty if created between two equal values
564[info] - should be a simple replacement if the two values are completely different
565[info] - should contain an add operation for each added field
566[info] - should contain a remove operation for each removed field
567[info] - should correctly handle array diffs in objects
568[info] - should contain a replace operation for each changed field value
569[info] - should contain an add operation for each added element
570[info] - should contain a remove operation for each deleted element
571[info] - should contain a replace operation for each value that changed
572[info] applying a diff
573[info] - should be a fix point when applied to the first object used for the diff
574[info] applying a diff to strings
575[info] - should provide a correct string representation
576[info] a remembering diff
577[info] - should correctly add removed values in array diffs
578[info] - should correctly add removed values in object diffs
579[info] - should correctly add replaced values in object diffs
580[info] UjsonSimpleDiff:
581[info] a diff
582[info] - should be empty if created between two equal values
583[info] - should be a simple replacement if the two values are completely different
584[info] - should conta be be bein an add operation for each added field
585[info] - should contain a remove operation for each removed field
586[info] - should correctly handle array diffs in objects (i.e. just replaced)
587[info] - should contain a replace operation for each changed field value
588[info] - should contain a replaced operation for the changed array (additions)
589[info] - should contain a replaced operation for the changed array (deletions)
590[info] - should contain a replace operation for the entire array if at least one element in it changed
591[info] applying a diff
592[info] - should be a fix point when applied to the first object used for the diff
593[info] applying a diff to strings
594[info] - should provide a correct string representation
595[info] - should correctly add removed values in object diffs
596[info] - should correctly add replaced values in object diffs
597[info] a remembering diff
598[info] - should remember old values
599[info] UjsonTestSerialization:
600[info] a patch json
601[info] - should be correctly deserialized from a Json object
602[info] a patch object
603[info] - should be correctly serialized to a Json object
604[info] a merge patch
605[info] - should be correctly deserialized from a Json object
606[info] - should be correctly deserialized from a non-object Json value
607[info] a merge patch object
608[info] - should be correctly serialized
609[info] a non-object patch
610[info] - should be correctly serialized
611[info] UjsonJsonJsonMergeDiff:
612[info] a diff
613[info] - should be empty if created between two equal objects
614[info] - should be a simple replacement if the two values are completely different
615[info] - should be generated correctly for nested structures
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-RC6/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] TestDynLcs:
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] TestPatience:
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-RC6/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC6/test-classes ...
715[info] done compiling
716[info] PlayJsonJsonMergeDiff:
717[info] a diff
718[info] - should be empty if created between two equal objects
719[info] - should be a simple replacement if the two values are completely different
720[info] - should be generated correctly for nested structures
721[info] PlayJsonSimpleDiff:
722[info] a diff
723[info] - should be empty if created between two equal values
724[info] - should be a simple replacement if the two values are completely different
725[info] - should conta be be bein an add operation for each added field
726[info] - should contain a remove operation for each removed field
727[info] - should correctly handle array diffs in objects (i.e. just replaced)
728[info] - should contain a replace operation for each changed field value
729[info] - should contain a replaced operation for the changed array (additions)
730[info] - should contain a replaced operation for the changed array (deletions)
731[info] - should contain a replace operation for the entire array if at least one element in it changed
732[info] applying a diff
733[info] - should be a fix point when applied to the first object used for the diff
734[info] applying a diff to strings
735[info] - should provide a correct string representation
736[info] - should correctly add removed values in object diffs
737[info] - should correctly add replaced values in object diffs
738[info] a remembering diff
739[info] - should remember old values
740[info] PlayJsonTestSerialization:
741[info] a patch json
742[info] - should be correctly deserialized from a Json object
743[info] a patch object
744[info] - should be correctly serialized to a Json object
745[info] a merge patch
746[info] - should be correctly deserialized from a Json object
747[info] - should be correctly deserialized from a non-object Json value
748[info] a merge patch object
749[info] - should be correctly serialized
750[info] a non-object patch
751[info] - should be correctly serialized
752[info] PlayJsonJsonDiff:
753[info] a diff
754[info] - should be empty if created between two equal values
755[info] - should be a simple replacement if the two values are completely different
756[info] - should contain an add operation for each added field
757[info] - should contain a remove operation for each removed field
758[info] - should correctly handle array diffs in objects
759[info] - should contain a replace operation for each changed field value
760[info] - should contain an add operation for each added element
761[info] - should contain a remove operation for each deleted element
762[info] - should contain a replace operation for each value that changed
763[info] applying a diff
764[info] - should be a fix point when applied to the first object used for the diff
765[info] applying a diff to strings
766[info] - should provide a correct string representation
767[info] a remembering diff
768[info] - should correctly add removed values in array diffs
769[info] - should correctly add removed values in object diffs
770[info] - should correctly add replaced values in object diffs
771[info] PlayJsonTestJsonPatch:
772[info] applying an 'add' operation
773[info] - should add the field to the object if it does not exist
774[info] - should add a value with an empty string as the key
775[info] - should replace the value if the pointer is the root
776[info] - should replace the field value if it does exist
777[info] - should add an element to the array at the given index
778[info] - should add an element at the end of the array if the last element is '-'
779[info] - should create a nested field if needed
780[info] - should throw an error if some element is missing in the middle of the path
781[info] - should throw an error if adding an element out of the array boundaries
782[info] removing a label of an object
783[info] - should result in the object being amputated from this label
784[info] removing an element of an array
785[info] - should result in the array being amputated from this element
786[info] removing the '-' element of an array
787[info] - should result in an error being thrown
788[info] removing an element out of the array boundaries
789[info] - should result in an error being thrown
790[info] removing an unknown label from an object
791[info] - should result in an error being thrown
792[info] removing the root
793[info] - should result in an error being thrown
794[info] replacing an element in an object
795[info] - should result in this element being replaced
796[info] replacing an element in an array
797[info] - should result in this element being replaced
798[info] replacing the root
799[info] - should result in the value being completely replaced
800[info] replacing a non-existing element in an object
801[info] - should result in an error being thrown
802[info] replacing the '-' element of an array
803[info] - should result in an error being thrown
804[info] replacing an element out of the array boundaries
805[info] - should result in an error being thrown
806[info] moving a value from an object to an array
807[info] - should result in the value being added to the array and removed from the object
808[info] moving a value in a sub element
809[info] - should result in an error being thrown
810[info] moving the root
811[info] - should result in an error being thrown
812[info] copying an element in an object
813[info] - should result in this element being copied in the expected path
814[info] testing an existing element of an object
815[info] - should succeed and not modify the original object
816[info] testing an existing element with a non-expected value
817[info] - should result in an error being thrown
818[info] testing a non-existing element in an object
819[info] - should result in an error being thrown
820[info] PlayJsonTestJsonPointer:
821[info] an empty string
822[info] - should be parsed as an empty pointer
823[info] the slash pointer
824[info] - should be parsed as the pointer to empty element at root
825[info] a string with a trailing forward slash
826[info] - should parse with an empty final element
827[info] a pointer string with one chunk
828[info] - should be parsed as a pointer with one element
829[info] occurrences of ~0
830[info] - should be replaced by occurrences of ~
831[info] occurrences of ~1
832[info] - should be replaced by occurrences of /
833[info] occurrences of ~
834[info] - should be directly followed by either 0 or 1
835[info] a non empty pointer
836[info] - should start with a /
837[info] a pointer to a label
838[info] - should be evaluated to the label value if it is one level deep
839[info] - should be evaluated to the end label value if it is several levels deep
840[info] - should be evaluated to nothing if the final element is unknown
841[info] - should produce an error if there is an unknown element in the middle of the pointer
842[info] a pointer to an array element
843[info] - should be evaluated to the value at the given index
844[info] - should produce an error if it is out of the array bounds
845[info] - should produce an error if it is the '-' element
846[info] a number pointer
847[info] - should be parsed as a string label if it overflows int capacity
848[info] PlayJsonTestJsonMergePatch:
849[info] patching {"a":"b"} with {"a":"c"}
850[info] - should result in {"a":"c"}
851[info] patching {"a":"b"} with {"b":"c"}
852[info] - should result in {"a":"b","b":"c"}
853[info] patching {"a":"b"} with {"a":null}
854[info] - should result in {}
855[info] patching {"a":"b","b":"c"} with {"a":null}
856[info] - should result in {"b":"c"}
857[info] patching {"a":["b"]} with {"a":"c"}
858[info] - should result in {"a":"c"}
859[info] patching {"a":"c"} with {"a":["b"]}
860[info] - should result in {"a":["b"]}
861[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
862[info] - should result in {"a": {"b": "d"}}
863[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
864[info] - should result in {"a": [1]}
865[info] patching ["a","b"] with ["c","d"]
866[info] - should result in ["c","d"]
867[info] patching {"a":"b"} with ["c"]
868[info] - should result in ["c"]
869[info] patching {"a":"foo"} with null
870[info] - should result in null
871[info] patching {"a":"foo"} with "bar"
872[info] - should result in "bar"
873[info] patching {"e":null} with {"a":1}
874[info] - should result in {"e":null,"a":1}
875[info] patching [1,2] with {"a":"b","c":null}
876[info] - should result in {"a":"b"}
877[info] patching {} with {"a":{"bb":{"ccc": null}}}
878[info] - should result in {"a":{"bb":{}}}
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-RC6/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0-RC6/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] CirceTestObjectDiff:
987[info] a wide object diffed with an empty one
988[info] - should not cause stack overflows
989[info] a wide object diffed with itself
990[info] - should not cause stack overflows
991[info] CirceJsonMergeDiff:
992[info] a diff
993[info] - should be empty if created between two equal objects
994[info] - should be a simple replacement if the two values are completely different
995[info] - should be generated correctly for nested structures
996[info] CirceTestJsonPatch:
997[info] applying an 'add' operation
998[info] - should add the field to the object if it does not exist
999[info] - should add a value with an empty string as the key
1000[info] - should replace the value if the pointer is the root
1001[info] - should replace the field value if it does exist
1002[info] - should add an element to the array at the given index
1003[info] - should add an element at the end of the array if the last element is '-'
1004[info] - should create a nested field if needed
1005[info] - should throw an error if some element is missing in the middle of the path
1006[info] - should throw an error if adding an element out of the array boundaries
1007[info] removing a label of an object
1008[info] - should result in the object being amputated from this label
1009[info] removing an element of an array
1010[info] - should result in the array being amputated from this element
1011[info] removing the '-' element of an array
1012[info] - should result in an error being thrown
1013[info] removing an element out of the array boundaries
1014[info] - should result in an error being thrown
1015[info] removing an unknown label from an object
1016[info] - should result in an error being thrown
1017[info] removing the root
1018[info] - should result in an error being thrown
1019[info] replacing an element in an object
1020[info] - should result in this element being replaced
1021[info] replacing an element in an array
1022[info] - should result in this element being replaced
1023[info] replacing the root
1024[info] - should result in the value being completely replaced
1025[info] replacing a non-existing element in an object
1026[info] - should result in an error being thrown
1027[info] replacing the '-' element of an array
1028[info] - should result in an error being thrown
1029[info] replacing an element out of the array boundaries
1030[info] - should result in an error being thrown
1031[info] moving a value from an object to an array
1032[info] - should result in the value being added to the array and removed from the object
1033[info] moving a value in a sub element
1034[info] - should result in an error being thrown
1035[info] moving the root
1036[info] - should result in an error being thrown
1037[info] copying an element in an object
1038[info] - should result in this element being copied in the expected path
1039[info] testing an existing element of an object
1040[info] - should succeed and not modify the original object
1041[info] testing an existing element with a non-expected value
1042[info] - should result in an error being thrown
1043[info] testing a non-existing element in an object
1044[info] - should result in an error being thrown
1045[info] CirceTestJsonPointer:
1046[info] an empty string
1047[info] - should be parsed as an empty pointer
1048[info] the slash pointer
1049[info] - should be parsed as the pointer to empty element at root
1050[info] a string with a trailing forward slash
1051[info] - should parse with an empty final element
1052[info] a pointer string with one chunk
1053[info] - should be parsed as a pointer with one element
1054[info] occurrences of ~0
1055[info] - should be replaced by occurrences of ~
1056[info] occurrences of ~1
1057[info] - should be replaced by occurrences of /
1058[info] occurrences of ~
1059[info] - should be directly followed by either 0 or 1
1060[info] a non empty pointer
1061[info] - should start with a /
1062[info] a pointer to a label
1063[info] - should be evaluated to the label value if it is one level deep
1064[info] - should be evaluated to the end label value if it is several levels deep
1065[info] - should be evaluated to nothing if the final element is unknown
1066[info] - should produce an error if there is an unknown element in the middle of the pointer
1067[info] a pointer to an array element
1068[info] - should be evaluated to the value at the given index
1069[info] - should produce an error if it is out of the array bounds
1070[info] - should produce an error if it is the '-' element
1071[info] a number pointer
1072[info] - should be parsed as a string label if it overflows int capacity
1073[info] CirceTestJsonMergePatch:
1074[info] patching {"a":"b"} with {"a":"c"}
1075[info] - should result in {"a":"c"}
1076[info] patching {"a":"b"} with {"b":"c"}
1077[info] - should result in {"a":"b","b":"c"}
1078[info] patching {"a":"b"} with {"a":null}
1079[info] - should result in {}
1080[info] patching {"a":"b","b":"c"} with {"a":null}
1081[info] - should result in {"b":"c"}
1082[info] patching {"a":["b"]} with {"a":"c"}
1083[info] - should result in {"a":"c"}
1084[info] patching {"a":"c"} with {"a":["b"]}
1085[info] - should result in {"a":["b"]}
1086[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
1087[info] - should result in {"a": {"b": "d"}}
1088[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
1089[info] - should result in {"a": [1]}
1090[info] patching ["a","b"] with ["c","d"]
1091[info] - should result in ["c","d"]
1092[info] patching {"a":"b"} with ["c"]
1093[info] - should result in ["c"]
1094[info] patching {"a":"foo"} with null
1095[info] - should result in null
1096[info] patching {"a":"foo"} with "bar"
1097[info] - should result in "bar"
1098[info] patching {"e":null} with {"a":1}
1099[info] - should result in {"e":null,"a":1}
1100[info] patching [1,2] with {"a":"b","c":null}
1101[info] - should result in {"a":"b"}
1102[info] patching {} with {"a":{"bb":{"ccc": null}}}
1103[info] - should result in {"a":{"bb":{}}}
1104[info] CirceTestSerialization:
1105[info] a patch json
1106[info] - should be correctly deserialized from a Json object
1107[info] a patch object
1108[info] - should be correctly serialized to a Json object
1109[info] a merge patch
1110[info] - should be correctly deserialized from a Json object
1111[info] - should be correctly deserialized from a non-object Json value
1112[info] a merge patch object
1113[info] - should be correctly serialized
1114[info] a non-object patch
1115[info] - should be correctly serialized
1116[info] CirceJsonDiff:
1117[info] a diff
1118[info] - should be empty if created between two equal values
1119[info] - should be a simple replacement if the two values are completely different
1120[info] - should contain an add operation for each added field
1121[info] - should contain a remove operation for each removed field
1122[info] - should correctly handle array diffs in objects
1123[info] - should contain a replace operation for each changed field value
1124[info] - should contain an add operation for each added element
1125[info] - should contain a remove operation for each deleted element
1126[info] - should contain a replace operation for each value that changed
1127[info] applying a diff
1128[info] - should be a fix point when applied to the first object used for the diff
1129[info] applying a diff to strings
1130[info] - should provide a correct string representation
1131[info] a remembering diff
1132[info] - should correctly add removed values in array diffs
1133[info] - should correctly add removed values in object diffs
1134[info] - should correctly add replaced values in object diffs
1135[info] CirceSimpleDiff:
1136[info] a diff
1137[info] - should be empty if created between two equal values
1138[info] - should be a simple replacement if the two values are completely different
1139[info] - should conta be be bein an add operation for each added field
1140[info] - should contain a remove operation for each removed field
1141[info] - should correctly handle array diffs in objects (i.e. just replaced)
1142[info] - should contain a replace operation for each changed field value
1143[info] - should contain a replaced operation for the changed array (additions)
1144[info] - should contain a replaced operation for the changed array (deletions)
1145[info] - should contain a replace operation for the entire array if at least one element in it changed
1146[info] applying a diff
1147[info] - should be a fix point when applied to the first object used for the diff
1148[info] applying a diff to strings
1149[info] - should provide a correct string representation
1150[info] - should correctly add removed values in object diffs
1151[info] - should correctly add replaced values in object diffs
1152[info] a remembering diff
1153[info] - should remember old values
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": 22335, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 285, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 246, "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": 1527, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1337, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1411, "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": 1787, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 984, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 1047, "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": 99, "warnings": 7, "errors": 0, "sourceVersion": "3.8"},
1603 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1604 "test-compile": {"status": "ok", "tookMs": 1608, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 464, "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": 1655, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1085, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1615 "test": {"status": "ok", "tookMs": 1072, "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": 1106, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1830, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 874, "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: 52 s, completed Jan 8, 2026, 1:41:37 AM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.