Build Logs
gnieh/diffson • 3.8.0-RC4:2025-12-22
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-RC4
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-RC4"
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-RC4
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0-RC4
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-RC4
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-RC4"
71"++3.8.0-RC4 -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-RC4 """{"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 8.575s.
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-RC4
93OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in ujsonJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in benchmarksJVM/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in diffsonJS/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in playJsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in circeJS/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in circeNative/crossScalaVersions
102[info] set scmInfo to https://github.com/gnieh/diffson
103OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in diffsonJVM/crossScalaVersions
104OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in ujsonNative/crossScalaVersions
106OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in playJsonNative/crossScalaVersions
107OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in diffsonNative/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in testkitJVM/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in ujsonJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in sprayJsonJVM/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in circeJVM/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in coreNative/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0-RC4 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0-RC4)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0-RC4)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0-RC4)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0-RC4)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0-RC4)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0-RC4)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0-RC4)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0-RC4)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0-RC4)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0-RC4)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0-RC4)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0-RC4)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0-RC4)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0-RC4)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0-RC4)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0-RC4)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0-RC4)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0-RC4)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0-RC4)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0-RC4)
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 22, 2025, 5:49:42 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-RC4/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-RC4/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-RC4/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC4/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] SprayJsonSimpleDiff:
270[info] a diff
271[info] - should be empty if created between two equal values
272[info] - should be a simple replacement if the two values are completely different
273[info] - should conta be be bein an add operation for each added field
274[info] - should contain a remove operation for each removed field
275[info] - should correctly handle array diffs in objects (i.e. just replaced)
276[info] - should contain a replace operation for each changed field value
277[info] - should contain a replaced operation for the changed array (additions)
278[info] - should contain a replaced operation for the changed array (deletions)
279[info] - should contain a replace operation for the entire array if at least one element in it changed
280[info] applying a diff
281[info] - should be a fix point when applied to the first object used for the diff
282[info] applying a diff to strings
283[info] - should provide a correct string representation
284[info] - should correctly add removed values in object diffs
285[info] - should correctly add replaced values in object diffs
286[info] a remembering diff
287[info] - should remember old values
288[info] SprayJsonTestSerialization:
289[info] a patch json
290[info] - should be correctly deserialized from a Json object
291[info] a patch object
292[info] - should be correctly serialized to a Json object
293[info] a merge patch
294[info] - should be correctly deserialized from a Json object
295[info] - should be correctly deserialized from a non-object Json value
296[info] a merge patch object
297[info] - should be correctly serialized
298[info] a non-object patch
299[info] - should be correctly serialized
300[info] SprayJsonJsonMergeDiff:
301[info] a diff
302[info] - should be empty if created between two equal objects
303[info] - should be a simple replacement if the two values are completely different
304[info] - should be generated correctly for nested structures
305[info] SprayJsonTestJsonPatch:
306[info] applying an 'add' operation
307[info] - should add the field to the object if it does not exist
308[info] - should add a value with an empty string as the key
309[info] - should replace the value if the pointer is the root
310[info] - should replace the field value if it does exist
311[info] - should add an element to the array at the given index
312[info] - should add an element at the end of the array if the last element is '-'
313[info] - should create a nested field if needed
314[info] - should throw an error if some element is missing in the middle of the path
315[info] - should throw an error if adding an element out of the array boundaries
316[info] removing a label of an object
317[info] - should result in the object being amputated from this label
318[info] removing an element of an array
319[info] - should result in the array being amputated from this element
320[info] removing the '-' element of an array
321[info] - should result in an error being thrown
322[info] removing an element out of the array boundaries
323[info] - should result in an error being thrown
324[info] removing an unknown label from an object
325[info] - should result in an error being thrown
326[info] removing the root
327[info] - should result in an error being thrown
328[info] replacing an element in an object
329[info] - should result in this element being replaced
330[info] replacing an element in an array
331[info] - should result in this element being replaced
332[info] replacing the root
333[info] - should result in the value being completely replaced
334[info] replacing a non-existing element in an object
335[info] - should result in an error being thrown
336[info] replacing the '-' element of an array
337[info] - should result in an error being thrown
338[info] replacing an element out of the array boundaries
339[info] - should result in an error being thrown
340[info] moving a value from an object to an array
341[info] - should result in the value being added to the array and removed from the object
342[info] moving a value in a sub element
343[info] - should result in an error being thrown
344[info] moving the root
345[info] - should result in an error being thrown
346[info] copying an element in an object
347[info] - should result in this element being copied in the expected path
348[info] testing an existing element of an object
349[info] - should succeed and not modify the original object
350[info] testing an existing element with a non-expected value
351[info] - should result in an error being thrown
352[info] testing a non-existing element in an object
353[info] - should result in an error being thrown
354[info] SprayJsonTestJsonMergePatch:
355[info] patching {"a":"b"} with {"a":"c"}
356[info] - should result in {"a":"c"}
357[info] patching {"a":"b"} with {"b":"c"}
358[info] - should result in {"a":"b","b":"c"}
359[info] patching {"a":"b"} with {"a":null}
360[info] - should result in {}
361[info] patching {"a":"b","b":"c"} with {"a":null}
362[info] - should result in {"b":"c"}
363[info] patching {"a":["b"]} with {"a":"c"}
364[info] - should result in {"a":"c"}
365[info] patching {"a":"c"} with {"a":["b"]}
366[info] - should result in {"a":["b"]}
367[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
368[info] - should result in {"a": {"b": "d"}}
369[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
370[info] - should result in {"a": [1]}
371[info] patching ["a","b"] with ["c","d"]
372[info] - should result in ["c","d"]
373[info] patching {"a":"b"} with ["c"]
374[info] - should result in ["c"]
375[info] patching {"a":"foo"} with null
376[info] - should result in null
377[info] patching {"a":"foo"} with "bar"
378[info] - should result in "bar"
379[info] patching {"e":null} with {"a":1}
380[info] - should result in {"e":null,"a":1}
381[info] patching [1,2] with {"a":"b","c":null}
382[info] - should result in {"a":"b"}
383[info] patching {} with {"a":{"bb":{"ccc": null}}}
384[info] - should result in {"a":{"bb":{}}}
385[info] SprayJsonJsonDiff:
386[info] a diff
387[info] - should be empty if created between two equal values
388[info] - should be a simple replacement if the two values are completely different
389[info] - should contain an add operation for each added field
390[info] - should contain a remove operation for each removed field
391[info] - should correctly handle array diffs in objects
392[info] - should contain a replace operation for each changed field value
393[info] - should contain an add operation for each added element
394[info] - should contain a remove operation for each deleted element
395[info] - should contain a replace operation for each value that changed
396[info] applying a diff
397[info] - should be a fix point when applied to the first object used for the diff
398[info] applying a diff to strings
399[info] - should provide a correct string representation
400[info] a remembering diff
401[info] - should correctly add removed values in array diffs
402[info] - should correctly add removed values in object diffs
403[info] - should correctly add replaced values in object diffs
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-RC4/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC4/test-classes ...
501[info] done compiling
502[info] UjsonJsonJsonMergeDiff:
503[info] a diff
504[info] - should be empty if created between two equal objects
505[info] - should be a simple replacement if the two values are completely different
506[info] - should be generated correctly for nested structures
507[info] UjsonSimpleDiff:
508[info] a diff
509[info] - should be empty if created between two equal values
510[info] - should be a simple replacement if the two values are completely different
511[info] - should conta be be bein an add operation for each added field
512[info] - should contain a remove operation for each removed field
513[info] - should correctly handle array diffs in objects (i.e. just replaced)
514[info] - should contain a replace operation for each changed field value
515[info] - should contain a replaced operation for the changed array (additions)
516[info] - should contain a replaced operation for the changed array (deletions)
517[info] - should contain a replace operation for the entire array if at least one element in it changed
518[info] applying a diff
519[info] - should be a fix point when applied to the first object used for the diff
520[info] applying a diff to strings
521[info] - should provide a correct string representation
522[info] - should correctly add removed values in object diffs
523[info] - should correctly add replaced values in object diffs
524[info] a remembering diff
525[info] - should remember old values
526[info] UjsonTestSerialization:
527[info] a patch json
528[info] - should be correctly deserialized from a Json object
529[info] a patch object
530[info] - should be correctly serialized to a Json object
531[info] a merge patch
532[info] - should be correctly deserialized from a Json object
533[info] - should be correctly deserialized from a non-object Json value
534[info] a merge patch object
535[info] - should be correctly serialized
536[info] a non-object patch
537[info] - should be correctly serialized
538[info] UjsonTestJsonMergePatch:
539[info] patching {"a":"b"} with {"a":"c"}
540[info] - should result in {"a":"c"}
541[info] patching {"a":"b"} with {"b":"c"}
542[info] - should result in {"a":"b","b":"c"}
543[info] patching {"a":"b"} with {"a":null}
544[info] - should result in {}
545[info] patching {"a":"b","b":"c"} with {"a":null}
546[info] - should result in {"b":"c"}
547[info] patching {"a":["b"]} with {"a":"c"}
548[info] - should result in {"a":"c"}
549[info] patching {"a":"c"} with {"a":["b"]}
550[info] - should result in {"a":["b"]}
551[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
552[info] - should result in {"a": {"b": "d"}}
553[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
554[info] - should result in {"a": [1]}
555[info] patching ["a","b"] with ["c","d"]
556[info] - should result in ["c","d"]
557[info] patching {"a":"b"} with ["c"]
558[info] - should result in ["c"]
559[info] patching {"a":"foo"} with null
560[info] - should result in null
561[info] patching {"a":"foo"} with "bar"
562[info] - should result in "bar"
563[info] patching {"e":null} with {"a":1}
564[info] - should result in {"e":null,"a":1}
565[info] patching [1,2] with {"a":"b","c":null}
566[info] - should result in {"a":"b"}
567[info] patching {} with {"a":{"bb":{"ccc": null}}}
568[info] - should result in {"a":{"bb":{}}}
569[info] UjsonJsonDiff:
570[info] a diff
571[info] - should be empty if created between two equal values
572[info] - should be a simple replacement if the two values are completely different
573[info] - should contain an add operation for each added field
574[info] - should contain a remove operation for each removed field
575[info] - should correctly handle array diffs in objects
576[info] - should contain a replace operation for each changed field value
577[info] - should contain an add operation for each added element
578[info] - should contain a remove operation for each deleted element
579[info] - should contain a replace operation for each value that changed
580[info] applying a diff
581[info] - should be a fix point when applied to the first object used for the diff
582[info] applying a diff to strings
583[info] - should provide a correct string representation
584[info] a remembering diff
585[info] - should correctly add removed values in array diffs
586[info] - should correctly add removed values in object diffs
587[info] - should correctly add replaced values in object diffs
588[info] UjsonTestJsonPointer:
589[info] an empty string
590[info] - should be parsed as an empty pointer
591[info] the slash pointer
592[info] - should be parsed as the pointer to empty element at root
593[info] a string with a trailing forward slash
594[info] - should parse with an empty final element
595[info] a pointer string with one chunk
596[info] - should be parsed as a pointer with one element
597[info] occurrences of ~0
598[info] - should be replaced by occurrences of ~
599[info] occurrences of ~1
600[info] - should be replaced by occurrences of /
601[info] occurrences of ~
602[info] - should be directly followed by either 0 or 1
603[info] a non empty pointer
604[info] - should start with a /
605[info] a pointer to a label
606[info] - should be evaluated to the label value if it is one level deep
607[info] - should be evaluated to the end label value if it is several levels deep
608[info] - should be evaluated to nothing if the final element is unknown
609[info] - should produce an error if there is an unknown element in the middle of the pointer
610[info] a pointer to an array element
611[info] - should be evaluated to the value at the given index
612[info] - should produce an error if it is out of the array bounds
613[info] - should produce an error if it is the '-' element
614[info] a number pointer
615[info] - should be parsed as a string label if it overflows int capacity
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-RC4/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-RC4/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC4/test-classes ...
715[info] done compiling
716[info] PlayJsonTestJsonPointer:
717[info] an empty string
718[info] - should be parsed as an empty pointer
719[info] the slash pointer
720[info] - should be parsed as the pointer to empty element at root
721[info] a string with a trailing forward slash
722[info] - should parse with an empty final element
723[info] a pointer string with one chunk
724[info] - should be parsed as a pointer with one element
725[info] occurrences of ~0
726[info] - should be replaced by occurrences of ~
727[info] occurrences of ~1
728[info] - should be replaced by occurrences of /
729[info] occurrences of ~
730[info] - should be directly followed by either 0 or 1
731[info] a non empty pointer
732[info] - should start with a /
733[info] a pointer to a label
734[info] - should be evaluated to the label value if it is one level deep
735[info] - should be evaluated to the end label value if it is several levels deep
736[info] - should be evaluated to nothing if the final element is unknown
737[info] - should produce an error if there is an unknown element in the middle of the pointer
738[info] a pointer to an array element
739[info] - should be evaluated to the value at the given index
740[info] - should produce an error if it is out of the array bounds
741[info] - should produce an error if it is the '-' element
742[info] a number pointer
743[info] - should be parsed as a string label if it overflows int capacity
744[info] PlayJsonJsonMergeDiff:
745[info] a diff
746[info] - should be empty if created between two equal objects
747[info] - should be a simple replacement if the two values are completely different
748[info] - should be generated correctly for nested structures
749[info] PlayJsonTestSerialization:
750[info] a patch json
751[info] - should be correctly deserialized from a Json object
752[info] a patch object
753[info] - should be correctly serialized to a Json object
754[info] a merge patch
755[info] - should be correctly deserialized from a Json object
756[info] - should be correctly deserialized from a non-object Json value
757[info] a merge patch object
758[info] - should be correctly serialized
759[info] a non-object patch
760[info] - should be correctly serialized
761[info] PlayJsonTestJsonPatch:
762[info] applying an 'add' operation
763[info] - should add the field to the object if it does not exist
764[info] - should add a value with an empty string as the key
765[info] - should replace the value if the pointer is the root
766[info] - should replace the field value if it does exist
767[info] - should add an element to the array at the given index
768[info] - should add an element at the end of the array if the last element is '-'
769[info] - should create a nested field if needed
770[info] - should throw an error if some element is missing in the middle of the path
771[info] - should throw an error if adding an element out of the array boundaries
772[info] removing a label of an object
773[info] - should result in the object being amputated from this label
774[info] removing an element of an array
775[info] - should result in the array being amputated from this element
776[info] removing the '-' element of an array
777[info] - should result in an error being thrown
778[info] removing an element out of the array boundaries
779[info] - should result in an error being thrown
780[info] removing an unknown label from an object
781[info] - should result in an error being thrown
782[info] removing the root
783[info] - should result in an error being thrown
784[info] replacing an element in an object
785[info] - should result in this element being replaced
786[info] replacing an element in an array
787[info] - should result in this element being replaced
788[info] replacing the root
789[info] - should result in the value being completely replaced
790[info] replacing a non-existing element in an object
791[info] - should result in an error being thrown
792[info] replacing the '-' element of an array
793[info] - should result in an error being thrown
794[info] replacing an element out of the array boundaries
795[info] - should result in an error being thrown
796[info] moving a value from an object to an array
797[info] - should result in the value being added to the array and removed from the object
798[info] moving a value in a sub element
799[info] - should result in an error being thrown
800[info] moving the root
801[info] - should result in an error being thrown
802[info] copying an element in an object
803[info] - should result in this element being copied in the expected path
804[info] testing an existing element of an object
805[info] - should succeed and not modify the original object
806[info] testing an existing element with a non-expected value
807[info] - should result in an error being thrown
808[info] testing a non-existing element in an object
809[info] - should result in an error being thrown
810[info] PlayJsonSimpleDiff:
811[info] a diff
812[info] - should be empty if created between two equal values
813[info] - should be a simple replacement if the two values are completely different
814[info] - should conta be be bein an add operation for each added field
815[info] - should contain a remove operation for each removed field
816[info] - should correctly handle array diffs in objects (i.e. just replaced)
817[info] - should contain a replace operation for each changed field value
818[info] - should contain a replaced operation for the changed array (additions)
819[info] - should contain a replaced operation for the changed array (deletions)
820[info] - should contain a replace operation for the entire array if at least one element in it changed
821[info] applying a diff
822[info] - should be a fix point when applied to the first object used for the diff
823[info] applying a diff to strings
824[info] - should provide a correct string representation
825[info] - should correctly add removed values in object diffs
826[info] - should correctly add replaced values in object diffs
827[info] a remembering diff
828[info] - should remember old values
829[info] PlayJsonConformance:
830[info] + Specification conformance tests
831[info] - 4.1. add with missing object
832[info] - A.1. Adding an Object Member
833[info] - A.2. Adding an Array Element
834[info] - A.3. Removing an Object Member
835[info] - A.4. Removing an Array Element
836[info] - A.5. Replacing a Value
837[info] - A.6. Moving a Value
838[info] - A.7. Moving an Array Element
839[info] - A.8. Testing a Value: Success
840[info] - A.9. Testing a Value: Error
841[info] - A.10. Adding a nested Member Object
842[info] - A.11. Ignoring Unrecognized Elements
843[info] - A.12. Adding to a Non-existent Target
844[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
845[info] - A.14. ~ Escape Ordering
846[info] - A.15. Comparing Strings and Numbers
847[info] - A.16. Adding an Array Value
848[info] + Misceallaneous tests
849[info] - empty list, empty docs
850[info] - empty patch list
851[info] - rearrangements OK?
852[info] - rearrangements OK? How about one level down ... array
853[info] - rearrangements OK? How about one level down...
854[info] - add replaces any existing field
855[info] - toplevel array
856[info] - toplevel array, no change
857[info] - toplevel object, numeric string
858[info] - toplevel object, integer
859[info] - Toplevel scalar values OK?
860[info] - Add, / target
861[info] - Add composite value at top level
862[info] - Add into composite value
863[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/8","value":"5"}]
864[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/-1","value":"5"}]
865[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":true}]
866[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":false}]
867[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":null}]
868[info] - 0 can be an array index or object element name
869[info] - ["foo"] patched with [{"op":"add","path":"/1","value":"bar"}]
870[info] - ["foo","sil"] patched with [{"op":"add","path":"/1","value":"bar"}]
871[info] - ["foo","sil"] patched with [{"op":"add","path":"/0","value":"bar"}]
872[info] - ["foo","sil"] patched with [{"op":"add","path":"/2","value":"bar"}]
873[info] - test against implementation-specific numeric parsing
874[info] - test with bad number should fail
875[info] - ["foo","sil"] patched with [{"op":"add","path":"/bar","value":42}]
876[info] - value in array add not flattened
877[info] - {"foo":1,"bar":[1,2,3,4]} patched with [{"op":"remove","path":"/bar"}]
878[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"remove","path":"/baz/0/qux"}]
879[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"replace","path":"/foo","value":[1,2,3,4]}]
880[info] - {"foo":[1,2,3,4],"baz":[{"qux":"hello"}]} patched with [{"op":"replace","path":"/baz/0/qux","value":"world"}]
881[info] - ["foo"] patched with [{"op":"replace","path":"/0","value":"bar"}]
882[info] - [""] patched with [{"op":"replace","path":"/0","value":0}]
883[info] - [""] patched with [{"op":"replace","path":"/0","value":true}]
884[info] - [""] patched with [{"op":"replace","path":"/0","value":false}]
885[info] - [""] patched with [{"op":"replace","path":"/0","value":null}]
886[info] - value in array replace not flattened
887[info] - replace whole document
888[info] - spurious patch properties
889[info] - null value should still be valid obj property
890[info] - test should pass despite rearrangement
891[info] - test should pass despite (nested) rearrangement
892[info] - test should pass - no error
893[info] - {"foo":{"bar":[1,2,5,4]}} patched with [{"op":"test","path":"/foo","value":[1,2]}]
894[info] - Whole document
895[info] - Empty-string element
896[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}]
897[info] - Move to same location has no effect
898[info] - {"foo":1,"baz":[{"qux":"hello"}]} patched with [{"op":"move","from":"/foo","path":"/bar"}]
899[info] - {"baz":[{"qux":"hello"}],"bar":1} patched with [{"op":"move","from":"/baz/0/qux","path":"/baz/1"}]
900[info] - {"baz":[{"qux":"hello"}],"bar":1} patched with [{"op":"copy","from":"/baz/0","path":"/boo"}]
901[info] - replacing the root of the document is possible with add
902[info] - Adding to "/-" adds to the end of the array
903[info] - Adding to "/-" adds to the end of the array, even n levels down
904[info] - test remove with bad number should fail
905[info] - test remove on array
906[info] - test repeated removes
907[info] - test remove with bad index should fail
908[info] - test replace with bad number should fail
909[info] - test copy with bad number should fail
910[info] - test move with bad number should fail
911[info] - test add with bad number should fail
912[info] - missing 'value' parameter to add
913[info] - missing 'value' parameter to replace
914[info] - missing 'value' parameter to test
915[info] - missing value parameter to test - where undef is falsy
916[info] - missing from parameter to copy
917[info] - missing from parameter to move
918[info] - duplicate ops !!! IGNORED !!!
919[info] - unrecognized op should fail
920[info] PlayJsonTestJsonMergePatch:
921[info] patching {"a":"b"} with {"a":"c"}
922[info] - should result in {"a":"c"}
923[info] patching {"a":"b"} with {"b":"c"}
924[info] - should result in {"a":"b","b":"c"}
925[info] patching {"a":"b"} with {"a":null}
926[info] - should result in {}
927[info] patching {"a":"b","b":"c"} with {"a":null}
928[info] - should result in {"b":"c"}
929[info] patching {"a":["b"]} with {"a":"c"}
930[info] - should result in {"a":"c"}
931[info] patching {"a":"c"} with {"a":["b"]}
932[info] - should result in {"a":["b"]}
933[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
934[info] - should result in {"a": {"b": "d"}}
935[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
936[info] - should result in {"a": [1]}
937[info] patching ["a","b"] with ["c","d"]
938[info] - should result in ["c","d"]
939[info] patching {"a":"b"} with ["c"]
940[info] - should result in ["c"]
941[info] patching {"a":"foo"} with null
942[info] - should result in null
943[info] patching {"a":"foo"} with "bar"
944[info] - should result in "bar"
945[info] patching {"e":null} with {"a":1}
946[info] - should result in {"e":null,"a":1}
947[info] patching [1,2] with {"a":"b","c":null}
948[info] - should result in {"a":"b"}
949[info] patching {} with {"a":{"bb":{"ccc": null}}}
950[info] - should result in {"a":{"bb":{}}}
951[info] PlayJsonJsonDiff:
952[info] a diff
953[info] - should be empty if created between two equal values
954[info] - should be a simple replacement if the two values are completely different
955[info] - should contain an add operation for each added field
956[info] - should contain a remove operation for each removed field
957[info] - should correctly handle array diffs in objects
958[info] - should contain a replace operation for each changed field value
959[info] - should contain an add operation for each added element
960[info] - should contain a remove operation for each deleted element
961[info] - should contain a replace operation for each value that changed
962[info] applying a diff
963[info] - should be a fix point when applied to the first object used for the diff
964[info] applying a diff to strings
965[info] - should provide a correct string representation
966[info] a remembering diff
967[info] - should correctly add removed values in array diffs
968[info] - should correctly add removed values in object diffs
969[info] - should correctly add replaced values in object diffs
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-RC4/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0-RC4/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] CirceTestJsonPointer:
987[info] an empty string
988[info] - should be parsed as an empty pointer
989[info] the slash pointer
990[info] - should be parsed as the pointer to empty element at root
991[info] a string with a trailing forward slash
992[info] - should parse with an empty final element
993[info] a pointer string with one chunk
994[info] - should be parsed as a pointer with one element
995[info] occurrences of ~0
996[info] - should be replaced by occurrences of ~
997[info] occurrences of ~1
998[info] - should be replaced by occurrences of /
999[info] occurrences of ~
1000[info] - should be directly followed by either 0 or 1
1001[info] a non empty pointer
1002[info] - should start with a /
1003[info] a pointer to a label
1004[info] - should be evaluated to the label value if it is one level deep
1005[info] - should be evaluated to the end label value if it is several levels deep
1006[info] - should be evaluated to nothing if the final element is unknown
1007[info] - should produce an error if there is an unknown element in the middle of the pointer
1008[info] a pointer to an array element
1009[info] - should be evaluated to the value at the given index
1010[info] - should produce an error if it is out of the array bounds
1011[info] - should produce an error if it is the '-' element
1012[info] a number pointer
1013[info] - should be parsed as a string label if it overflows int capacity
1014[info] CirceTestJsonMergePatch:
1015[info] patching {"a":"b"} with {"a":"c"}
1016[info] - should result in {"a":"c"}
1017[info] patching {"a":"b"} with {"b":"c"}
1018[info] - should result in {"a":"b","b":"c"}
1019[info] patching {"a":"b"} with {"a":null}
1020[info] - should result in {}
1021[info] patching {"a":"b","b":"c"} with {"a":null}
1022[info] - should result in {"b":"c"}
1023[info] patching {"a":["b"]} with {"a":"c"}
1024[info] - should result in {"a":"c"}
1025[info] patching {"a":"c"} with {"a":["b"]}
1026[info] - should result in {"a":["b"]}
1027[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
1028[info] - should result in {"a": {"b": "d"}}
1029[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
1030[info] - should result in {"a": [1]}
1031[info] patching ["a","b"] with ["c","d"]
1032[info] - should result in ["c","d"]
1033[info] patching {"a":"b"} with ["c"]
1034[info] - should result in ["c"]
1035[info] patching {"a":"foo"} with null
1036[info] - should result in null
1037[info] patching {"a":"foo"} with "bar"
1038[info] - should result in "bar"
1039[info] patching {"e":null} with {"a":1}
1040[info] - should result in {"e":null,"a":1}
1041[info] patching [1,2] with {"a":"b","c":null}
1042[info] - should result in {"a":"b"}
1043[info] patching {} with {"a":{"bb":{"ccc": null}}}
1044[info] - should result in {"a":{"bb":{}}}
1045[info] CirceTestJsonPatch:
1046[info] applying an 'add' operation
1047[info] - should add the field to the object if it does not exist
1048[info] - should add a value with an empty string as the key
1049[info] - should replace the value if the pointer is the root
1050[info] - should replace the field value if it does exist
1051[info] - should add an element to the array at the given index
1052[info] - should add an element at the end of the array if the last element is '-'
1053[info] - should create a nested field if needed
1054[info] - should throw an error if some element is missing in the middle of the path
1055[info] - should throw an error if adding an element out of the array boundaries
1056[info] removing a label of an object
1057[info] - should result in the object being amputated from this label
1058[info] removing an element of an array
1059[info] - should result in the array being amputated from this element
1060[info] removing the '-' element of an array
1061[info] - should result in an error being thrown
1062[info] removing an element out of the array boundaries
1063[info] - should result in an error being thrown
1064[info] removing an unknown label from an object
1065[info] - should result in an error being thrown
1066[info] removing the root
1067[info] - should result in an error being thrown
1068[info] replacing an element in an object
1069[info] - should result in this element being replaced
1070[info] replacing an element in an array
1071[info] - should result in this element being replaced
1072[info] replacing the root
1073[info] - should result in the value being completely replaced
1074[info] replacing a non-existing element in an object
1075[info] - should result in an error being thrown
1076[info] replacing the '-' element of an array
1077[info] - should result in an error being thrown
1078[info] replacing an element out of the array boundaries
1079[info] - should result in an error being thrown
1080[info] moving a value from an object to an array
1081[info] - should result in the value being added to the array and removed from the object
1082[info] moving a value in a sub element
1083[info] - should result in an error being thrown
1084[info] moving the root
1085[info] - should result in an error being thrown
1086[info] copying an element in an object
1087[info] - should result in this element being copied in the expected path
1088[info] testing an existing element of an object
1089[info] - should succeed and not modify the original object
1090[info] testing an existing element with a non-expected value
1091[info] - should result in an error being thrown
1092[info] testing a non-existing element in an object
1093[info] - should result in an error being thrown
1094[info] CirceJsonMergeDiff:
1095[info] a diff
1096[info] - should be empty if created between two equal objects
1097[info] - should be a simple replacement if the two values are completely different
1098[info] - should be generated correctly for nested structures
1099[info] CirceSimpleDiff:
1100[info] a diff
1101[info] - should be empty if created between two equal values
1102[info] - should be a simple replacement if the two values are completely different
1103[info] - should conta be be bein an add operation for each added field
1104[info] - should contain a remove operation for each removed field
1105[info] - should correctly handle array diffs in objects (i.e. just replaced)
1106[info] - should contain a replace operation for each changed field value
1107[info] - should contain a replaced operation for the changed array (additions)
1108[info] - should contain a replaced operation for the changed array (deletions)
1109[info] - should contain a replace operation for the entire array if at least one element in it changed
1110[info] applying a diff
1111[info] - should be a fix point when applied to the first object used for the diff
1112[info] applying a diff to strings
1113[info] - should provide a correct string representation
1114[info] - should correctly add removed values in object diffs
1115[info] - should correctly add replaced values in object diffs
1116[info] a remembering diff
1117[info] - should remember old values
1118[info] CirceJsonDiff:
1119[info] a diff
1120[info] - should be empty if created between two equal values
1121[info] - should be a simple replacement if the two values are completely different
1122[info] - should contain an add operation for each added field
1123[info] - should contain a remove operation for each removed field
1124[info] - should correctly handle array diffs in objects
1125[info] - should contain a replace operation for each changed field value
1126[info] - should contain an add operation for each added element
1127[info] - should contain a remove operation for each deleted element
1128[info] - should contain a replace operation for each value that changed
1129[info] applying a diff
1130[info] - should be a fix point when applied to the first object used for the diff
1131[info] applying a diff to strings
1132[info] - should provide a correct string representation
1133[info] a remembering diff
1134[info] - should correctly add removed values in array diffs
1135[info] - should correctly add removed values in object diffs
1136[info] - should correctly add replaced values in object diffs
1137[info] CirceTestSerialization:
1138[info] a patch json
1139[info] - should be correctly deserialized from a Json object
1140[info] a patch object
1141[info] - should be correctly serialized to a Json object
1142[info] a merge patch
1143[info] - should be correctly deserialized from a Json object
1144[info] - should be correctly deserialized from a non-object Json value
1145[info] a merge patch object
1146[info] - should be correctly serialized
1147[info] a non-object patch
1148[info] - should be correctly serialized
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": 23283, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 325, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 197, "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": 1809, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1551, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1356, "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": 1778, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 1266, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 910, "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": 47, "warnings": 7, "errors": 0, "sourceVersion": "3.8"},
1603 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1604 "test-compile": {"status": "ok", "tookMs": 1717, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 641, "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": 1567, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1204, "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": 1292, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1454, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 962, "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: 79 s (0:01:19.0), completed Dec 22, 2025, 5:51:01 PM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.