Build Logs

gnieh/diffson • 3.8.0:2026-01-13

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
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"
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
42Execute tests: true
43sbt project found:
44No prepare script found for project gnieh/diffson
45##################################
46Scala version: 3.8.0
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
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"
71"++3.8.0 -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 """{"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.897s.
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
93OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in benchmarksJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in ujsonJVM/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in diffsonJS/crossScalaVersions
96OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in playJsonJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in testkitJS/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in coreJVM/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in coreJS/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in circeJS/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in circeNative/crossScalaVersions
102OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in diffsonJVM/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in ujsonNative/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in playJsonNative/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in diffsonNative/crossScalaVersions
106[info] set scmInfo to https://github.com/gnieh/diffson
107OpenCB::Limitting incorrect crossVersions List() -> List(2.13.13) in diffson/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in testkitJVM/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in ujsonJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in sprayJsonJVM/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in coreNative/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in circeJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in testkitNative/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in playJsonJS/crossScalaVersions
115[info] set current project to diffson (in build file:/build/repo/)
116[info] Setting Scala version to 3.8.0 on 20 projects.
117[info] Switching Scala version on:
118[info] ujsonJVM (2.12.19, 2.13.13, 3.8.0)
119[info] diffsonJVM (2.12.19, 2.13.13, 3.8.0)
120[info] diffsonJS (2.12.19, 2.13.13, 3.8.0)
121[info] circeJVM (2.12.19, 2.13.13, 3.8.0)
122[info] playJsonNative (2.12.19, 2.13.13, 3.8.0)
123[info] testkitNative (2.12.19, 2.13.13, 3.8.0)
124[info] testkitJS (2.12.19, 2.13.13, 3.8.0)
125[info] coreNative (2.12.19, 2.13.13, 3.8.0)
126[info] playJsonJVM (2.12.19, 2.13.13, 3.8.0)
127[info] benchmarksJVM (2.12.19, 2.13.13, 3.8.0)
128[info] ujsonJS (2.12.19, 2.13.13, 3.8.0)
129[info] coreJS (2.12.19, 2.13.13, 3.8.0)
130[info] circeJS (2.12.19, 2.13.13, 3.8.0)
131[info] coreJVM (2.12.19, 2.13.13, 3.8.0)
132[info] diffsonNative (2.12.19, 2.13.13, 3.8.0)
133[info] circeNative (2.12.19, 2.13.13, 3.8.0)
134[info] ujsonNative (2.12.19, 2.13.13, 3.8.0)
135[info] playJsonJS (2.12.19, 2.13.13, 3.8.0)
136[info] testkitJVM (2.12.19, 2.13.13, 3.8.0)
137[info] sprayJsonJVM (2.12.19, 2.13.13, 3.8.0)
138[info] Excluding projects:
139[info] * diffson (2.13.13)
140[info] Reapplying settings...
141[info] set scmInfo to https://github.com/gnieh/diffson
142[info] set current project to diffson (in build file:/build/repo/)
143Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
144[info] Reapplying settings...
145[info] set scmInfo to https://github.com/gnieh/diffson
146[info] set current project to diffson (in build file:/build/repo/)
147[info] Defining Global / credentials, benchmarksJVM / credentials and 19 others.
148[info] The new values will be used by Compile / scalafmtOnly, IntegrationTest / scalafmtOnly and 186 others.
149[info] Run `last` for details.
150[info] Reapplying settings...
151[info] set scmInfo to https://github.com/gnieh/diffson
152[info] set current project to diffson (in build file:/build/repo/)
153Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
154[info] Reapplying settings...
155OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
156
157 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
158 Did you mean circeNative / allExcludeDependencies ?
159 , retry without global scopes
160[info] Reapplying settings...
161[info] set scmInfo to https://github.com/gnieh/diffson
162[info] set current project to diffson (in build file:/build/repo/)
163Execute removeScalacOptionsStartingWith: -P:wartremover
164[info] Reapplying settings...
165[info] set scmInfo to https://github.com/gnieh/diffson
166[info] set current project to diffson (in build file:/build/repo/)
167[success] Total time: 0 s, completed Jan 13, 2026, 3:34:29 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/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/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/classes ...
238[info] done compiling
239[info] compiling 10 Scala sources to /build/repo/sprayJson/.jvm/target/scala-3.8.0/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] SprayJsonTestSerialization:
261[info] a patch json
262[info] - should be correctly deserialized from a Json object
263[info] a patch object
264[info] - should be correctly serialized to a Json object
265[info] a merge patch
266[info] - should be correctly deserialized from a Json object
267[info] - should be correctly deserialized from a non-object Json value
268[info] a merge patch object
269[info] - should be correctly serialized
270[info] a non-object patch
271[info] - should be correctly serialized
272[info] SprayJsonJsonDiff:
273[info] a diff
274[info] - should be empty if created between two equal values
275[info] - should be a simple replacement if the two values are completely different
276[info] - should contain an add operation for each added field
277[info] - should contain a remove operation for each removed field
278[info] - should correctly handle array diffs in objects
279[info] - should contain a replace operation for each changed field value
280[info] - should contain an add operation for each added element
281[info] - should contain a remove operation for each deleted element
282[info] - should contain a replace operation for each value that changed
283[info] applying a diff
284[info] - should be a fix point when applied to the first object used for the diff
285[info] applying a diff to strings
286[info] - should provide a correct string representation
287[info] a remembering diff
288[info] - should correctly add removed values in array diffs
289[info] - should correctly add removed values in object diffs
290[info] - should correctly add replaced values in object diffs
291[info] SprayJsonJsonMergeDiff:
292[info] a diff
293[info] - should be empty if created between two equal objects
294[info] - should be a simple replacement if the two values are completely different
295[info] - should be generated correctly for nested structures
296[info] SprayJsonTestJsonPointer:
297[info] an empty string
298[info] - should be parsed as an empty pointer
299[info] the slash pointer
300[info] - should be parsed as the pointer to empty element at root
301[info] a string with a trailing forward slash
302[info] - should parse with an empty final element
303[info] a pointer string with one chunk
304[info] - should be parsed as a pointer with one element
305[info] occurrences of ~0
306[info] - should be replaced by occurrences of ~
307[info] occurrences of ~1
308[info] - should be replaced by occurrences of /
309[info] occurrences of ~
310[info] - should be directly followed by either 0 or 1
311[info] a non empty pointer
312[info] - should start with a /
313[info] a pointer to a label
314[info] - should be evaluated to the label value if it is one level deep
315[info] - should be evaluated to the end label value if it is several levels deep
316[info] - should be evaluated to nothing if the final element is unknown
317[info] - should produce an error if there is an unknown element in the middle of the pointer
318[info] a pointer to an array element
319[info] - should be evaluated to the value at the given index
320[info] - should produce an error if it is out of the array bounds
321[info] - should produce an error if it is the '-' element
322[info] a number pointer
323[info] - should be parsed as a string label if it overflows int capacity
324[info] SprayJsonTestJsonPatch:
325[info] applying an 'add' operation
326[info] - should add the field to the object if it does not exist
327[info] - should add a value with an empty string as the key
328[info] - should replace the value if the pointer is the root
329[info] - should replace the field value if it does exist
330[info] - should add an element to the array at the given index
331[info] - should add an element at the end of the array if the last element is '-'
332[info] - should create a nested field if needed
333[info] - should throw an error if some element is missing in the middle of the path
334[info] - should throw an error if adding an element out of the array boundaries
335[info] removing a label of an object
336[info] - should result in the object being amputated from this label
337[info] removing an element of an array
338[info] - should result in the array being amputated from this element
339[info] removing the '-' element of an array
340[info] - should result in an error being thrown
341[info] removing an element out of the array boundaries
342[info] - should result in an error being thrown
343[info] removing an unknown label from an object
344[info] - should result in an error being thrown
345[info] removing the root
346[info] - should result in an error being thrown
347[info] replacing an element in an object
348[info] - should result in this element being replaced
349[info] replacing an element in an array
350[info] - should result in this element being replaced
351[info] replacing the root
352[info] - should result in the value being completely replaced
353[info] replacing a non-existing element in an object
354[info] - should result in an error being thrown
355[info] replacing the '-' element of an array
356[info] - should result in an error being thrown
357[info] replacing an element out of the array boundaries
358[info] - should result in an error being thrown
359[info] moving a value from an object to an array
360[info] - should result in the value being added to the array and removed from the object
361[info] moving a value in a sub element
362[info] - should result in an error being thrown
363[info] moving the root
364[info] - should result in an error being thrown
365[info] copying an element in an object
366[info] - should result in this element being copied in the expected path
367[info] testing an existing element of an object
368[info] - should succeed and not modify the original object
369[info] testing an existing element with a non-expected value
370[info] - should result in an error being thrown
371[info] testing a non-existing element in an object
372[info] - should result in an error being thrown
373[info] SprayJsonTestJsonMergePatch:
374[info] patching {"a":"b"} with {"a":"c"}
375[info] - should result in {"a":"c"}
376[info] patching {"a":"b"} with {"b":"c"}
377[info] - should result in {"a":"b","b":"c"}
378[info] patching {"a":"b"} with {"a":null}
379[info] - should result in {}
380[info] patching {"a":"b","b":"c"} with {"a":null}
381[info] - should result in {"b":"c"}
382[info] patching {"a":["b"]} with {"a":"c"}
383[info] - should result in {"a":"c"}
384[info] patching {"a":"c"} with {"a":["b"]}
385[info] - should result in {"a":["b"]}
386[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
387[info] - should result in {"a": {"b": "d"}}
388[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
389[info] - should result in {"a": [1]}
390[info] patching ["a","b"] with ["c","d"]
391[info] - should result in ["c","d"]
392[info] patching {"a":"b"} with ["c"]
393[info] - should result in ["c"]
394[info] patching {"a":"foo"} with null
395[info] - should result in null
396[info] patching {"a":"foo"} with "bar"
397[info] - should result in "bar"
398[info] patching {"e":null} with {"a":1}
399[info] - should result in {"e":null,"a":1}
400[info] patching [1,2] with {"a":"b","c":null}
401[info] - should result in {"a":"b"}
402[info] patching {} with {"a":{"bb":{"ccc": null}}}
403[info] - should result in {"a":{"bb":{}}}
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/classes ...
499[info] done compiling
500[info] compiling 9 Scala sources to /build/repo/ujson/jvm/target/scala-3.8.0/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] UjsonJsonDiff:
522[info] a diff
523[info] - should be empty if created between two equal values
524[info] - should be a simple replacement if the two values are completely different
525[info] - should contain an add operation for each added field
526[info] - should contain a remove operation for each removed field
527[info] - should correctly handle array diffs in objects
528[info] - should contain a replace operation for each changed field value
529[info] - should contain an add operation for each added element
530[info] - should contain a remove operation for each deleted element
531[info] - should contain a replace operation for each value that changed
532[info] applying a diff
533[info] - should be a fix point when applied to the first object used for the diff
534[info] applying a diff to strings
535[info] - should provide a correct string representation
536[info] a remembering diff
537[info] - should correctly add removed values in array diffs
538[info] - should correctly add removed values in object diffs
539[info] - should correctly add replaced values in object diffs
540[info] UjsonTestSerialization:
541[info] a patch json
542[info] - should be correctly deserialized from a Json object
543[info] a patch object
544[info] - should be correctly serialized to a Json object
545[info] a merge patch
546[info] - should be correctly deserialized from a Json object
547[info] - should be correctly deserialized from a non-object Json value
548[info] a merge patch object
549[info] - should be correctly serialized
550[info] a non-object patch
551[info] - should be correctly serialized
552[info] UjsonTestJsonPointer:
553[info] an empty string
554[info] - should be parsed as an empty pointer
555[info] the slash pointer
556[info] - should be parsed as the pointer to empty element at root
557[info] a string with a trailing forward slash
558[info] - should parse with an empty final element
559[info] a pointer string with one chunk
560[info] - should be parsed as a pointer with one element
561[info] occurrences of ~0
562[info] - should be replaced by occurrences of ~
563[info] occurrences of ~1
564[info] - should be replaced by occurrences of /
565[info] occurrences of ~
566[info] - should be directly followed by either 0 or 1
567[info] a non empty pointer
568[info] - should start with a /
569[info] a pointer to a label
570[info] - should be evaluated to the label value if it is one level deep
571[info] - should be evaluated to the end label value if it is several levels deep
572[info] - should be evaluated to nothing if the final element is unknown
573[info] - should produce an error if there is an unknown element in the middle of the pointer
574[info] a pointer to an array element
575[info] - should be evaluated to the value at the given index
576[info] - should produce an error if it is out of the array bounds
577[info] - should produce an error if it is the '-' element
578[info] a number pointer
579[info] - should be parsed as a string label if it overflows int capacity
580[info] UjsonTestJsonPatch:
581[info] applying an 'add' operation
582[info] - should add the field to the object if it does not exist
583[info] - should add a value with an empty string as the key
584[info] - should replace the value if the pointer is the root
585[info] - should replace the field value if it does exist
586[info] - should add an element to the array at the given index
587[info] - should add an element at the end of the array if the last element is '-'
588[info] - should create a nested field if needed
589[info] - should throw an error if some element is missing in the middle of the path
590[info] - should throw an error if adding an element out of the array boundaries
591[info] removing a label of an object
592[info] - should result in the object being amputated from this label
593[info] removing an element of an array
594[info] - should result in the array being amputated from this element
595[info] removing the '-' element of an array
596[info] - should result in an error being thrown
597[info] removing an element out of the array boundaries
598[info] - should result in an error being thrown
599[info] removing an unknown label from an object
600[info] - should result in an error being thrown
601[info] removing the root
602[info] - should result in an error being thrown
603[info] replacing an element in an object
604[info] - should result in this element being replaced
605[info] replacing an element in an array
606[info] - should result in this element being replaced
607[info] replacing the root
608[info] - should result in the value being completely replaced
609[info] replacing a non-existing element in an object
610[info] - should result in an error being thrown
611[info] replacing the '-' element of an array
612[info] - should result in an error being thrown
613[info] replacing an element out of the array boundaries
614[info] - should result in an error being thrown
615[info] moving a value from an object to an array
616[info] - should result in the value being added to the array and removed from the object
617[info] moving a value in a sub element
618[info] - should result in an error being thrown
619[info] moving the root
620[info] - should result in an error being thrown
621[info] copying an element in an object
622[info] - should result in this element being copied in the expected path
623[info] testing an existing element of an object
624[info] - should succeed and not modify the original object
625[info] testing an existing element with a non-expected value
626[info] - should result in an error being thrown
627[info] testing a non-existing element in an object
628[info] - should result in an error being thrown
629[info] UjsonJsonJsonMergeDiff:
630[info] a diff
631[info] - should be empty if created between two equal objects
632[info] - should be a simple replacement if the two values are completely different
633[info] - should be generated correctly for nested structures
634[info] UjsonTestJsonMergePatch:
635[info] patching {"a":"b"} with {"a":"c"}
636[info] - should result in {"a":"c"}
637[info] patching {"a":"b"} with {"b":"c"}
638[info] - should result in {"a":"b","b":"c"}
639[info] patching {"a":"b"} with {"a":null}
640[info] - should result in {}
641[info] patching {"a":"b","b":"c"} with {"a":null}
642[info] - should result in {"b":"c"}
643[info] patching {"a":["b"]} with {"a":"c"}
644[info] - should result in {"a":"c"}
645[info] patching {"a":"c"} with {"a":["b"]}
646[info] - should result in {"a":["b"]}
647[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
648[info] - should result in {"a": {"b": "d"}}
649[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
650[info] - should result in {"a": [1]}
651[info] patching ["a","b"] with ["c","d"]
652[info] - should result in ["c","d"]
653[info] patching {"a":"b"} with ["c"]
654[info] - should result in ["c"]
655[info] patching {"a":"foo"} with null
656[info] - should result in null
657[info] patching {"a":"foo"} with "bar"
658[info] - should result in "bar"
659[info] patching {"e":null} with {"a":1}
660[info] - should result in {"e":null,"a":1}
661[info] patching [1,2] with {"a":"b","c":null}
662[info] - should result in {"a":"b"}
663[info] patching {} with {"a":{"bb":{"ccc": null}}}
664[info] - should result in {"a":{"bb":{}}}
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/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/classes ...
713[info] done compiling
714[info] compiling 10 Scala sources to /build/repo/playJson/jvm/target/scala-3.8.0/test-classes ...
715[info] done compiling
716[info] PlayJsonTestJsonMergePatch:
717[info] patching {"a":"b"} with {"a":"c"}
718[info] - should result in {"a":"c"}
719[info] patching {"a":"b"} with {"b":"c"}
720[info] - should result in {"a":"b","b":"c"}
721[info] patching {"a":"b"} with {"a":null}
722[info] - should result in {}
723[info] patching {"a":"b","b":"c"} with {"a":null}
724[info] - should result in {"b":"c"}
725[info] patching {"a":["b"]} with {"a":"c"}
726[info] - should result in {"a":"c"}
727[info] patching {"a":"c"} with {"a":["b"]}
728[info] - should result in {"a":["b"]}
729[info] patching {"a": {"b": "c"}} with {"a": {"b": "d","c": null}}
730[info] - should result in {"a": {"b": "d"}}
731[info] patching {"a": [{"b":"c"}]} with {"a": [1]}
732[info] - should result in {"a": [1]}
733[info] patching ["a","b"] with ["c","d"]
734[info] - should result in ["c","d"]
735[info] patching {"a":"b"} with ["c"]
736[info] - should result in ["c"]
737[info] patching {"a":"foo"} with null
738[info] - should result in null
739[info] patching {"a":"foo"} with "bar"
740[info] - should result in "bar"
741[info] patching {"e":null} with {"a":1}
742[info] - should result in {"e":null,"a":1}
743[info] patching [1,2] with {"a":"b","c":null}
744[info] - should result in {"a":"b"}
745[info] patching {} with {"a":{"bb":{"ccc": null}}}
746[info] - should result in {"a":{"bb":{}}}
747[info] PlayJsonTestJsonPointer:
748[info] an empty string
749[info] - should be parsed as an empty pointer
750[info] the slash pointer
751[info] - should be parsed as the pointer to empty element at root
752[info] a string with a trailing forward slash
753[info] - should parse with an empty final element
754[info] a pointer string with one chunk
755[info] - should be parsed as a pointer with one element
756[info] occurrences of ~0
757[info] - should be replaced by occurrences of ~
758[info] occurrences of ~1
759[info] - should be replaced by occurrences of /
760[info] occurrences of ~
761[info] - should be directly followed by either 0 or 1
762[info] a non empty pointer
763[info] - should start with a /
764[info] a pointer to a label
765[info] - should be evaluated to the label value if it is one level deep
766[info] - should be evaluated to the end label value if it is several levels deep
767[info] - should be evaluated to nothing if the final element is unknown
768[info] - should produce an error if there is an unknown element in the middle of the pointer
769[info] a pointer to an array element
770[info] - should be evaluated to the value at the given index
771[info] - should produce an error if it is out of the array bounds
772[info] - should produce an error if it is the '-' element
773[info] a number pointer
774[info] - should be parsed as a string label if it overflows int capacity
775[info] PlayJsonTestSerialization:
776[info] a patch json
777[info] - should be correctly deserialized from a Json object
778[info] a patch object
779[info] - should be correctly serialized to a Json object
780[info] a merge patch
781[info] - should be correctly deserialized from a Json object
782[info] - should be correctly deserialized from a non-object Json value
783[info] a merge patch object
784[info] - should be correctly serialized
785[info] a non-object patch
786[info] - should be correctly serialized
787[info] PlayJsonJsonMergeDiff:
788[info] a diff
789[info] - should be empty if created between two equal objects
790[info] - should be a simple replacement if the two values are completely different
791[info] - should be generated correctly for nested structures
792[info] PlayJsonTestJsonPatch:
793[info] applying an 'add' operation
794[info] - should add the field to the object if it does not exist
795[info] - should add a value with an empty string as the key
796[info] - should replace the value if the pointer is the root
797[info] - should replace the field value if it does exist
798[info] - should add an element to the array at the given index
799[info] - should add an element at the end of the array if the last element is '-'
800[info] - should create a nested field if needed
801[info] - should throw an error if some element is missing in the middle of the path
802[info] - should throw an error if adding an element out of the array boundaries
803[info] removing a label of an object
804[info] - should result in the object being amputated from this label
805[info] removing an element of an array
806[info] - should result in the array being amputated from this element
807[info] removing the '-' element of an array
808[info] - should result in an error being thrown
809[info] removing an element out of the array boundaries
810[info] - should result in an error being thrown
811[info] removing an unknown label from an object
812[info] - should result in an error being thrown
813[info] removing the root
814[info] - should result in an error being thrown
815[info] replacing an element in an object
816[info] - should result in this element being replaced
817[info] replacing an element in an array
818[info] - should result in this element being replaced
819[info] replacing the root
820[info] - should result in the value being completely replaced
821[info] replacing a non-existing element in an object
822[info] - should result in an error being thrown
823[info] replacing the '-' element of an array
824[info] - should result in an error being thrown
825[info] replacing an element out of the array boundaries
826[info] - should result in an error being thrown
827[info] moving a value from an object to an array
828[info] - should result in the value being added to the array and removed from the object
829[info] moving a value in a sub element
830[info] - should result in an error being thrown
831[info] moving the root
832[info] - should result in an error being thrown
833[info] copying an element in an object
834[info] - should result in this element being copied in the expected path
835[info] testing an existing element of an object
836[info] - should succeed and not modify the original object
837[info] testing an existing element with a non-expected value
838[info] - should result in an error being thrown
839[info] testing a non-existing element in an object
840[info] - should result in an error being thrown
841[info] PlayJsonSimpleDiff:
842[info] a diff
843[info] - should be empty if created between two equal values
844[info] - should be a simple replacement if the two values are completely different
845[info] - should conta be be bein an add operation for each added field
846[info] - should contain a remove operation for each removed field
847[info] - should correctly handle array diffs in objects (i.e. just replaced)
848[info] - should contain a replace operation for each changed field value
849[info] - should contain a replaced operation for the changed array (additions)
850[info] - should contain a replaced operation for the changed array (deletions)
851[info] - should contain a replace operation for the entire array if at least one element in it changed
852[info] applying a diff
853[info] - should be a fix point when applied to the first object used for the diff
854[info] applying a diff to strings
855[info] - should provide a correct string representation
856[info] - should correctly add removed values in object diffs
857[info] - should correctly add replaced values in object diffs
858[info] a remembering diff
859[info] - should remember old values
860[info] PlayJsonJsonDiff:
861[info] a diff
862[info] - should be empty if created between two equal values
863[info] - should be a simple replacement if the two values are completely different
864[info] - should contain an add operation for each added field
865[info] - should contain a remove operation for each removed field
866[info] - should correctly handle array diffs in objects
867[info] - should contain a replace operation for each changed field value
868[info] - should contain an add operation for each added element
869[info] - should contain a remove operation for each deleted element
870[info] - should contain a replace operation for each value that changed
871[info] applying a diff
872[info] - should be a fix point when applied to the first object used for the diff
873[info] applying a diff to strings
874[info] - should provide a correct string representation
875[info] a remembering diff
876[info] - should correctly add removed values in array diffs
877[info] - should correctly add removed values in object diffs
878[info] - should correctly add replaced values in object diffs
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/classes ...
974[info] done compiling
975[info] compiling 11 Scala sources to /build/repo/circe/jvm/target/scala-3.8.0/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": 22499, "warnings": 4, "errors": 0, "sourceVersion": "3.8"},
1573 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1574 "test-compile": {"status": "ok", "tookMs": 288, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1575 "test": {"status": "ok", "tookMs": 210, "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": 1575, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1584 "test-compile": {"status": "ok", "tookMs": 1647, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1585 "test": {"status": "ok", "tookMs": 1336, "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": 1766, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1593 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1594 "test-compile": {"status": "ok", "tookMs": 1294, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1595 "test": {"status": "ok", "tookMs": 797, "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": 55, "warnings": 7, "errors": 0, "sourceVersion": "3.8"},
1603 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1604 "test-compile": {"status": "ok", "tookMs": 1749, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1605 "test": {"status": "ok", "tookMs": 460, "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": 1358, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1613 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1614 "test-compile": {"status": "ok", "tookMs": 1094, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1615 "test": {"status": "ok", "tookMs": 1020, "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": 1407, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
1623 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
1624 "test-compile": {"status": "ok", "tookMs": 1795, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
1625 "test": {"status": "ok", "tookMs": 963, "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: 47 s, completed Jan 13, 2026, 3:35:16 PM
1633[0JChecking patch project/plugins.sbt...
1634Checking patch build.sbt...
1635Applied patch project/plugins.sbt cleanly.
1636Applied patch build.sbt cleanly.