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 a58f533dd0 ISIS-3167: adds VM test
a58f533dd0 is described below

commit a58f533dd00834c3ebef0ffff93cc1efcd53e038
Author: Andi Huber <[email protected]>
AuthorDate: Wed Aug 31 11:15:13 2022 +0200

    ISIS-3167: adds VM test
---
 .../core/metamodel/spec/ObjectSpecification.java   |  6 +++-
 .../core/metamodel/object/ManagedObjectTest.java   | 38 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index f0a755a073..847ea7f3d7 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -403,8 +403,12 @@ extends
     boolean isHidden();
 
     /**
-     * Whether this specification represents a bean, that is a managed bean
+     * Whether represents a bean, that is a managed bean
      * with scoped life-cycle, available for dependency injection.
+     * <p>
+     * DANGER: don't call during MM introspection
+     * @apiNote this predicate might not be valid until all services
+     *      have been discovered and the application context has settled
      */
     boolean isInjectable();
 
diff --git 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/object/ManagedObjectTest.java
 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/object/ManagedObjectTest.java
index a6cd9570bc..3bfdf8587a 100644
--- 
a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/object/ManagedObjectTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/object/ManagedObjectTest.java
@@ -25,13 +25,17 @@ import org.junit.jupiter.params.provider.ValueSource;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.commons.internal._Constants;
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
 import org.apache.isis.core.metamodel.object.ManagedObject.Specialization;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.valuesemantics.IntValueSemantics;
 
+import lombok.SneakyThrows;
 import lombok.val;
 
 class ManagedObjectTest {
@@ -84,6 +88,40 @@ class ManagedObjectTest {
         assertEquals(Specialization.VALUE, presentObject.getSpecialization());
 
         presentObject.assertCompliance(6);
+
+        assertThrows(AssertionError.class, ()->{
+            presentObject.assertCompliance("incompatible");
+        });
+    }
+
+    @ParameterizedTest
+    @ValueSource(classes = {DomainObjectList.class})
+    @SneakyThrows
+    void someTypesShouldMapToViewmodel(final Class<?> cls) {
+        val spec = specLoader.specForTypeElseFail(cls);
+        assertFalse(spec.isVoid(), ()->"isVoid()");
+        assertTrue(spec.isViewModel(), ()->"isViewModel()");
+        assertFalse(spec.isAbstract(), ()->"isAbstract()");
+        assertFalse(spec.isInjectable(), ()->"isInjectable()");
+
+        val emptySpez = Specialization.inferFrom(spec, null);
+        assertEquals(Specialization.EMPTY, emptySpez);
+
+        val emptyObject = ManagedObject.empty(spec);
+        assertNotNull(emptyObject);
+
+        val constructor = cls.getConstructor(_Constants.emptyClasses);
+        val pojo = constructor.newInstance(_Constants.emptyObjects);
+
+        val presentObject = ManagedObject.wrapScalar(specLoader, pojo);
+        assertEquals(Specialization.VIEWMODEL, 
presentObject.getSpecialization());
+
+        presentObject.assertCompliance(pojo);
+
+        //TODO
+//        assertThrows(AssertionError.class, ()->{
+//            presentObject.assertCompliance("incompatible");
+//        });
     }
 
 }

Reply via email to