You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2025/02/24 12:48:08 UTC
(sling-org-apache-sling-jcr-repoinit) 01/01: SLING-12668 unit test to reproduce problem
This is an automated email from the ASF dual-hosted git repository.
sseifert pushed a commit to branch feature/SLING-12668-forcedMultiValue
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git
commit c5fdacdec9405f7e508fc42bee4633be2c47e234
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Mon Feb 24 13:47:42 2025 +0100
SLING-12668 unit test to reproduce problem
---
.../sling/jcr/repoinit/it/RepoInitTextIT.java | 53 ++++++++++++++++++++++
src/test/resources/repoinit.txt | 9 ++++
2 files changed, 62 insertions(+)
diff --git a/src/test/java/org/apache/sling/jcr/repoinit/it/RepoInitTextIT.java b/src/test/java/org/apache/sling/jcr/repoinit/it/RepoInitTextIT.java
index baac1c9..c4c400d 100644
--- a/src/test/java/org/apache/sling/jcr/repoinit/it/RepoInitTextIT.java
+++ b/src/test/java/org/apache/sling/jcr/repoinit/it/RepoInitTextIT.java
@@ -19,13 +19,17 @@
package org.apache.sling.jcr.repoinit.it;
import javax.inject.Inject;
+import javax.jcr.Node;
+import javax.jcr.Property;
import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.UUID;
+import java.util.stream.Stream;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.Authorizable;
@@ -40,6 +44,7 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -407,4 +412,52 @@ public class RepoInitTextIT extends RepoInitTestSupport {
}
};
}
+
+ @Test
+ public void forcedMultiValue() throws Exception {
+ new Retry() {
+ @Override
+ public Void call() throws Exception {
+ Node node = session.getNode("/forcedMultiValue");
+ assertMultiProperty(node, "multiValue", new String[] {"item1", "item2"});
+ assertMultiProperty(node, "singleMultiValue", new String[] {"single"});
+ assertMultiProperty(node, "emptyMultiValue", new String[0]);
+ assertLongMultiProperty(node, "longMultiValue", new Long[] {1243L, 5678L});
+ assertLongMultiProperty(node, "singleLongMultiValue", new Long[] {1243L});
+ assertLongMultiProperty(node, "emptyMultiValue", new Long[0]);
+ return null;
+ }
+ };
+ }
+
+ private static void assertMultiProperty(Node node, String propertyName, Object[] expectedValues) throws Exception {
+ Property prop = node.getProperty(propertyName);
+ assertTrue("Property " + propertyName + " is not multiple", prop.isMultiple());
+ Object[] actualValues = Stream.of(prop.getValues())
+ .map(value -> {
+ try {
+ return value.getString();
+ } catch (IllegalStateException | RepositoryException e) {
+ return null;
+ }
+ })
+ .toArray();
+ assertArrayEquals("Unexpected values for property " + propertyName, expectedValues, actualValues);
+ }
+
+ private static void assertLongMultiProperty(Node node, String propertyName, Object[] expectedValues)
+ throws Exception {
+ Property prop = node.getProperty(propertyName);
+ assertTrue("Property " + propertyName + " is not multiple", prop.isMultiple());
+ Object[] actualValues = Stream.of(prop.getValues())
+ .map(value -> {
+ try {
+ return value.getLong();
+ } catch (IllegalStateException | RepositoryException e) {
+ return null;
+ }
+ })
+ .toArray();
+ assertArrayEquals("Unexpected values for property " + propertyName, expectedValues, actualValues);
+ }
}
diff --git a/src/test/resources/repoinit.txt b/src/test/resources/repoinit.txt
index 2dbbe24..a3fa817 100644
--- a/src/test/resources/repoinit.txt
+++ b/src/test/resources/repoinit.txt
@@ -112,3 +112,12 @@ set properties on authorizable(bob)/nested,authorizable(grpB)/nested
set quotedMix to "quoted", non-quoted, "the last \" one"
set nested/someInteger{Long} to 42
end
+
+ensure nodes (nt:unstructured) /forcedMultiValue with properties
+ set multiValue{String[]} to "item1","item2"
+ set singleMultiValue{String[]} to "single"
+ set emptyMultiValue{String[]} to
+ set longMultiValue{Long[]} to 1243,5678
+ set singleLongMultiValue{Long[]} to 1243
+ set emptyLongMultiValue{Long[]} to
+end