This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 2763905841 ISIS-3315: adds test-case for
ManagedObjects.NATURAL_NULL_FIRST comparator
2763905841 is described below
commit 2763905841c9584ca98fbe0b3d2bcbad70d518fa
Author: Andi Huber <[email protected]>
AuthorDate: Wed Dec 21 09:06:42 2022 +0100
ISIS-3315: adds test-case for ManagedObjects.NATURAL_NULL_FIRST
comparator
---
.../core/metamodel/object/ManagedObjects.java | 2 +-
.../core/metamodel/object/ManagedObjectTest.java | 121 +++++++++++++++++++++
2 files changed, 122 insertions(+), 1 deletion(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
index 270a565654..830393ea05 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
@@ -281,7 +281,7 @@ public final class ManagedObjects {
// -- PREDEFINED COMPARATOR
- private static final Comparator<ManagedObject> NATURAL_NULL_FIRST = new
Comparator<ManagedObject>(){
+ static final Comparator<ManagedObject> NATURAL_NULL_FIRST = new
Comparator<ManagedObject>(){
@SuppressWarnings({"rawtypes" })
@Override
public int compare(final @Nullable ManagedObject a, final @Nullable
ManagedObject b) {
diff --git
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/object/ManagedObjectTest.java
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/object/ManagedObjectTest.java
index 6e951495ae..1912f933be 100644
---
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/object/ManagedObjectTest.java
+++
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/object/ManagedObjectTest.java
@@ -18,7 +18,11 @@
*/
package org.apache.causeway.core.metamodel.object;
+import java.util.List;
+import java.util.stream.Collectors;
+
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
@@ -30,6 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.apache.causeway.applib.domain.DomainObjectList;
import org.apache.causeway.commons.internal._Constants;
+import org.apache.causeway.commons.internal.base._NullSafe;
import org.apache.causeway.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.causeway.core.metamodel.object.ManagedObject.Specialization;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
@@ -124,4 +129,120 @@ class ManagedObjectTest {
// });
}
+ @Test
+ void comparatorShouldNotViolateItsGeneralContract() {
+
+ val stringSpec = specLoader.specForTypeElseFail(String.class);
+
+ final String[] DATA = new String[] { "[email protected]",
"[email protected]",
+ "[email protected]", "[email protected]",
"[email protected]",
+ "[email protected]", "[email protected]",
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null, "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null, "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null, "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ null, "[email protected]",
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ null, "[email protected]",
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ null, "[email protected]",
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ null, "[email protected]",
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", null,
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null,
"[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]",
"[email protected]", "[email protected]",
+ "[email protected]", null };
+
+ // given
+ final List<ManagedObject> managedObjects = _NullSafe.stream(DATA)
+ .map(sampleString->
+ sampleString!=null
+ ? ManagedObject.value(stringSpec, sampleString)
+ : ManagedObject.empty(stringSpec))
+ .collect(Collectors.toList());
+
+ // when, then ... if broken throws java.lang.IllegalArgumentException:
Comparison method violates its general contract!
+ managedObjects.sort(ManagedObjects.NATURAL_NULL_FIRST);
+ }
+
}