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);
+    }
+
 }

Reply via email to