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 e1eeb1a4d6 CAUSEWAY-3718: reinstate JUnit tests (be strict about bool 
+ char repr.)
e1eeb1a4d6 is described below

commit e1eeb1a4d66620f0e818d5447fb4ecc4ac843ba5
Author: Andi Huber <[email protected]>
AuthorDate: Wed Apr 10 10:25:23 2024 +0200

    CAUSEWAY-3718: reinstate JUnit tests (be strict about bool + char repr.)
---
 .../JsonValueEncoderServiceDefault.java            | 39 +++++++++++++++++-----
 .../domainobjects/JsonValueEncoderTest.java        |  4 +--
 2 files changed, 33 insertions(+), 10 deletions(-)

diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
index 8bdf169281..e29946f346 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
@@ -37,6 +37,7 @@ import 
org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
 import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.commons.internal.assertions._Assert;
 import org.apache.causeway.commons.internal.base._Casts;
+import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer;
 import 
org.apache.causeway.core.metamodel.facets.object.value.ValueSerializer.Format;
@@ -76,14 +77,20 @@ public class JsonValueEncoderServiceDefault implements 
JsonValueEncoderService {
             final JsonRepresentation valueRepr,
             final JsonValueConverter.Context context) {
 
-        if(valueRepr == null) {
-            return null;
-        }
-        if (spec == null) {
-            throw new IllegalArgumentException("ObjectSpecification is 
required");
-        }
-        if (!spec.isValue()) {
-            throw new IllegalArgumentException("Representation must be of a 
value");
+        // sanity checks
+        if(valueRepr == null) return null;
+        if(spec == null) throw new 
IllegalArgumentException("ObjectSpecification is required");
+        if(!spec.isValue()) throw new IllegalArgumentException("Representation 
must be of a value");
+
+        // primitive representation checks (ignoring value-semantics)
+        val valueClass = spec.getCorrespondingClass();
+        if(ClassUtils.isPrimitiveOrWrapper(valueClass)) {
+            val primitiveWrapper = 
ClassUtils.resolvePrimitiveIfNecessary(valueClass);
+            if(Boolean.class.equals(primitiveWrapper)) {
+                booleanRepresentationCheck(valueRepr);
+            } else if(Character.class.equals(primitiveWrapper)) {
+                characterRepresentationCheck(valueRepr);
+            }
         }
 
         // handle composite value types (requires a ValueSemanticsProvider for 
the valueClass to be registered with Spring)
@@ -249,4 +256,20 @@ public class JsonValueEncoderServiceDefault implements 
JsonValueEncoderService {
                 .enstring(Format.JSON, 
_Casts.uncheckedCast(adapter.getPojo()));
     }
 
+    // -- PRIMITIVE CHECKS
+
+    private void booleanRepresentationCheck(final JsonRepresentation 
valueRepr) {
+        if(!valueRepr.isBoolean()) {
+            throw new IllegalArgumentException("Representation must be a 
single character");
+        }
+    }
+
+    private void characterRepresentationCheck(final JsonRepresentation 
valueRepr) {
+        if(valueRepr.isString()
+                && _NullSafe.size(valueRepr.asString()) <= 1) {
+            return; // check is ok
+        }
+        throw new IllegalArgumentException("Representation must be a single 
character string");
+    }
+
 }
diff --git 
a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
 
b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
index 6ed2c83a9f..503b938652 100644
--- 
a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
+++ 
b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
@@ -101,12 +101,12 @@ extends JsonValueEncoderTestAbstract {
 
     @ParameterizedTest
     @ValueSource(classes = {
-            //boolean.class, Boolean.class, //TODO broken test
+            boolean.class, Boolean.class,
             long.class, Long.class,
             int.class, Integer.class,
             short.class, Short.class,
             byte.class, Byte.class,
-            //char.class, Character.class //TODO broken test
+            char.class, Character.class,
             double.class, Double.class,
             float.class, Float.class,
             BigInteger.class, BigDecimal.class,})

Reply via email to