Build Logs
gnieh/diffson • 3.8.0-RC2:2025-11-28
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-RC2
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-RC2"
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-RC2
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0-RC2
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-RC2
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-RC2"
71"++3.8.0-RC2 -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-RC2 """{"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.565s.
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-RC2
93OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in benchmarksJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in ujsonJVM/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in diffsonJS/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in playJsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in circeJS/crossScalaVersions
101[info] set scmInfo to https://github.com/gnieh/diffson
102OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in diffsonJVM/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in circeNative/crossScalaVersions
104OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in ujsonNative/crossScalaVersions
106OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in playJsonNative/crossScalaVersions
107OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in diffsonNative/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in testkitJVM/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in ujsonJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in sprayJsonJVM/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in coreNative/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in circeJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0-RC2 -> 3.8.0-RC2 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0-RC2 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0-RC2)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0-RC2)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0-RC2)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0-RC2)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0-RC2)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0-RC2)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0-RC2)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0-RC2)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0-RC2)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0-RC2)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0-RC2)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0-RC2)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0-RC2)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0-RC2)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0-RC2)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0-RC2)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0-RC2)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0-RC2)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0-RC2)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0-RC2)
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 Nov 28, 2025, 2:52:17 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-RC2/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-RC2/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-RC2/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC2/test-classes ...
240[info] done compiling
241[info] SprayJsonSimpleDiff:
242[info] a diff
243[info] - should be empty if created between two equal values
244[info] - should be a simple replacement if the two values are completely different
245[info] - should conta be be bein an add operation for each added field
246[info] - should contain a remove operation for each removed field
247[info] - should correctly handle array diffs in objects (i.e. just replaced)
248[info] - should contain a replace operation for each changed field value
249[info] - should contain a replaced operation for the changed array (additions)
250[info] - should contain a replaced operation for the changed array (deletions)
251[info] - should contain a replace operation for the entire array if at least one element in it changed
252[info] applying a diff
253[info] - should be a fix point when applied to the first object used for the diff
254[info] applying a diff to strings
255[info] - should provide a correct string representation
256[info] - should correctly add removed values in object diffs
257[info] - should correctly add replaced values in object diffs
258[info] a remembering diff
259[info] - should remember old values
260[info] SprayJsonJsonDiff:
261[info] a diff
262[info] - should be empty if created between two equal values
263[info] - should be a simple replacement if the two values are completely different
264[info] - should contain an add operation for each added field
265[info] - should contain a remove operation for each removed field
266[info] - should correctly handle array diffs in objects
267[info] - should contain a replace operation for each changed field value
268[info] - should contain an add operation for each added element
269[info] - should contain a remove operation for each deleted element
270[info] - should contain a replace operation for each value that changed
271[info] applying a diff
272[info] - should be a fix point when applied to the first object used for the diff
273[info] applying a diff to strings
274[info] - should provide a correct string representation
275[info] a remembering diff
276[info] - should correctly add removed values in array diffs
277[info] - should correctly add removed values in object diffs
278[info] - should correctly add replaced values in object diffs
279[info] SprayJsonTestSerialization:
280[info] a patch json
281[info] - should be correctly deserialized from a Json object
282[info] a patch object
283[info] - should be correctly serialized to a Json object
284[info] a merge patch
285[info] - should be correctly deserialized from a Json object
286[info] - should be correctly deserialized from a non-object Json value
287[info] a merge patch object
288[info] - should be correctly serialized
289[info] a non-object patch
290[info] - should be correctly serialized
291[info] SprayJsonTestJsonMergePatch:
292[info] patching {"a":"b"} with {"a":"c"}
293[info] - should result in {"a":"c"}
294[info] patching {"a":"b"} with {"b":"c"}
295[info] - should result in {"a":"b","b":"c"}
296[info] patching {"a":"b"} with {"a":null}
297[info] - should result in {}
298[info] patching {"a":"b","b":"c"} with {"a":null}
299[info] - should result in {"b":"c"}
300[info] patching {"a":["b"]} with {"a":"c"}
301[info] - should result in {"a":"c"}
302[info] patching {"a":"c"} with {"a":["b"]}
303[info] - should result in {"a":["b"]}
304[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
305[info] - should result in {"a": {"b": "d"}}
306[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
307[info] - should result in {"a": [1]}
308[info] patching ["a","b"] with ["c","d"]
309[info] - should result in ["c","d"]
310[info] patching {"a":"b"} with ["c"]
311[info] - should result in ["c"]
312[info] patching {"a":"foo"} with null
313[info] - should result in null
314[info] patching {"a":"foo"} with "bar"
315[info] - should result in "bar"
316[info] patching {"e":null} with {"a":1}
317[info] - should result in {"e":null,"a":1}
318[info] patching [1,2] with {"a":"b","c":null}
319[info] - should result in {"a":"b"}
320[info] patching {} with {"a":{"bb":{"ccc": null}}}
321[info] - should result in {"a":{"bb":{}}}
322[info] SprayJsonJsonMergeDiff:
323[info] a diff
324[info] - should be empty if created between two equal objects
325[info] - should be a simple replacement if the two values are completely different
326[info] - should be generated correctly for nested structures
327[info] SprayJsonTestJsonPatch:
328[info] applying an 'add' operation
329[info] - should add the field to the object if it does not exist
330[info] - should add a value with an empty string as the key
331[info] - should replace the value if the pointer is the root
332[info] - should replace the field value if it does exist
333[info] - should add an element to the array at the given index
334[info] - should add an element at the end of the array if the last element is '-'
335[info] - should create a nested field if needed
336[info] - should throw an error if some element is missing in the middle of the path
337[info] - should throw an error if adding an element out of the array boundaries
338[info] removing a label of an object
339[info] - should result in the object being amputated from this label
340[info] removing an element of an array
341[info] - should result in the array being amputated from this element
342[info] removing the '-' element of an array
343[info] - should result in an error being thrown
344[info] removing an element out of the array boundaries
345[info] - should result in an error being thrown
346[info] removing an unknown label from an object
347[info] - should result in an error being thrown
348[info] removing the root
349[info] - should result in an error being thrown
350[info] replacing an element in an object
351[info] - should result in this element being replaced
352[info] replacing an element in an array
353[info] - should result in this element being replaced
354[info] replacing the root
355[info] - should result in the value being completely replaced
356[info] replacing a non-existing element in an object
357[info] - should result in an error being thrown
358[info] replacing the '-' element of an array
359[info] - should result in an error being thrown
360[info] replacing an element out of the array boundaries
361[info] - should result in an error being thrown
362[info] moving a value from an object to an array
363[info] - should result in the value being added to the array and removed from the object
364[info] moving a value in a sub element
365[info] - should result in an error being thrown
366[info] moving the root
367[info] - should result in an error being thrown
368[info] copying an element in an object
369[info] - should result in this element being copied in the expected path
370[info] testing an existing element of an object
371[info] - should succeed and not modify the original object
372[info] testing an existing element with a non-expected value
373[info] - should result in an error being thrown
374[info] testing a non-existing element in an object
375[info] - should result in an error being thrown
376[info] SprayJsonTestJsonPointer:
377[info] an empty string
378[info] - should be parsed as an empty pointer
379[info] the slash pointer
380[info] - should be parsed as the pointer to empty element at root
381[info] a string with a trailing forward slash
382[info] - should parse with an empty final element
383[info] a pointer string with one chunk
384[info] - should be parsed as a pointer with one element
385[info] occurrences of ~0
386[info] - should be replaced by occurrences of ~
387[info] occurrences of ~1
388[info] - should be replaced by occurrences of /
389[info] occurrences of ~
390[info] - should be directly followed by either 0 or 1
391[info] a non empty pointer
392[info] - should start with a /
393[info] a pointer to a label
394[info] - should be evaluated to the label value if it is one level deep
395[info] - should be evaluated to the end label value if it is several levels deep
396[info] - should be evaluated to nothing if the final element is unknown
397[info] - should produce an error if there is an unknown element in the middle of the pointer
398[info] a pointer to an array element
399[info] - should be evaluated to the value at the given index
400[info] - should produce an error if it is out of the array bounds
401[info] - should produce an error if it is the '-' element
402[info] a number pointer
403[info] - should be parsed as a string label if it overflows int capacity
404[info] SprayJsonConformance:
405[info] + Specification conformance tests
406[info] - 4.1. add with missing object
407[info] - A.1. Adding an Object Member
408[info] - A.2. Adding an Array Element
409[info] - A.3. Removing an Object Member
410[info] - A.4. Removing an Array Element
411[info] - A.5. Replacing a Value
412[info] - A.6. Moving a Value
413[info] - A.7. Moving an Array Element
414[info] - A.8. Testing a Value: Success
415[info] - A.9. Testing a Value: Error
416[info] - A.10. Adding a nested Member Object
417[info] - A.11. Ignoring Unrecognized Elements
418[info] - A.12. Adding to a Non-existent Target
419[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
420[info] - A.14. ~ Escape Ordering
421[info] - A.15. Comparing Strings and Numbers
422[info] - A.16. Adding an Array Value
423[info] + Misceallaneous tests
424[info] - empty list, empty docs
425[info] - empty patch list
426[info] - rearrangements OK?
427[info] - rearrangements OK? How about one level down ... array
428[info] - rearrangements OK? How about one level down...
429[info] - add replaces any existing field
430[info] - toplevel array
431[info] - toplevel array, no change
432[info] - toplevel object, numeric string
433[info] - toplevel object, integer
434[info] - Toplevel scalar values OK?
435[info] - Add, / target
436[info] - Add composite value at top level
437[info] - Add into composite value
438[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/8","value":"5"}]
439[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/-1","value":"5"}]
440[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":true}]
441[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":false}]
442[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":null}]
443[info] - 0 can be an array index or object element name
444[info] - ["foo"] patched with [{"op":"add","path":"/1","value":"bar"}]
445[info] - ["foo","sil"] patched with [{"op":"add","path":"/1","value":"bar"}]
446[info] - ["foo","sil"] patched with [{"op":"add","path":"/0","value":"bar"}]
447[info] - ["foo","sil"] patched with [{"op":"add","path":"/2","value":"bar"}]
448[info] - test against implementation-specific numeric parsing
449[info] - test with bad number should fail
450[info] - ["foo","sil"] patched with [{"op":"add","path":"/bar","value":42}]
451[info] - value in array add not flattened
452[info] - {"bar":[1,2,3,4],"foo":1} patched with [{"op":"remove","path":"/bar"}]
453[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"remove","path":"/baz/0/qux"}]
454[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"replace","path":"/foo","value":[1,2,3,4]}]
455[info] - {"baz":[{"qux":"hello"}],"foo":[1,2,3,4]} patched with [{"op":"replace","path":"/baz/0/qux","value":"world"}]
456[info] - ["foo"] patched with [{"op":"replace","path":"/0","value":"bar"}]
457[info] - [""] patched with [{"op":"replace","path":"/0","value":0}]
458[info] - [""] patched with [{"op":"replace","path":"/0","value":true}]
459[info] - [""] patched with [{"op":"replace","path":"/0","value":false}]
460[info] - [""] patched with [{"op":"replace","path":"/0","value":null}]
461[info] - value in array replace not flattened
462[info] - replace whole document
463[info] - spurious patch properties
464[info] - null value should still be valid obj property
465[info] - test should pass despite rearrangement
466[info] - test should pass despite (nested) rearrangement
467[info] - test should pass - no error
468[info] - {"foo":{"bar":[1,2,5,4]}} patched with [{"op":"test","path":"/foo","value":[1,2]}]
469[info] - Whole document
470[info] - Empty-string element
471[info] - {"":0," ":7,"a/b":1,"c%d":2,"e^f":3,"foo":["bar","baz"],"g|h":4,"i\\j":5,"k\"l":6,"m~n":8} patched with [{"op":"test","path":"/foo","value":["bar","baz"]},{"op":"test","path":"/foo/0","value":"bar"},{"op":"test","path":"/","value":0},{"op":"test","path":"/a~1b","value":1},{"op":"test","path":"/c%d","value":2},{"op":"test","path":"/e^f","value":3},{"op":"test","path":"/g|h","value":4},{"op":"test","path":"/i\\j","value":5},{"op":"test","path":"/k\"l","value":6},{"op":"test","path":"/ ","value":7},{"op":"test","path":"/m~0n","value":8}]
472[info] - Move to same location has no effect
473[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"from":"/foo","op":"move","path":"/bar"}]
474[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0/qux","op":"move","path":"/baz/1"}]
475[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0","op":"copy","path":"/boo"}]
476[info] - replacing the root of the document is possible with add
477[info] - Adding to "/-" adds to the end of the array
478[info] - Adding to "/-" adds to the end of the array, even n levels down
479[info] - test remove with bad number should fail
480[info] - test remove on array
481[info] - test repeated removes
482[info] - test remove with bad index should fail
483[info] - test replace with bad number should fail
484[info] - test copy with bad number should fail
485[info] - test move with bad number should fail
486[info] - test add with bad number should fail
487[info] - missing 'value' parameter to add
488[info] - missing 'value' parameter to replace
489[info] - missing 'value' parameter to test
490[info] - missing value parameter to test - where undef is falsy
491[info] - missing from parameter to copy
492[info] - missing from parameter to move
493[info] - duplicate ops !!! IGNORED !!!
494[info] - unrecognized op should fail
495[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
496Starting build for ProjectRef(file:/build/repo/,ujsonJVM) (diffson-ujson)... [2/6]
497Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
498[info] compiling 2 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC2/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC2/test-classes ...
501[info] done compiling
502[info] UjsonTestJsonMergePatch:
503[info] patching {"a":"b"} with {"a":"c"}
504[info] - should result in {"a":"c"}
505[info] patching {"a":"b"} with {"b":"c"}
506[info] - should result in {"a":"b","b":"c"}
507[info] patching {"a":"b"} with {"a":null}
508[info] - should result in {}
509[info] patching {"a":"b","b":"c"} with {"a":null}
510[info] - should result in {"b":"c"}
511[info] patching {"a":["b"]} with {"a":"c"}
512[info] - should result in {"a":"c"}
513[info] patching {"a":"c"} with {"a":["b"]}
514[info] - should result in {"a":["b"]}
515[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
516[info] - should result in {"a": {"b": "d"}}
517[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
518[info] - should result in {"a": [1]}
519[info] patching ["a","b"] with ["c","d"]
520[info] - should result in ["c","d"]
521[info] patching {"a":"b"} with ["c"]
522[info] - should result in ["c"]
523[info] patching {"a":"foo"} with null
524[info] - should result in null
525[info] patching {"a":"foo"} with "bar"
526[info] - should result in "bar"
527[info] patching {"e":null} with {"a":1}
528[info] - should result in {"e":null,"a":1}
529[info] patching [1,2] with {"a":"b","c":null}
530[info] - should result in {"a":"b"}
531[info] patching {} with {"a":{"bb":{"ccc": null}}}
532[info] - should result in {"a":{"bb":{}}}
533[info] UjsonSimpleDiff:
534[info] a diff
535[info] - should be empty if created between two equal values
536[info] - should be a simple replacement if the two values are completely different
537[info] - should conta be be bein an add operation for each added field
538[info] - should contain a remove operation for each removed field
539[info] - should correctly handle array diffs in objects (i.e. just replaced)
540[info] - should contain a replace operation for each changed field value
541[info] - should contain a replaced operation for the changed array (additions)
542[info] - should contain a replaced operation for the changed array (deletions)
543[info] - should contain a replace operation for the entire array if at least one element in it changed
544[info] applying a diff
545[info] - should be a fix point when applied to the first object used for the diff
546[info] applying a diff to strings
547[info] - should provide a correct string representation
548[info] - should correctly add removed values in object diffs
549[info] - should correctly add replaced values in object diffs
550[info] a remembering diff
551[info] - should remember old values
552[info] UjsonTestSerialization:
553[info] a patch json
554[info] - should be correctly deserialized from a Json object
555[info] a patch object
556[info] - should be correctly serialized to a Json object
557[info] a merge patch
558[info] - should be correctly deserialized from a Json object
559[info] - should be correctly deserialized from a non-object Json value
560[info] a merge patch object
561[info] - should be correctly serialized
562[info] a non-object patch
563[info] - should be correctly serialized
564[info] UjsonJsonJsonMergeDiff:
565[info] a diff
566[info] - should be empty if created between two equal objects
567[info] - should be a simple replacement if the two values are completely different
568[info] - should be generated correctly for nested structures
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-RC2/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-RC2/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC2/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] PlayJsonTestJsonPointer:
722[info] an empty string
723[info] - should be parsed as an empty pointer
724[info] the slash pointer
725[info] - should be parsed as the pointer to empty element at root
726[info] a string with a trailing forward slash
727[info] - should parse with an empty final element
728[info] a pointer string with one chunk
729[info] - should be parsed as a pointer with one element
730[info] occurrences of ~0
731[info] - should be replaced by occurrences of ~
732[info] occurrences of ~1
733[info] - should be replaced by occurrences of /
734[info] occurrences of ~
735[info] - should be directly followed by either 0 or 1
736[info] a non empty pointer
737[info] - should start with a /
738[info] a pointer to a label
739[info] - should be evaluated to the label value if it is one level deep
740[info] - should be evaluated to the end label value if it is several levels deep
741[info] - should be evaluated to nothing if the final element is unknown
742[info] - should produce an error if there is an unknown element in the middle of the pointer
743[info] a pointer to an array element
744[info] - should be evaluated to the value at the given index
745[info] - should produce an error if it is out of the array bounds
746[info] - should produce an error if it is the '-' element
747[info] a number pointer
748[info] - should be parsed as a string label if it overflows int capacity
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] PlayJsonJsonDiff:
762[info] a diff
763[info] - should be empty if created between two equal values
764[info] - should be a simple replacement if the two values are completely different
765[info] - should contain an add operation for each added field
766[info] - should contain a remove operation for each removed field
767[info] - should correctly handle array diffs in objects
768[info] - should contain a replace operation for each changed field value
769[info] - should contain an add operation for each added element
770[info] - should contain a remove operation for each deleted element
771[info] - should contain a replace operation for each value that changed
772[info] applying a diff
773[info] - should be a fix point when applied to the first object used for the diff
774[info] applying a diff to strings
775[info] - should provide a correct string representation
776[info] a remembering diff
777[info] - should correctly add removed values in array diffs
778[info] - should correctly add removed values in object diffs
779[info] - should correctly add replaced values in object diffs
780[info] PlayJsonSimpleDiff:
781[info] a diff
782[info] - should be empty if created between two equal values
783[info] - should be a simple replacement if the two values are completely different
784[info] - should conta be be bein an add operation for each added field
785[info] - should contain a remove operation for each removed field
786[info] - should correctly handle array diffs in objects (i.e. just replaced)
787[info] - should contain a replace operation for each changed field value
788[info] - should contain a replaced operation for the changed array (additions)
789[info] - should contain a replaced operation for the changed array (deletions)
790[info] - should contain a replace operation for the entire array if at least one element in it changed
791[info] applying a diff
792[info] - should be a fix point when applied to the first object used for the diff
793[info] applying a diff to strings
794[info] - should provide a correct string representation
795[info] - should correctly add removed values in object diffs
796[info] - should correctly add replaced values in object diffs
797[info] a remembering diff
798[info] - should remember old values
799[info] PlayJsonTestJsonMergePatch:
800[info] patching {"a":"b"} with {"a":"c"}
801[info] - should result in {"a":"c"}
802[info] patching {"a":"b"} with {"b":"c"}
803[info] - should result in {"a":"b","b":"c"}
804[info] patching {"a":"b"} with {"a":null}
805[info] - should result in {}
806[info] patching {"a":"b","b":"c"} with {"a":null}
807[info] - should result in {"b":"c"}
808[info] patching {"a":["b"]} with {"a":"c"}
809[info] - should result in {"a":"c"}
810[info] patching {"a":"c"} with {"a":["b"]}
811[info] - should result in {"a":["b"]}
812[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
813[info] - should result in {"a": {"b": "d"}}
814[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
815[info] - should result in {"a": [1]}
816[info] patching ["a","b"] with ["c","d"]
817[info] - should result in ["c","d"]
818[info] patching {"a":"b"} with ["c"]
819[info] - should result in ["c"]
820[info] patching {"a":"foo"} with null
821[info] - should result in null
822[info] patching {"a":"foo"} with "bar"
823[info] - should result in "bar"
824[info] patching {"e":null} with {"a":1}
825[info] - should result in {"e":null,"a":1}
826[info] patching [1,2] with {"a":"b","c":null}
827[info] - should result in {"a":"b"}
828[info] patching {} with {"a":{"bb":{"ccc": null}}}
829[info] - should result in {"a":{"bb":{}}}
830[info] PlayJsonTestJsonPatch:
831[info] applying an 'add' operation
832[info] - should add the field to the object if it does not exist
833[info] - should add a value with an empty string as the key
834[info] - should replace the value if the pointer is the root
835[info] - should replace the field value if it does exist
836[info] - should add an element to the array at the given index
837[info] - should add an element at the end of the array if the last element is '-'
838[info] - should create a nested field if needed
839[info] - should throw an error if some element is missing in the middle of the path
840[info] - should throw an error if adding an element out of the array boundaries
841[info] removing a label of an object
842[info] - should result in the object being amputated from this label
843[info] removing an element of an array
844[info] - should result in the array being amputated from this element
845[info] removing the '-' element of an array
846[info] - should result in an error being thrown
847[info] removing an element out of the array boundaries
848[info] - should result in an error being thrown
849[info] removing an unknown label from an object
850[info] - should result in an error being thrown
851[info] removing the root
852[info] - should result in an error being thrown
853[info] replacing an element in an object
854[info] - should result in this element being replaced
855[info] replacing an element in an array
856[info] - should result in this element being replaced
857[info] replacing the root
858[info] - should result in the value being completely replaced
859[info] replacing a non-existing element in an object
860[info] - should result in an error being thrown
861[info] replacing the '-' element of an array
862[info] - should result in an error being thrown
863[info] replacing an element out of the array boundaries
864[info] - should result in an error being thrown
865[info] moving a value from an object to an array
866[info] - should result in the value being added to the array and removed from the object
867[info] moving a value in a sub element
868[info] - should result in an error being thrown
869[info] moving the root
870[info] - should result in an error being thrown
871[info] copying an element in an object
872[info] - should result in this element being copied in the expected path
873[info] testing an existing element of an object
874[info] - should succeed and not modify the original object
875[info] testing an existing element with a non-expected value
876[info] - should result in an error being thrown
877[info] testing a non-existing element in an object
878[info] - should result in an error being thrown
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-RC2/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0-RC2/test-classes ...
976[warn] -- [E198] Unused Symbol Warning: /build/repo/circe/jvm/src/test/scala/diffson/conformance/CirceConformance.scala:23:23
977[warn] 23 |import io.circe.syntax._
978[warn] | ^
979[warn] | unused import
980[warn] -- [E198] Unused Symbol Warning: /build/repo/circe/shared/src/test/scala/diffson/circe/TestProtocol.scala:23:22
981[warn] 23 |import cats.implicits._
982[warn] | ^
983[warn] | unused import
984[warn] two warnings found
985[info] done compiling
986[info] CirceJsonMergeDiff:
987[info] a diff
988[info] - should be empty if created between two equal objects
989[info] - should be a simple replacement if the two values are completely different
990[info] - should be generated correctly for nested structures
991[info] CirceTestJsonPointer:
992[info] an empty string
993[info] - should be parsed as an empty pointer
994[info] the slash pointer
995[info] - should be parsed as the pointer to empty element at root
996[info] a string with a trailing forward slash
997[info] - should parse with an empty final element
998[info] a pointer string with one chunk
999[info] - should be parsed as a pointer with one element
1000[info] occurrences of ~0
1001[info] - should be replaced by occurrences of ~
1002[info] occurrences of ~1
1003[info] - should be replaced by occurrences of /
1004[info] occurrences of ~
1005[info] - should be directly followed by either 0 or 1
1006[info] a non empty pointer
1007[info] - should start with a /
1008[info] a pointer to a label
1009[info] - should be evaluated to the label value if it is one level deep
1010[info] - should be evaluated to the end label value if it is several levels deep
1011[info] - should be evaluated to nothing if the final element is unknown
1012[info] - should produce an error if there is an unknown element in the middle of the pointer
1013[info] a pointer to an array element
1014[info] - should be evaluated to the value at the given index
1015[info] - should produce an error if it is out of the array bounds
1016[info] - should produce an error if it is the '-' element
1017[info] a number pointer
1018[info] - should be parsed as a string label if it overflows int capacity
1019[info] CirceTestJsonPatch:
1020[info] applying an 'add' operation
1021[info] - should add the field to the object if it does not exist
1022[info] - should add a value with an empty string as the key
1023[info] - should replace the value if the pointer is the root
1024[info] - should replace the field value if it does exist
1025[info] - should add an element to the array at the given index
1026[info] - should add an element at the end of the array if the last element is '-'
1027[info] - should create a nested field if needed
1028[info] - should throw an error if some element is missing in the middle of the path
1029[info] - should throw an error if adding an element out of the array boundaries
1030[info] removing a label of an object
1031[info] - should result in the object being amputated from this label
1032[info] removing an element of an array
1033[info] - should result in the array being amputated from this element
1034[info] removing the '-' element of an array
1035[info] - should result in an error being thrown
1036[info] removing an element out of the array boundaries
1037[info] - should result in an error being thrown
1038[info] removing an unknown label from an object
1039[info] - should result in an error being thrown
1040[info] removing the root
1041[info] - should result in an error being thrown
1042[info] replacing an element in an object
1043[info] - should result in this element being replaced
1044[info] replacing an element in an array
1045[info] - should result in this element being replaced
1046[info] replacing the root
1047[info] - should result in the value being completely replaced
1048[info] replacing a non-existing element in an object
1049[info] - should result in an error being thrown
1050[info] replacing the '-' element of an array
1051[info] - should result in an error being thrown
1052[info] replacing an element out of the array boundaries
1053[info] - should result in an error being thrown
1054[info] moving a value from an object to an array
1055[info] - should result in the value being added to the array and removed from the object
1056[info] moving a value in a sub element
1057[info] - should result in an error being thrown
1058[info] moving the root
1059[info] - should result in an error being thrown
1060[info] copying an element in an object
1061[info] - should result in this element being copied in the expected path
1062[info] testing an existing element of an object
1063[info] - should succeed and not modify the original object
1064[info] testing an existing element with a non-expected value
1065[info] - should result in an error being thrown
1066[info] testing a non-existing element in an object
1067[info] - should result in an error being thrown
1068[info] CirceTestObjectDiff:
1069[info] a wide object diffed with an empty one
1070[info] - should not cause stack overflows
1071[info] a wide object diffed with itself
1072[info] - should not cause stack overflows
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] CirceSimpleDiff:
1105[info] a diff
1106[info] - should be empty if created between two equal values
1107[info] - should be a simple replacement if the two values are completely different
1108[info] - should conta be be bein an add operation for each added field
1109[info] - should contain a remove operation for each removed field
1110[info] - should correctly handle array diffs in objects (i.e. just replaced)
1111[info] - should contain a replace operation for each changed field value
1112[info] - should contain a replaced operation for the changed array (additions)
1113[info] - should contain a replaced operation for the changed array (deletions)
1114[info] - should contain a replace operation for the entire array if at least one element in it changed
1115[info] applying a diff
1116[info] - should be a fix point when applied to the first object used for the diff
1117[info] applying a diff to strings
1118[info] - should provide a correct string representation
1119[info] - should correctly add removed values in object diffs
1120[info] - should correctly add replaced values in object diffs
1121[info] a remembering diff
1122[info] - should remember old values
1123[info] CirceTestSerialization:
1124[info] a patch json
1125[info] - should be correctly deserialized from a Json object
1126[info] a patch object
1127[info] - should be correctly serialized to a Json object
1128[info] a merge patch
1129[info] - should be correctly deserialized from a Json object
1130[info] - should be correctly deserialized from a non-object Json value
1131[info] a merge patch object
1132[info] - should be correctly serialized
1133[info] a non-object patch
1134[info] - should be correctly serialized
1135[info] CirceJsonDiff:
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 contain 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
1142[info] - should contain a replace operation for each changed field value
1143[info] - should contain an add operation for each added element
1144[info] - should contain a remove operation for each deleted element
1145[info] - should contain a replace operation for each value that 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] a remembering diff
1151[info] - should correctly add removed values in array diffs
1152[info] - should correctly add removed values in object diffs
1153[info] - should correctly add replaced values in object diffs
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": 24805, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 281, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 218, "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": 1896, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1825, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1291, "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": 1654, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 1516, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 836, "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": 64, "warnings": 7, "errors": 0, "sourceVersion": "3.8"},
1603 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1604 "test-compile": {"status": "ok", "tookMs": 1879, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 470, "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": 1761, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1382, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1615 "test": {"status": "ok", "tookMs": 1004, "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": 1400, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1796, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 1055, "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: 80 s (0:01:20.0), completed Nov 28, 2025, 2:53:38 PM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.