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