Build Logs

gnieh/diffson • 3.8.0-RC3:2025-12-04

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-RC3
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-RC3"
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-RC3
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0-RC3
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-RC3
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-RC3"
71"++3.8.0-RC3 -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-RC3 """{"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 7.943s.
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-RC3
93OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in ujsonJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in benchmarksJVM/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in diffsonJS/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in playJsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in circeJS/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in circeNative/crossScalaVersions
102OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in ujsonNative/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in playJsonNative/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in diffsonJVM/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in diffsonNative/crossScalaVersions
106[info] set scmInfo to https://github.com/gnieh/diffson
107OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in testkitJVM/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in ujsonJS/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in sprayJsonJVM/crossScalaVersions
110OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in coreNative/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in circeJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0-RC3 -> 3.8.0-RC3 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0-RC3 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0-RC3)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0-RC3)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0-RC3)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0-RC3)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0-RC3)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0-RC3)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0-RC3)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0-RC3)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0-RC3)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0-RC3)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0-RC3)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0-RC3)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0-RC3)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0-RC3)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0-RC3)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0-RC3)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0-RC3)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0-RC3)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0-RC3)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0-RC3)
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 4, 2025, 3:13:46 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-RC3/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-RC3/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-RC3/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0-RC3/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] SprayJsonTestJsonMergePatch:
261[info] patching {"a":"b"} with {"a":"c"}
262[info] - should result in {"a":"c"}
263[info] patching {"a":"b"} with {"b":"c"}
264[info] - should result in {"a":"b","b":"c"}
265[info] patching {"a":"b"} with {"a":null}
266[info] - should result in {}
267[info] patching {"a":"b","b":"c"} with {"a":null}
268[info] - should result in {"b":"c"}
269[info] patching {"a":["b"]} with {"a":"c"}
270[info] - should result in {"a":"c"}
271[info] patching {"a":"c"} with {"a":["b"]}
272[info] - should result in {"a":["b"]}
273[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
274[info] - should result in {"a": {"b": "d"}}
275[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
276[info] - should result in {"a": [1]}
277[info] patching ["a","b"] with ["c","d"]
278[info] - should result in ["c","d"]
279[info] patching {"a":"b"} with ["c"]
280[info] - should result in ["c"]
281[info] patching {"a":"foo"} with null
282[info] - should result in null
283[info] patching {"a":"foo"} with "bar"
284[info] - should result in "bar"
285[info] patching {"e":null} with {"a":1}
286[info] - should result in {"e":null,"a":1}
287[info] patching [1,2] with {"a":"b","c":null}
288[info] - should result in {"a":"b"}
289[info] patching {} with {"a":{"bb":{"ccc": null}}}
290[info] - should result in {"a":{"bb":{}}}
291[info] SprayJsonTestSerialization:
292[info] a patch json
293[info] - should be correctly deserialized from a Json object
294[info] a patch object
295[info] - should be correctly serialized to a Json object
296[info] a merge patch
297[info] - should be correctly deserialized from a Json object
298[info] - should be correctly deserialized from a non-object Json value
299[info] a merge patch object
300[info] - should be correctly serialized
301[info] a non-object patch
302[info] - should be correctly serialized
303[info] SprayJsonJsonMergeDiff:
304[info] a diff
305[info] - should be empty if created between two equal objects
306[info] - should be a simple replacement if the two values are completely different
307[info] - should be generated correctly for nested structures
308[info] SprayJsonTestJsonPointer:
309[info] an empty string
310[info] - should be parsed as an empty pointer
311[info] the slash pointer
312[info] - should be parsed as the pointer to empty element at root
313[info] a string with a trailing forward slash
314[info] - should parse with an empty final element
315[info] a pointer string with one chunk
316[info] - should be parsed as a pointer with one element
317[info] occurrences of ~0
318[info] - should be replaced by occurrences of ~
319[info] occurrences of ~1
320[info] - should be replaced by occurrences of /
321[info] occurrences of ~
322[info] - should be directly followed by either 0 or 1
323[info] a non empty pointer
324[info] - should start with a /
325[info] a pointer to a label
326[info] - should be evaluated to the label value if it is one level deep
327[info] - should be evaluated to the end label value if it is several levels deep
328[info] - should be evaluated to nothing if the final element is unknown
329[info] - should produce an error if there is an unknown element in the middle of the pointer
330[info] a pointer to an array element
331[info] - should be evaluated to the value at the given index
332[info] - should produce an error if it is out of the array bounds
333[info] - should produce an error if it is the '-' element
334[info] a number pointer
335[info] - should be parsed as a string label if it overflows int capacity
336[info] SprayJsonJsonDiff:
337[info] a diff
338[info] - should be empty if created between two equal values
339[info] - should be a simple replacement if the two values are completely different
340[info] - should contain an add operation for each added field
341[info] - should contain a remove operation for each removed field
342[info] - should correctly handle array diffs in objects
343[info] - should contain a replace operation for each changed field value
344[info] - should contain an add operation for each added element
345[info] - should contain a remove operation for each deleted element
346[info] - should contain a replace operation for each value that changed
347[info] applying a diff
348[info] - should be a fix point when applied to the first object used for the diff
349[info] applying a diff to strings
350[info] - should provide a correct string representation
351[info] a remembering diff
352[info] - should correctly add removed values in array diffs
353[info] - should correctly add removed values in object diffs
354[info] - should correctly add replaced values in object diffs
355[info] SprayJsonTestJsonPatch:
356[info] applying an 'add' operation
357[info] - should add the field to the object if it does not exist
358[info] - should add a value with an empty string as the key
359[info] - should replace the value if the pointer is the root
360[info] - should replace the field value if it does exist
361[info] - should add an element to the array at the given index
362[info] - should add an element at the end of the array if the last element is '-'
363[info] - should create a nested field if needed
364[info] - should throw an error if some element is missing in the middle of the path
365[info] - should throw an error if adding an element out of the array boundaries
366[info] removing a label of an object
367[info] - should result in the object being amputated from this label
368[info] removing an element of an array
369[info] - should result in the array being amputated from this element
370[info] removing the '-' element of an array
371[info] - should result in an error being thrown
372[info] removing an element out of the array boundaries
373[info] - should result in an error being thrown
374[info] removing an unknown label from an object
375[info] - should result in an error being thrown
376[info] removing the root
377[info] - should result in an error being thrown
378[info] replacing an element in an object
379[info] - should result in this element being replaced
380[info] replacing an element in an array
381[info] - should result in this element being replaced
382[info] replacing the root
383[info] - should result in the value being completely replaced
384[info] replacing a non-existing element in an object
385[info] - should result in an error being thrown
386[info] replacing the '-' element of an array
387[info] - should result in an error being thrown
388[info] replacing an element out of the array boundaries
389[info] - should result in an error being thrown
390[info] moving a value from an object to an array
391[info] - should result in the value being added to the array and removed from the object
392[info] moving a value in a sub element
393[info] - should result in an error being thrown
394[info] moving the root
395[info] - should result in an error being thrown
396[info] copying an element in an object
397[info] - should result in this element being copied in the expected path
398[info] testing an existing element of an object
399[info] - should succeed and not modify the original object
400[info] testing an existing element with a non-expected value
401[info] - should result in an error being thrown
402[info] testing a non-existing element in an object
403[info] - should result in an error being thrown
404[info] SprayJsonConformance:
405[info] + Specification conformance tests
406[info] - 4.1. add with missing object
407[info] - A.1. Adding an Object Member
408[info] - A.2. Adding an Array Element
409[info] - A.3. Removing an Object Member
410[info] - A.4. Removing an Array Element
411[info] - A.5. Replacing a Value
412[info] - A.6. Moving a Value
413[info] - A.7. Moving an Array Element
414[info] - A.8. Testing a Value: Success
415[info] - A.9. Testing a Value: Error
416[info] - A.10. Adding a nested Member Object
417[info] - A.11. Ignoring Unrecognized Elements
418[info] - A.12. Adding to a Non-existent Target
419[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
420[info] - A.14. ~ Escape Ordering
421[info] - A.15. Comparing Strings and Numbers
422[info] - A.16. Adding an Array Value
423[info] + Misceallaneous tests
424[info] - empty list, empty docs
425[info] - empty patch list
426[info] - rearrangements OK?
427[info] - rearrangements OK? How about one level down ... array
428[info] - rearrangements OK? How about one level down...
429[info] - add replaces any existing field
430[info] - toplevel array
431[info] - toplevel array, no change
432[info] - toplevel object, numeric string
433[info] - toplevel object, integer
434[info] - Toplevel scalar values OK?
435[info] - Add, / target
436[info] - Add composite value at top level
437[info] - Add into composite value
438[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/8","value":"5"}]
439[info] - {"bar":[1,2]} patched with [{"op":"add","path":"/bar/-1","value":"5"}]
440[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":true}]
441[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":false}]
442[info] - {"foo":1} patched with [{"op":"add","path":"/bar","value":null}]
443[info] - 0 can be an array index or object element name
444[info] - ["foo"] patched with [{"op":"add","path":"/1","value":"bar"}]
445[info] - ["foo","sil"] patched with [{"op":"add","path":"/1","value":"bar"}]
446[info] - ["foo","sil"] patched with [{"op":"add","path":"/0","value":"bar"}]
447[info] - ["foo","sil"] patched with [{"op":"add","path":"/2","value":"bar"}]
448[info] - test against implementation-specific numeric parsing
449[info] - test with bad number should fail
450[info] - ["foo","sil"] patched with [{"op":"add","path":"/bar","value":42}]
451[info] - value in array add not flattened
452[info] - {"bar":[1,2,3,4],"foo":1} patched with [{"op":"remove","path":"/bar"}]
453[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"remove","path":"/baz/0/qux"}]
454[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"op":"replace","path":"/foo","value":[1,2,3,4]}]
455[info] - {"baz":[{"qux":"hello"}],"foo":[1,2,3,4]} patched with [{"op":"replace","path":"/baz/0/qux","value":"world"}]
456[info] - ["foo"] patched with [{"op":"replace","path":"/0","value":"bar"}]
457[info] - [""] patched with [{"op":"replace","path":"/0","value":0}]
458[info] - [""] patched with [{"op":"replace","path":"/0","value":true}]
459[info] - [""] patched with [{"op":"replace","path":"/0","value":false}]
460[info] - [""] patched with [{"op":"replace","path":"/0","value":null}]
461[info] - value in array replace not flattened
462[info] - replace whole document
463[info] - spurious patch properties
464[info] - null value should still be valid obj property
465[info] - test should pass despite rearrangement
466[info] - test should pass despite (nested) rearrangement
467[info] - test should pass - no error
468[info] - {"foo":{"bar":[1,2,5,4]}} patched with [{"op":"test","path":"/foo","value":[1,2]}]
469[info] - Whole document
470[info] - Empty-string element
471[info] - {"":0," ":7,"a/b":1,"c%d":2,"e^f":3,"foo":["bar","baz"],"g|h":4,"i\\j":5,"k\"l":6,"m~n":8} patched with [{"op":"test","path":"/foo","value":["bar","baz"]},{"op":"test","path":"/foo/0","value":"bar"},{"op":"test","path":"/","value":0},{"op":"test","path":"/a~1b","value":1},{"op":"test","path":"/c%d","value":2},{"op":"test","path":"/e^f","value":3},{"op":"test","path":"/g|h","value":4},{"op":"test","path":"/i\\j","value":5},{"op":"test","path":"/k\"l","value":6},{"op":"test","path":"/ ","value":7},{"op":"test","path":"/m~0n","value":8}]
472[info] - Move to same location has no effect
473[info] - {"baz":[{"qux":"hello"}],"foo":1} patched with [{"from":"/foo","op":"move","path":"/bar"}]
474[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0/qux","op":"move","path":"/baz/1"}]
475[info] - {"bar":1,"baz":[{"qux":"hello"}]} patched with [{"from":"/baz/0","op":"copy","path":"/boo"}]
476[info] - replacing the root of the document is possible with add
477[info] - Adding to "/-" adds to the end of the array
478[info] - Adding to "/-" adds to the end of the array, even n levels down
479[info] - test remove with bad number should fail
480[info] - test remove on array
481[info] - test repeated removes
482[info] - test remove with bad index should fail
483[info] - test replace with bad number should fail
484[info] - test copy with bad number should fail
485[info] - test move with bad number should fail
486[info] - test add with bad number should fail
487[info] - missing 'value' parameter to add
488[info] - missing 'value' parameter to replace
489[info] - missing 'value' parameter to test
490[info] - missing value parameter to test - where undef is falsy
491[info] - missing from parameter to copy
492[info] - missing from parameter to move
493[info] - duplicate ops !!! IGNORED !!!
494[info] - unrecognized op should fail
495[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
496Starting build for ProjectRef(file:/build/repo/,ujsonJVM) (diffson-ujson)... [2/6]
497Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
498[info] compiling 2 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC3/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0-RC3/test-classes ...
501[info] done compiling
502[info] UjsonSimpleDiff:
503[info] a diff
504[info] - should be empty if created between two equal values
505[info] - should be a simple replacement if the two values are completely different
506[info] - should conta be be bein an add operation for each added field
507[info] - should contain a remove operation for each removed field
508[info] - should correctly handle array diffs in objects (i.e. just replaced)
509[info] - should contain a replace operation for each changed field value
510[info] - should contain a replaced operation for the changed array (additions)
511[info] - should contain a replaced operation for the changed array (deletions)
512[info] - should contain a replace operation for the entire array if at least one element in it changed
513[info] applying a diff
514[info] - should be a fix point when applied to the first object used for the diff
515[info] applying a diff to strings
516[info] - should provide a correct string representation
517[info] - should correctly add removed values in object diffs
518[info] - should correctly add replaced values in object diffs
519[info] a remembering diff
520[info] - should remember old values
521[info] UjsonTestJsonMergePatch:
522[info] patching {"a":"b"} with {"a":"c"}
523[info] - should result in {"a":"c"}
524[info] patching {"a":"b"} with {"b":"c"}
525[info] - should result in {"a":"b","b":"c"}
526[info] patching {"a":"b"} with {"a":null}
527[info] - should result in {}
528[info] patching {"a":"b","b":"c"} with {"a":null}
529[info] - should result in {"b":"c"}
530[info] patching {"a":["b"]} with {"a":"c"}
531[info] - should result in {"a":"c"}
532[info] patching {"a":"c"} with {"a":["b"]}
533[info] - should result in {"a":["b"]}
534[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
535[info] - should result in {"a": {"b": "d"}}
536[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
537[info] - should result in {"a": [1]}
538[info] patching ["a","b"] with ["c","d"]
539[info] - should result in ["c","d"]
540[info] patching {"a":"b"} with ["c"]
541[info] - should result in ["c"]
542[info] patching {"a":"foo"} with null
543[info] - should result in null
544[info] patching {"a":"foo"} with "bar"
545[info] - should result in "bar"
546[info] patching {"e":null} with {"a":1}
547[info] - should result in {"e":null,"a":1}
548[info] patching [1,2] with {"a":"b","c":null}
549[info] - should result in {"a":"b"}
550[info] patching {} with {"a":{"bb":{"ccc": null}}}
551[info] - should result in {"a":{"bb":{}}}
552[info] UjsonJsonJsonMergeDiff:
553[info] a diff
554[info] - should be empty if created between two equal objects
555[info] - should be a simple replacement if the two values are completely different
556[info] - should be generated correctly for nested structures
557[info] UjsonTestSerialization:
558[info] a patch json
559[info] - should be correctly deserialized from a Json object
560[info] a patch object
561[info] - should be correctly serialized to a Json object
562[info] a merge patch
563[info] - should be correctly deserialized from a Json object
564[info] - should be correctly deserialized from a non-object Json value
565[info] a merge patch object
566[info] - should be correctly serialized
567[info] a non-object patch
568[info] - should be correctly serialized
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-RC3/test-classes ...
669[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/test/scala/diffson/TestDynLcs.scala:21:21
670[warn] 21 |import org.scalatest._
671[warn] | ^
672[warn] | unused import
673[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/test/scala/diffson/TestPatience.scala:21:21
674[warn] 21 |import org.scalatest._
675[warn] | ^
676[warn] | unused import
677[warn] two warnings found
678[info] done compiling
679[info] TestPatience:
680[info] the lcs of an empty sequence and another sequence
681[info] - should be the empty sequence
682[info] the lcs of two equal strings
683[info] - should be the strings
684[info] the lcs of a string and a prefix
685[info] - should be the prefix
686[info] the lcs of two strings with no common characters
687[info] - should be empty
688[info] the lcs of two strings
689[info] - should be correctly computed when one is in the middle of the other one
690[info] - should be correctly computed with a repeated character in common
691[info] - should be correctly computed with non unique characters
692[info] - should be correctly computed when both sequences have a common prefix and suffix
693[info] TestDynLcs:
694[info] the lcs of an empty sequence and another sequence
695[info] - should be the empty sequence
696[info] the lcs of two equal strings
697[info] - should be the strings
698[info] the lcs of a string and a prefix
699[info] - should be the prefix
700[info] the lcs of two strings with no common characters
701[info] - should be empty
702[info] the lcs of two strings
703[info] - should be correctly computed when one is in the middle of the other one
704[info] - should be correctly computed with a repeated character in common
705[info] - should be correctly computed with non unique characters
706[info] - should be correctly computed when both sequences have a common prefix and suffix
707[info] TestPatienceBigArray:
708[info] patience algorithm
709[info] - should be able to compute Lcs for big arrays of unique commons
710Starting build for ProjectRef(file:/build/repo/,playJsonJVM) (diffson-play-json)... [4/6]
711Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -language:implicitConversions, -Xkind-projector, --java-output-version:17, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
712[info] compiling 2 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC3/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0-RC3/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] PlayJsonSimpleDiff:
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 conta be be bein 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 (i.e. just replaced)
768[info] - should contain a replace operation for each changed field value
769[info] - should contain a replaced operation for the changed array (additions)
770[info] - should contain a replaced operation for the changed array (deletions)
771[info] - should contain a replace operation for the entire array if at least one element in it 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] - should correctly add removed values in object diffs
777[info] - should correctly add replaced values in object diffs
778[info] a remembering diff
779[info] - should remember old values
780[info] PlayJsonJsonDiff:
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 contain 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
787[info] - should contain a replace operation for each changed field value
788[info] - should contain an add operation for each added element
789[info] - should contain a remove operation for each deleted element
790[info] - should contain a replace operation for each value that 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] a remembering diff
796[info] - should correctly add removed values in array diffs
797[info] - should correctly add removed values in object diffs
798[info] - should correctly add replaced values in object diffs
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-RC3/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0-RC3/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] CirceJsonMergeDiff:
1015[info] a diff
1016[info] - should be empty if created between two equal objects
1017[info] - should be a simple replacement if the two values are completely different
1018[info] - should be generated correctly for nested structures
1019[info] CirceJsonDiff:
1020[info] a diff
1021[info] - should be empty if created between two equal values
1022[info] - should be a simple replacement if the two values are completely different
1023[info] - should contain an add operation for each added field
1024[info] - should contain a remove operation for each removed field
1025[info] - should correctly handle array diffs in objects
1026[info] - should contain a replace operation for each changed field value
1027[info] - should contain an add operation for each added element
1028[info] - should contain a remove operation for each deleted element
1029[info] - should contain a replace operation for each value that changed
1030[info] applying a diff
1031[info] - should be a fix point when applied to the first object used for the diff
1032[info] applying a diff to strings
1033[info] - should provide a correct string representation
1034[info] a remembering diff
1035[info] - should correctly add removed values in array diffs
1036[info] - should correctly add removed values in object diffs
1037[info] - should correctly add replaced values in object diffs
1038[info] CirceSimpleDiff:
1039[info] a diff
1040[info] - should be empty if created between two equal values
1041[info] - should be a simple replacement if the two values are completely different
1042[info] - should conta be be bein an add operation for each added field
1043[info] - should contain a remove operation for each removed field
1044[info] - should correctly handle array diffs in objects (i.e. just replaced)
1045[info] - should contain a replace operation for each changed field value
1046[info] - should contain a replaced operation for the changed array (additions)
1047[info] - should contain a replaced operation for the changed array (deletions)
1048[info] - should contain a replace operation for the entire array if at least one element in it changed
1049[info] applying a diff
1050[info] - should be a fix point when applied to the first object used for the diff
1051[info] applying a diff to strings
1052[info] - should provide a correct string representation
1053[info] - should correctly add removed values in object diffs
1054[info] - should correctly add replaced values in object diffs
1055[info] a remembering diff
1056[info] - should remember old values
1057[info] CirceTestJsonPatch:
1058[info] applying an 'add' operation
1059[info] - should add the field to the object if it does not exist
1060[info] - should add a value with an empty string as the key
1061[info] - should replace the value if the pointer is the root
1062[info] - should replace the field value if it does exist
1063[info] - should add an element to the array at the given index
1064[info] - should add an element at the end of the array if the last element is '-'
1065[info] - should create a nested field if needed
1066[info] - should throw an error if some element is missing in the middle of the path
1067[info] - should throw an error if adding an element out of the array boundaries
1068[info] removing a label of an object
1069[info] - should result in the object being amputated from this label
1070[info] removing an element of an array
1071[info] - should result in the array being amputated from this element
1072[info] removing the '-' element of an array
1073[info] - should result in an error being thrown
1074[info] removing an element out of the array boundaries
1075[info] - should result in an error being thrown
1076[info] removing an unknown label from an object
1077[info] - should result in an error being thrown
1078[info] removing the root
1079[info] - should result in an error being thrown
1080[info] replacing an element in an object
1081[info] - should result in this element being replaced
1082[info] replacing an element in an array
1083[info] - should result in this element being replaced
1084[info] replacing the root
1085[info] - should result in the value being completely replaced
1086[info] replacing a non-existing element in an object
1087[info] - should result in an error being thrown
1088[info] replacing the '-' element of an array
1089[info] - should result in an error being thrown
1090[info] replacing an element out of the array boundaries
1091[info] - should result in an error being thrown
1092[info] moving a value from an object to an array
1093[info] - should result in the value being added to the array and removed from the object
1094[info] moving a value in a sub element
1095[info] - should result in an error being thrown
1096[info] moving the root
1097[info] - should result in an error being thrown
1098[info] copying an element in an object
1099[info] - should result in this element being copied in the expected path
1100[info] testing an existing element of an object
1101[info] - should succeed and not modify the original object
1102[info] testing an existing element with a non-expected value
1103[info] - should result in an error being thrown
1104[info] testing a non-existing element in an object
1105[info] - should result in an error being thrown
1106[info] CirceTestSerialization:
1107[info] a patch json
1108[info] - should be correctly deserialized from a Json object
1109[info] a patch object
1110[info] - should be correctly serialized to a Json object
1111[info] a merge patch
1112[info] - should be correctly deserialized from a Json object
1113[info] - should be correctly deserialized from a non-object Json value
1114[info] a merge patch object
1115[info] - should be correctly serialized
1116[info] a non-object patch
1117[info] - should be correctly serialized
1118[info] CirceConformance:
1119[info] + Specification conformance tests
1120[info] - 4.1. add with missing object
1121[info] - A.1. Adding an Object Member
1122[info] - A.2. Adding an Array Element
1123[info] - A.3. Removing an Object Member
1124[info] - A.4. Removing an Array Element
1125[info] - A.5. Replacing a Value
1126[info] - A.6. Moving a Value
1127[info] - A.7. Moving an Array Element
1128[info] - A.8. Testing a Value: Success
1129[info] - A.9. Testing a Value: Error
1130[info] - A.10. Adding a nested Member Object
1131[info] - A.11. Ignoring Unrecognized Elements
1132[info] - A.12. Adding to a Non-existent Target
1133[info] - A.13 Invalid JSON Patch Document !!! IGNORED !!!
1134[info] - A.14. ~ Escape Ordering
1135[info] - A.15. Comparing Strings and Numbers
1136[info] - A.16. Adding an Array Value
1137[info] + Misceallaneous tests
1138[info] - empty list, empty docs
1139[info] - empty patch list
1140[info] - rearrangements OK?
1141[info] - rearrangements OK? How about one level down ... array
1142[info] - rearrangements OK? How about one level down...
1143[info] - add replaces any existing field
1144[info] - toplevel array
1145[info] - toplevel array, no change
1146[info] - toplevel object, numeric string
1147[info] - toplevel object, integer
1148[info] - Toplevel scalar values OK?
1149[info] - Add, / target
1150[info] - Add composite value at top level
1151[info] - Add into composite value
1152[info] - {
1153[info] "bar" : [
1154[info] 1,
1155[info] 2
1156[info] ]
1157[info] } patched with [
1158[info] {
1159[info] "op" : "add",
1160[info] "path" : "/bar/8",
1161[info] "value" : "5"
1162[info] }
1163[info] ]
1164[info] - {
1165[info] "bar" : [
1166[info] 1,
1167[info] 2
1168[info] ]
1169[info] } patched with [
1170[info] {
1171[info] "op" : "add",
1172[info] "path" : "/bar/-1",
1173[info] "value" : "5"
1174[info] }
1175[info] ]
1176[info] - {
1177[info] "foo" : 1
1178[info] } patched with [
1179[info] {
1180[info] "op" : "add",
1181[info] "path" : "/bar",
1182[info] "value" : true
1183[info] }
1184[info] ]
1185[info] - {
1186[info] "foo" : 1
1187[info] } patched with [
1188[info] {
1189[info] "op" : "add",
1190[info] "path" : "/bar",
1191[info] "value" : false
1192[info] }
1193[info] ]
1194[info] - {
1195[info] "foo" : 1
1196[info] } patched with [
1197[info] {
1198[info] "op" : "add",
1199[info] "path" : "/bar",
1200[info] "value" : null
1201[info] }
1202[info] ]
1203[info] - 0 can be an array index or object element name
1204[info] - [
1205[info] "foo"
1206[info] ] patched with [
1207[info] {
1208[info] "op" : "add",
1209[info] "path" : "/1",
1210[info] "value" : "bar"
1211[info] }
1212[info] ]
1213[info] - [
1214[info] "foo",
1215[info] "sil"
1216[info] ] patched with [
1217[info] {
1218[info] "op" : "add",
1219[info] "path" : "/1",
1220[info] "value" : "bar"
1221[info] }
1222[info] ]
1223[info] - [
1224[info] "foo",
1225[info] "sil"
1226[info] ] patched with [
1227[info] {
1228[info] "op" : "add",
1229[info] "path" : "/0",
1230[info] "value" : "bar"
1231[info] }
1232[info] ]
1233[info] - [
1234[info] "foo",
1235[info] "sil"
1236[info] ] patched with [
1237[info] {
1238[info] "op" : "add",
1239[info] "path" : "/2",
1240[info] "value" : "bar"
1241[info] }
1242[info] ]
1243[info] - test against implementation-specific numeric parsing
1244[info] - test with bad number should fail
1245[info] - [
1246[info] "foo",
1247[info] "sil"
1248[info] ] patched with [
1249[info] {
1250[info] "op" : "add",
1251[info] "path" : "/bar",
1252[info] "value" : 42
1253[info] }
1254[info] ]
1255[info] - value in array add not flattened
1256[info] - {
1257[info] "foo" : 1,
1258[info] "bar" : [
1259[info] 1,
1260[info] 2,
1261[info] 3,
1262[info] 4
1263[info] ]
1264[info] } patched with [
1265[info] {
1266[info] "op" : "remove",
1267[info] "path" : "/bar"
1268[info] }
1269[info] ]
1270[info] - {
1271[info] "foo" : 1,
1272[info] "baz" : [
1273[info] {
1274[info] "qux" : "hello"
1275[info] }
1276[info] ]
1277[info] } patched with [
1278[info] {
1279[info] "op" : "remove",
1280[info] "path" : "/baz/0/qux"
1281[info] }
1282[info] ]
1283[info] - {
1284[info] "foo" : 1,
1285[info] "baz" : [
1286[info] {
1287[info] "qux" : "hello"
1288[info] }
1289[info] ]
1290[info] } patched with [
1291[info] {
1292[info] "op" : "replace",
1293[info] "path" : "/foo",
1294[info] "value" : [
1295[info] 1,
1296[info] 2,
1297[info] 3,
1298[info] 4
1299[info] ]
1300[info] }
1301[info] ]
1302[info] - {
1303[info] "foo" : [
1304[info] 1,
1305[info] 2,
1306[info] 3,
1307[info] 4
1308[info] ],
1309[info] "baz" : [
1310[info] {
1311[info] "qux" : "hello"
1312[info] }
1313[info] ]
1314[info] } patched with [
1315[info] {
1316[info] "op" : "replace",
1317[info] "path" : "/baz/0/qux",
1318[info] "value" : "world"
1319[info] }
1320[info] ]
1321[info] - [
1322[info] "foo"
1323[info] ] patched with [
1324[info] {
1325[info] "op" : "replace",
1326[info] "path" : "/0",
1327[info] "value" : "bar"
1328[info] }
1329[info] ]
1330[info] - [
1331[info] ""
1332[info] ] patched with [
1333[info] {
1334[info] "op" : "replace",
1335[info] "path" : "/0",
1336[info] "value" : 0
1337[info] }
1338[info] ]
1339[info] - [
1340[info] ""
1341[info] ] patched with [
1342[info] {
1343[info] "op" : "replace",
1344[info] "path" : "/0",
1345[info] "value" : true
1346[info] }
1347[info] ]
1348[info] - [
1349[info] ""
1350[info] ] patched with [
1351[info] {
1352[info] "op" : "replace",
1353[info] "path" : "/0",
1354[info] "value" : false
1355[info] }
1356[info] ]
1357[info] - [
1358[info] ""
1359[info] ] patched with [
1360[info] {
1361[info] "op" : "replace",
1362[info] "path" : "/0",
1363[info] "value" : null
1364[info] }
1365[info] ]
1366[info] - value in array replace not flattened
1367[info] - replace whole document
1368[info] - spurious patch properties
1369[info] - null value should still be valid obj property
1370[info] - test should pass despite rearrangement
1371[info] - test should pass despite (nested) rearrangement
1372[info] - test should pass - no error
1373[info] - {
1374[info] "foo" : {
1375[info] "bar" : [
1376[info] 1,
1377[info] 2,
1378[info] 5,
1379[info] 4
1380[info] ]
1381[info] }
1382[info] } patched with [
1383[info] {
1384[info] "op" : "test",
1385[info] "path" : "/foo",
1386[info] "value" : [
1387[info] 1,
1388[info] 2
1389[info] ]
1390[info] }
1391[info] ]
1392[info] - Whole document
1393[info] - Empty-string element
1394[info] - {
1395[info] "foo" : [
1396[info] "bar",
1397[info] "baz"
1398[info] ],
1399[info] "" : 0,
1400[info] "a/b" : 1,
1401[info] "c%d" : 2,
1402[info] "e^f" : 3,
1403[info] "g|h" : 4,
1404[info] "i\\j" : 5,
1405[info] "k\"l" : 6,
1406[info] " " : 7,
1407[info] "m~n" : 8
1408[info] } patched with [
1409[info] {
1410[info] "op" : "test",
1411[info] "path" : "/foo",
1412[info] "value" : [
1413[info] "bar",
1414[info] "baz"
1415[info] ]
1416[info] },
1417[info] {
1418[info] "op" : "test",
1419[info] "path" : "/foo/0",
1420[info] "value" : "bar"
1421[info] },
1422[info] {
1423[info] "op" : "test",
1424[info] "path" : "/",
1425[info] "value" : 0
1426[info] },
1427[info] {
1428[info] "op" : "test",
1429[info] "path" : "/a~1b",
1430[info] "value" : 1
1431[info] },
1432[info] {
1433[info] "op" : "test",
1434[info] "path" : "/c%d",
1435[info] "value" : 2
1436[info] },
1437[info] {
1438[info] "op" : "test",
1439[info] "path" : "/e^f",
1440[info] "value" : 3
1441[info] },
1442[info] {
1443[info] "op" : "test",
1444[info] "path" : "/g|h",
1445[info] "value" : 4
1446[info] },
1447[info] {
1448[info] "op" : "test",
1449[info] "path" : "/i\\j",
1450[info] "value" : 5
1451[info] },
1452[info] {
1453[info] "op" : "test",
1454[info] "path" : "/k\"l",
1455[info] "value" : 6
1456[info] },
1457[info] {
1458[info] "op" : "test",
1459[info] "path" : "/ ",
1460[info] "value" : 7
1461[info] },
1462[info] {
1463[info] "op" : "test",
1464[info] "path" : "/m~0n",
1465[info] "value" : 8
1466[info] }
1467[info] ]
1468[info] - Move to same location has no effect
1469[info] - {
1470[info] "foo" : 1,
1471[info] "baz" : [
1472[info] {
1473[info] "qux" : "hello"
1474[info] }
1475[info] ]
1476[info] } patched with [
1477[info] {
1478[info] "op" : "move",
1479[info] "from" : "/foo",
1480[info] "path" : "/bar"
1481[info] }
1482[info] ]
1483[info] - {
1484[info] "baz" : [
1485[info] {
1486[info] "qux" : "hello"
1487[info] }
1488[info] ],
1489[info] "bar" : 1
1490[info] } patched with [
1491[info] {
1492[info] "op" : "move",
1493[info] "from" : "/baz/0/qux",
1494[info] "path" : "/baz/1"
1495[info] }
1496[info] ]
1497[info] - {
1498[info] "baz" : [
1499[info] {
1500[info] "qux" : "hello"
1501[info] }
1502[info] ],
1503[info] "bar" : 1
1504[info] } patched with [
1505[info] {
1506[info] "op" : "copy",
1507[info] "from" : "/baz/0",
1508[info] "path" : "/boo"
1509[info] }
1510[info] ]
1511[info] - replacing the root of the document is possible with add
1512[info] - Adding to "/-" adds to the end of the array
1513[info] - Adding to "/-" adds to the end of the array, even n levels down
1514[info] - test remove with bad number should fail
1515[info] - test remove on array
1516[info] - test repeated removes
1517[info] - test remove with bad index should fail
1518[info] - test replace with bad number should fail
1519[info] - test copy with bad number should fail
1520[info] - test move with bad number should fail
1521[info] - test add with bad number should fail
1522[info] - missing 'value' parameter to add
1523[info] - missing 'value' parameter to replace
1524[info] - missing 'value' parameter to test
1525[info] - missing value parameter to test - where undef is falsy
1526[info] - missing from parameter to copy
1527[info] - missing from parameter to move
1528[info] - duplicate ops !!! IGNORED !!!
1529[info] - unrecognized op should fail
1530[info] CirceTestJsonMergePatch:
1531[info] patching {"a":"b"} with {"a":"c"}
1532[info] - should result in {"a":"c"}
1533[info] patching {"a":"b"} with {"b":"c"}
1534[info] - should result in {"a":"b","b":"c"}
1535[info] patching {"a":"b"} with {"a":null}
1536[info] - should result in {}
1537[info] patching {"a":"b","b":"c"} with {"a":null}
1538[info] - should result in {"b":"c"}
1539[info] patching {"a":["b"]} with {"a":"c"}
1540[info] - should result in {"a":"c"}
1541[info] patching {"a":"c"} with {"a":["b"]}
1542[info] - should result in {"a":["b"]}
1543[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
1544[info] - should result in {"a": {"b": "d"}}
1545[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
1546[info] - should result in {"a": [1]}
1547[info] patching ["a","b"] with ["c","d"]
1548[info] - should result in ["c","d"]
1549[info] patching {"a":"b"} with ["c"]
1550[info] - should result in ["c"]
1551[info] patching {"a":"foo"} with null
1552[info] - should result in null
1553[info] patching {"a":"foo"} with "bar"
1554[info] - should result in "bar"
1555[info] patching {"e":null} with {"a":1}
1556[info] - should result in {"e":null,"a":1}
1557[info] patching [1,2] with {"a":"b","c":null}
1558[info] - should result in {"a":"b"}
1559[info] patching {} with {"a":{"bb":{"ccc": null}}}
1560[info] - should result in {"a":{"bb":{}}}
1561[info] CirceTestObjectDiff:
1562[info] a wide object diffed with an empty one
1563[info] - should not cause stack overflows
1564[info] a wide object diffed with itself
1565[info] - should not cause stack overflows
1566[info] + TestArrayDiff.arrayDiff: OK, passed 100 tests.
1567
1568************************
1569Build summary:
1570[{
1571 "module": "diffson-testkit",
1572 "compile": {"status": "ok", "tookMs": 21651, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 239, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 201, "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": 1751, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1394, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1549, "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": 1479, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 1137, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 829, "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": 1406, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 489, "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": 1284, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1069, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1615 "test": {"status": "ok", "tookMs": 849, "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": 1302, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1224, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 926, "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 4, 2025, 3:15:04 PM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.