You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2017/01/24 15:52:22 UTC
svn commit: r1780086 -
/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
Author: reschke
Date: Tue Jan 24 15:52:22 2017
New Revision: 1780086
URL: http://svn.apache.org/viewvc?rev=1780086&view=rev
Log:
OAK-5508: add test cases for interesting node names
Added:
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java (with props)
Added: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java?rev=1780086&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java Tue Jan 24 15:52:22 2017
@@ -0,0 +1,289 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.jcr;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.util.UUID;
+
+import javax.jcr.ItemExistsException;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ValidNamesTest extends AbstractRepositoryTest {
+
+ private static final String TEST_NODE = "test_node";
+ private static final String TEST_PATH = '/' + TEST_NODE;
+
+ private Node testNode;
+
+ private String unmappedNsPrefix;
+ private String testPrefix;
+ private String testNsUri;
+
+ public ValidNamesTest(NodeStoreFixture fixture) {
+ super(fixture);
+ }
+
+ @Before
+ public void setup() throws RepositoryException {
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+ testNode = root.addNode(TEST_NODE);
+ session.save();
+
+ StringBuilder t = new StringBuilder();
+ for (String prefix : session.getNamespacePrefixes()) {
+ int l = t.length();
+ if (prefix.length() > l) {
+ t.append((char) (prefix.charAt(l) ^ 1));
+ } else {
+ t.append('x');
+ }
+ }
+ unmappedNsPrefix = t.toString();
+
+ for (String p : testNode.getSession().getNamespacePrefixes()) {
+ if (p.length() != 0) {
+ String u = testNode.getSession().getNamespaceURI(p);
+ if (u.contains(":")) {
+ testPrefix = p;
+ testNsUri = u;
+ }
+ }
+ }
+ assertNotNull(testPrefix);
+ assertNotNull(testNsUri);
+ }
+
+ @After
+ public void tearDown() throws RepositoryException {
+ Session s = testNode.getSession();
+ s.removeItem(TEST_PATH);
+ s.save();
+ }
+
+ @Test
+ public void testSimple() throws RepositoryException {
+ nameTest("foo");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = ItemExistsException.class)
+ public void testDot() throws RepositoryException {
+ nameTest(".");
+ }
+
+ @Test
+ public void testDotFoo() throws RepositoryException {
+ nameTest(".foo");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = ItemExistsException.class)
+ public void testDotDot() throws RepositoryException {
+ nameTest("..");
+ }
+
+ @Test
+ public void testDotDotFoo() throws RepositoryException {
+ nameTest("..foo");
+ }
+
+ @Test
+ public void testTrailingDot() throws RepositoryException {
+ nameTest("foo.");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testLeadingBlank() throws RepositoryException {
+ nameTest(" foo");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testTrailingBlank() throws RepositoryException {
+ nameTest("foo ");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = PathNotFoundException.class)
+ public void testEnclosedSlash() throws RepositoryException {
+ nameTest("foo/bar");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = PathNotFoundException.class)
+ public void testEnclosedPipe() throws RepositoryException {
+ nameTest("foo|bar");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = PathNotFoundException.class)
+ public void testEnclosedStar() throws RepositoryException {
+ nameTest("foo*bar");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = PathNotFoundException.class)
+ public void testEnclosedOpenBracket() throws RepositoryException {
+ nameTest("foo[bar");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = PathNotFoundException.class)
+ public void testEnclosedCloseBracket() throws RepositoryException {
+ nameTest("foo]bar");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testLeadingColon() throws RepositoryException {
+ nameTest(":foo");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testEnclosedUnmappedNsColon() throws RepositoryException {
+ nameTest(unmappedNsPrefix + ":bar");
+ }
+
+ // TODO seems to be a bug
+ @Test
+ public void testEmptyNameInCurlys() throws RepositoryException {
+ Node n = nameTest("{}foo");
+ assertEquals("foo", n.getName());
+ }
+
+ @Test
+ public void testSingleEnclosedOpenCurly() throws RepositoryException {
+ nameTest("foo{bar");
+ }
+
+ @Test
+ public void testSingleEnclosedCloseCurly() throws RepositoryException {
+ nameTest("foo}bar");
+ }
+
+ @Test
+ public void testValidLocalNameInCurlys() throws RepositoryException {
+ Node n = nameTest("{foo}bar");
+ assertEquals("{foo}bar", n.getName());
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testNonUriInCurlys() throws RepositoryException {
+ nameTest("{/}bar");
+ }
+
+ @Test
+ public void testValidNamespaceUriInCurlys() throws RepositoryException {
+ Node n = nameTest("{" + testNsUri + "}foo");
+ assertEquals(testPrefix + ":foo", n.getName());
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testValidNamespaceUriInCurlysWrongPlace() throws RepositoryException {
+ nameTest("x{" + testNsUri + "}foo");
+ }
+
+ // TODO: questionable exception
+ @Test(expected = RepositoryException.class)
+ public void testValidNamespaceUriInCurlysNoLocalName() throws RepositoryException {
+ nameTest("{" + testNsUri + "}");
+ }
+
+ // TODO better exception - or maybe this should pass?
+ @Test(expected = RepositoryException.class)
+ public void testQualifiedNameWithUnmappedNsUri() throws RepositoryException {
+ String ns = "urn:uuid:" + UUID.randomUUID().toString();
+ Node n = nameTest("{" + ns + "}foo");
+ String pref = n.getSession().getNamespacePrefix(ns);
+ assertEquals(pref + ":foo", n.getName());
+ }
+
+ @Test
+ public void testEnclosedPercent() throws RepositoryException {
+ nameTest("foo%bar");
+ }
+
+ @Test
+ public void testEnclosedBlank() throws RepositoryException {
+ nameTest("foo bar");
+ }
+
+ @Test(expected = RepositoryException.class)
+ public void testEnclosedTab() throws RepositoryException {
+ nameTest("foo\tbar");
+ }
+
+ @Test(expected = RepositoryException.class)
+ public void testEnclosedLf() throws RepositoryException {
+ nameTest("foo\nbar");
+ }
+
+ @Test(expected = RepositoryException.class)
+ public void testEnclosedCr() throws RepositoryException {
+ nameTest("foo\rbar");
+ }
+
+ @Test
+ public void testEnclosedNonBreakingSpace() throws RepositoryException {
+ nameTest("foo\u00a0bar");
+ }
+
+ // OAK-4587
+ @Test(expected = RepositoryException.class)
+ public void testEnclosedIdeographicSpace() throws RepositoryException {
+ nameTest("foo\u3000bar");
+ }
+
+ @Test
+ public void testUnpairedSurrogate() throws RepositoryException {
+ // see OAK-5506
+ org.junit.Assume.assumeFalse(super.fixture.toString().toLowerCase().contains("segment"));
+ nameTest("foo\ud800");
+ }
+
+ @Test
+ public void testSurrogate() throws RepositoryException {
+ nameTest("foo\uD83D\uDCA9");
+ }
+
+ private Node nameTest(String nodeName) throws RepositoryException {
+ Node n = testNode.addNode(nodeName);
+ testNode.getSession().save();
+ try {
+ return testNode.getSession().getNode(n.getPath());
+ } catch (RepositoryException ex) {
+ fail(ex.getMessage());
+ return null;
+ }
+ }
+}
\ No newline at end of file
Propchange: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ValidNamesTest.java
------------------------------------------------------------------------------
svn:eol-style = native