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/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new 916c9da553 CAUSEWAY-3411: puts specs-to-yaml code into MmSpecUtil
916c9da553 is described below

commit 916c9da5535092cceb733044b5609c702127a897
Author: Andi Huber <[email protected]>
AuthorDate: Tue Apr 4 17:37:33 2023 +0200

    CAUSEWAY-3411: puts specs-to-yaml code into MmSpecUtil
---
 .../causeway/core/metamodel/object/MmSpecUtil.java | 43 ++++++++++++++++++++++
 .../demoapp/testing/jdo/SpinUpDemoJdoTest.java     | 31 ++++++++++++++--
 .../demoapp/testing/jpa/SpinUpDemoJpaTest.java     | 40 +++++---------------
 3 files changed, 80 insertions(+), 34 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtil.java
index d3b555d3fb..b958a0d955 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtil.java
@@ -18,9 +18,17 @@
  */
 package org.apache.causeway.core.metamodel.object;
 
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.collections._Multimaps;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
 import lombok.NonNull;
+import lombok.val;
 import lombok.experimental.UtilityClass;
 
 @UtilityClass
@@ -42,4 +50,39 @@ public final class MmSpecUtil {
                     
.apply(guess.getSpecificationLoader().specForTypeElseFail(requiredType));
     }
 
+    /**
+     * Introduced for JUnit testing.
+     * <p>
+     * Shortcut for {@code 
specificationsBySortAsYaml(specLoader.snapshotSpecifications())}.
+     */
+    public String specificationsBySortAsYaml(final @NonNull 
SpecificationLoader specLoader) {
+        return specificationsBySortAsYaml(specLoader.snapshotSpecifications());
+    }
+
+    /**
+     * Introduced for JUnit testing.
+     */
+    public String specificationsBySortAsYaml(final @NonNull 
Can<ObjectSpecification> specs) {
+
+        // collect all ObjectSpecifications into a list-multi-map, where 
BeanSort is the key
+        var specsBySort = _Multimaps.<String, 
String>newListMultimap(LinkedHashMap<String, List<String>>::new, 
ArrayList::new);
+        specs
+                .stream()
+                .sorted()
+                
.forEach(spec->specsBySort.putElement(spec.getBeanSort().name(), 
spec.getLogicalTypeName()));
+
+        // export the list-multi-map to YAML format
+        val sb = new StringBuilder();
+        sb.append("ObjectSpecifications:\n");
+        specsBySort
+            .forEach((key, list)->{
+                sb.append(String.format("  %s:\n", key));
+                list.forEach(logicalTypeName->{
+                    sb.append(String.format("  - %s\n", logicalTypeName));
+                });
+            });
+
+        return sb.toString();
+    }
+
 }
\ No newline at end of file
diff --git 
a/examples/demo/testing/jdo/src/test/java/demoapp/testing/jdo/SpinUpDemoJdoTest.java
 
b/examples/demo/testing/jdo/src/test/java/demoapp/testing/jdo/SpinUpDemoJdoTest.java
index d9dc037ba5..fd140ce5b0 100644
--- 
a/examples/demo/testing/jdo/src/test/java/demoapp/testing/jdo/SpinUpDemoJdoTest.java
+++ 
b/examples/demo/testing/jdo/src/test/java/demoapp/testing/jdo/SpinUpDemoJdoTest.java
@@ -18,11 +18,22 @@
  */
 package demoapp.testing.jdo;
 
+import org.approvaltests.Approvals;
+import org.approvaltests.core.Options;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
 import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.object.MmSpecUtil;
+
+import lombok.val;
+
 @SpringBootTest(
         classes = {
                 DemoDomainJdo_forTesting.class
@@ -31,10 +42,24 @@ import org.springframework.test.context.ActiveProfiles;
         })
 @ActiveProfiles(profiles = "demo-jdo")
 class SpinUpDemoJdoTest {
-    
+
+    @Autowired MetaModelContext mmc;
+
     @Test @Disabled("missing DomainObjectAliasedJdo, ...") //TODO demo domain 
is currently WIP
-    void contextLoads() {
-        
+    @DisplayName("verifyAllSpecificationsDiscovered")
+    @UseReporter(DiffReporter.class)
+    void verify() {
+
+        val specificationsBySortAsYaml =
+                
MmSpecUtil.specificationsBySortAsYaml(mmc.getSpecificationLoader());
+
+        //debug
+        //System.err.printf("%s%n", specificationsBySortAsYaml);
+
+        // verify against approved run
+        Approvals.verify(specificationsBySortAsYaml, new Options()
+                .forFile()
+                .withExtension(".yaml"));
     }
 
 }
\ No newline at end of file
diff --git 
a/examples/demo/testing/jpa/src/test/java/demoapp/testing/jpa/SpinUpDemoJpaTest.java
 
b/examples/demo/testing/jpa/src/test/java/demoapp/testing/jpa/SpinUpDemoJpaTest.java
index 5f64c5edfe..2ce07f5767 100644
--- 
a/examples/demo/testing/jpa/src/test/java/demoapp/testing/jpa/SpinUpDemoJpaTest.java
+++ 
b/examples/demo/testing/jpa/src/test/java/demoapp/testing/jpa/SpinUpDemoJpaTest.java
@@ -18,10 +18,6 @@
  */
 package demoapp.testing.jpa;
 
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-
 import org.approvaltests.Approvals;
 import org.approvaltests.core.Options;
 import org.approvaltests.reporters.DiffReporter;
@@ -32,9 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 
-import org.apache.causeway.commons.internal.collections._Multimaps;
-import org.apache.causeway.core.config.beans.CausewayBeanTypeRegistry;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.core.metamodel.object.MmSpecUtil;
 
 import lombok.val;
 
@@ -48,39 +43,22 @@ import lombok.val;
         })
 @ActiveProfiles(profiles = "demo-jpa")
 class SpinUpDemoJpaTest {
-    
+
     @Autowired MetaModelContext mmc;
-    @Autowired CausewayBeanTypeRegistry causewayBeanTypeRegistry; 
-    
+
     @Test
     @DisplayName("verifyAllSpecificationsDiscovered")
     @UseReporter(DiffReporter.class)
     void verify() {
-        
-        var specsBySort = _Multimaps.<String, 
String>newListMultimap(LinkedHashMap<String, List<String>>::new, 
ArrayList::new);
 
-        // collect all ObjectSpecifications into a list-multi-map, where 
BeanSort is the key
-        mmc.getSpecificationLoader().snapshotSpecifications()
-                .stream()
-                .sorted()
-                
.forEach(spec->specsBySort.putElement(spec.getBeanSort().name(), 
spec.getLogicalTypeName()));
-        
-        // export the list-multi-map to YAML format
-        val sb = new StringBuilder();
-        sb.append("ObjectSpecifications:\n");
-        specsBySort
-            .forEach((key, list)->{
-                sb.append(String.format("  %s:\n", key));
-                list.forEach(logicalTypeName->{
-                    sb.append(String.format("  - %s\n", logicalTypeName));
-                });
-            });
-        
+        val specificationsBySortAsYaml =
+                
MmSpecUtil.specificationsBySortAsYaml(mmc.getSpecificationLoader());
+
         //debug
-        //System.err.printf("%s%n", sb.toString());
-        
+        //System.err.printf("%s%n", specificationsBySortAsYaml);
+
         // verify against approved run
-        Approvals.verify(sb.toString(), new Options()
+        Approvals.verify(specificationsBySortAsYaml, new Options()
                 .forFile()
                 .withExtension(".yaml"));
     }

Reply via email to