You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2009/06/12 17:49:58 UTC

svn commit: r784163 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbi...

Author: mreutegg
Date: Fri Jun 12 15:49:58 2009
New Revision: 784163

URL: http://svn.apache.org/viewvc?rev=784163&view=rev
Log:
JCR-2085: test case (TCK) maintenance for JCR 2.0
- tests related to new property types DECIMAL, URI and WEAKREFERENCE

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ConstraintBuilder.java
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/NodeNameOperand.java
    jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java?rev=784163&r1=784162&r2=784163&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/Util.java Fri Jun 12 15:49:58 2009
@@ -27,6 +27,8 @@
 
 import java.util.regex.Pattern;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 
 import javax.jcr.PropertyType;
 import javax.jcr.Value;
@@ -272,6 +274,21 @@
                 c2 = v2.getDecimal();
                 break;
             case PropertyType.NAME:
+                if (v2.getType() == PropertyType.URI) {
+                    String s = v2.getString();
+                    if (s.startsWith("./")) {
+                        s = s.substring(2);
+                    }
+                    // need to decode
+                    try {
+                        c2 = URLDecoder.decode(s, "UTF-8");
+                    } catch (UnsupportedEncodingException e) {
+                        throw new RepositoryException(e);
+                    }
+                } else {
+                    c2 = v2.getString();
+                }
+                break;
             case PropertyType.PATH:
             case PropertyType.REFERENCE:
             case PropertyType.WEAKREFERENCE:

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ConstraintBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ConstraintBuilder.java?rev=784163&r1=784162&r2=784163&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ConstraintBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/ConstraintBuilder.java Fri Jun 12 15:49:58 2009
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.core.query.lucene.constraint;
 
 import java.util.Map;
+import java.net.URLDecoder;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
@@ -252,11 +253,19 @@
                 case PropertyType.URI:
                     // make sure static value is valid NAME
                     try {
-                            vf.createValue(staticValue.getString(), PropertyType.NAME);
+                        String s = staticValue.getString();
+                        if (staticValue.getType() == PropertyType.URI) {
+                            if (s.startsWith("./")) {
+                                s = s.substring(2);
+                            }
+                            // need to decode
+                            s = URLDecoder.decode(s, "UTF-8");
+                        }
+                        vf.createValue(s, PropertyType.NAME);
                     } catch (ValueFormatException e) {
                             throw new InvalidQueryException("Value " +
                                 staticValue.getString() +
-                                " cannot be converted into STRING");
+                                " cannot be converted into NAME");
                     }
                     break;
                 // the following types cannot be converted to NAME

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/NodeNameOperand.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/NodeNameOperand.java?rev=784163&r1=784162&r2=784163&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/NodeNameOperand.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/constraint/NodeNameOperand.java Fri Jun 12 15:49:58 2009
@@ -20,6 +20,7 @@
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
+import javax.jcr.PropertyType;
 
 import org.apache.jackrabbit.core.query.lucene.ScoreNode;
 import org.apache.jackrabbit.core.query.lucene.Util;
@@ -44,7 +45,7 @@
         try {
             SessionImpl session = context.getSession();
             String name = session.getNodeById(sn.getNodeId()).getName();
-            return new Value[]{session.getValueFactory().createValue(name)};
+            return new Value[]{session.getValueFactory().createValue(name, PropertyType.NAME)};
         } catch (RepositoryException e) {
             throw Util.createIOException(e);
         }

Modified: jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java?rev=784163&r1=784162&r2=784163&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/query/qom/NodeNameTest.java Fri Jun 12 15:49:58 2009
@@ -20,11 +20,13 @@
 import javax.jcr.Value;
 import javax.jcr.Node;
 import javax.jcr.PropertyType;
+import javax.jcr.ValueFactory;
 import javax.jcr.query.Query;
 import javax.jcr.query.InvalidQueryException;
 import javax.jcr.query.qom.QueryObjectModelConstants;
 
 import java.util.Calendar;
+import java.math.BigDecimal;
 
 /**
  * <code>NodeNameTest</code> checks if conversion of literals is correctly
@@ -34,10 +36,13 @@
 
     private Node node1;
 
+    private ValueFactory vf;
+
     protected void setUp() throws Exception {
         super.setUp();
         node1 = testRootNode.addNode(nodeName1, testNodeType);
-        testRootNode.save();
+        superuser.save();
+        vf = superuser.getValueFactory();
     }
 
     protected void tearDown() throws Exception {
@@ -46,13 +51,13 @@
     }
 
     public void testStringLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(nodeName1);
+        Value literal = vf.createValue(nodeName1);
         Query q = createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal);
         checkResult(q.execute(), new Node[]{node1});
     }
 
     public void testStringLiteralInvalidName() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue("[" + nodeName1);
+        Value literal = vf.createValue("[" + nodeName1);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with STRING that cannot be converted to NAME must fail with InvalidQueryException");
@@ -62,14 +67,14 @@
     }
 
     public void testBinaryLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(
+        Value literal = vf.createValue(
                 nodeName1, PropertyType.BINARY);
         Query q = createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal);
         checkResult(q.execute(), new Node[]{node1});
     }
 
     public void testDateLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(Calendar.getInstance());
+        Value literal = vf.createValue(Calendar.getInstance());
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with DATE must fail with InvalidQueryException");
@@ -79,7 +84,7 @@
     }
 
     public void testDoubleLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(Math.PI);
+        Value literal = vf.createValue(Math.PI);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with DOUBLE must fail with InvalidQueryException");
@@ -89,11 +94,17 @@
     }
 
     public void testDecimalLiteral() throws RepositoryException {
-        // TODO must throw InvalidQueryException
+        Value literal = vf.createValue(new BigDecimal(283));
+        try {
+            createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
+            fail("NodeName comparison with DECIMAL must fail with InvalidQueryException");
+        } catch (InvalidQueryException e) {
+            // expected
+        }
     }
 
     public void testLongLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(283);
+        Value literal = vf.createValue(283);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with LONG must fail with InvalidQueryException");
@@ -103,7 +114,7 @@
     }
 
     public void testBooleanLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(true);
+        Value literal = vf.createValue(true);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with BOOLEAN must fail with InvalidQueryException");
@@ -113,20 +124,17 @@
     }
 
     public void testNameLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(
-                nodeName1, PropertyType.NAME);
+        Value literal = vf.createValue(nodeName1, PropertyType.NAME);
         Query q = createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal);
         checkResult(q.execute(), new Node[]{node1});
     }
 
     public void testPathLiteral() throws RepositoryException {
-        Value literal = superuser.getValueFactory().createValue(
-                nodeName1, PropertyType.PATH);
+        Value literal = vf.createValue(nodeName1, PropertyType.PATH);
         Query q = createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal);
         checkResult(q.execute(), new Node[]{node1});
 
-        literal = superuser.getValueFactory().createValue(
-                node1.getPath(), PropertyType.PATH);
+        literal = vf.createValue(node1.getPath(), PropertyType.PATH);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with absolute PATH must fail with InvalidQueryException");
@@ -134,8 +142,7 @@
             // expected
         }
 
-        literal = superuser.getValueFactory().createValue(
-                nodeName1 + "/" + nodeName1, PropertyType.PATH);
+        literal = vf.createValue(nodeName1 + "/" + nodeName1, PropertyType.PATH);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with PATH length >1 must fail with InvalidQueryException");
@@ -148,8 +155,8 @@
         if (!node1.isNodeType(mixReferenceable)) {
             node1.addMixin(mixReferenceable);
         }
-        node1.save();
-        Value literal = superuser.getValueFactory().createValue(node1);
+        superuser.save();
+        Value literal = vf.createValue(node1);
         try {
             createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
             fail("NodeName comparison with REFERENCE must fail with InvalidQueryException");
@@ -159,7 +166,17 @@
     }
 
     public void testWeakReferenceLiteral() throws RepositoryException {
-        // TODO: must throw InvalidQueryException
+        if (!node1.isNodeType(mixReferenceable)) {
+            node1.addMixin(mixReferenceable);
+        }
+        superuser.save();
+        Value literal = vf.createValue(node1, true);
+        try {
+            createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
+            fail("NodeName comparison with WEAKREFERENCE must fail with InvalidQueryException");
+        } catch (InvalidQueryException e) {
+            // expected
+        }
     }
 
     /**
@@ -172,7 +189,17 @@
      * thrown.
      */
     public void testURILiteral() throws RepositoryException {
-        // TODO
+        Value literal = vf.createValue("./" + nodeName1, PropertyType.URI);
+        Query q = createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal);
+        checkResult(q.execute(), new Node[]{node1});
+
+        literal = vf.createValue("http://example.com", PropertyType.URI);
+        try {
+            createQuery(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, literal).execute();
+            fail("NodeName comparison with URI that cannot be converted to NAME must fail with InvalidQueryException");
+        } catch (InvalidQueryException e) {
+            // expected
+        }
     }
 
     public void testEqualTo() throws RepositoryException {
@@ -199,7 +226,7 @@
                                             String operator,
                                             boolean matches)
             throws RepositoryException {
-        Value value = superuser.getValueFactory().createValue(literal);
+        Value value = vf.createValue(literal);
         Query q = createQuery(operator, value);
         checkResult(q.execute(), matches ? new Node[]{node1} : new Node[0]);
     }