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,})