Author: michiel
Date: 2010-04-13 12:44:41 +0200 (Tue, 13 Apr 2010)
New Revision: 41872

Added:
   mmbase/trunk/bridge/src/main/config/builders/properties.xml
   mmbase/trunk/bridge/src/test/java/org/mmbase/storage/
   
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
Removed:
   
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
Modified:
   
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
   mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
Log:
fixes some test-cases

Copied: mmbase/trunk/bridge/src/main/config/builders/properties.xml (from rev 
41867, mmbase/trunk/core/src/main/config/builders/properties.xml)
===================================================================
--- mmbase/trunk/bridge/src/main/config/builders/properties.xml                 
        (rev 0)
+++ mmbase/trunk/bridge/src/main/config/builders/properties.xml 2010-04-13 
10:44:41 UTC (rev 41872)
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<builder
+    xmlns="http://www.mmbase.org/xmlns/builder";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+    xmlns:xi="http://www.w3.org/2001/XInclude";
+    extends="object"
+    name="properties"
+    maintainer="mmbase.org"
+    version="0"
+    xsi:schemaLocation="http://www.mmbase.org/xmlns/builder 
http://www.mmbase.org/xmlns/builder.xsd";>
+
+  <!--
+      This is the 'properties' builder MMBase used to have.
+      You can set it active again.
+      See also javadoc in org.mmbase.module.builders.Properties
+      MMB-1656
+  -->
+  <status>inactive</status>
+
+  <class>Properties</class>
+  <searchage>-1</searchage>
+  <names>
+    <singular xml:lang="en">Property</singular>
+    <singular xml:lang="nl">Eigenschap</singular>
+
+    <plural xml:lang="en">Properties</plural>
+    <plural xml:lang="nl">Eigenschappen</plural>
+  </names>
+
+  <descriptions>
+    <description xml:lang="en">
+      Flexible properties to be added to any object. The implementation 
depends on the application
+      or template in which a property can be used.
+    </description>
+    <description xml:lang="nl">
+      Flexibele eigenschappen of voorkeuren die aan een node kunnen worden 
toegekend. De implementatie 
+      ervan is afhankelijk van de applicatie of de template waarin een 
voorkeur kan worden gebruikt.
+    </description>
+  </descriptions>
+
+  <fieldlist>
+
+    <field name="parent">
+      <descriptions>
+        <description xml:lang="en">Node to which the property was 
added</description>
+        <description xml:lang="nl">Node waaraan de eigenschap of voorkeur is 
toegekend</description>
+      </descriptions>
+      <gui>
+        <guiname xml:lang="en">Parent</guiname>
+        <guiname xml:lang="nl">Ouder</guiname>
+      </gui>
+      <editor><positions><list>1</list></positions></editor>
+      <datatype base="node" xmlns="http://www.mmbase.org/xmlns/datatypes";>
+        <required value="true" />
+      </datatype>
+    </field>
+
+    <field name="key">
+      <descriptions>
+        <description xml:lang="en">Key, identifier of a property</description>
+        <description xml:lang="nl">Sleutel, identificatiewaarde waarmee de 
eigenschap of voorkeur kan worden herkend</description>
+      </descriptions>
+      <gui>
+        <guiname xml:lang="en">Key</guiname>
+        <guiname xml:lang="nl">Sleutel</guiname>
+      </gui>
+      <editor><positions><list>2</list></positions></editor>
+      <datatype base="eline" xmlns="http://www.mmbase.org/xmlns/datatypes";>
+        <required value="true" />
+        <minLength value="1" />
+        <maxLength value="255" />
+      </datatype>
+    </field>
+    <field name="ptype">
+      <!-- I have no idea what a ptype is
+           Probably the 'type' of the value. But what the possible values can 
be is still unclear.
+           I'd suggest that the values could be datatypes, but that certainly 
is not what it used to mean a long time ago.
+      -->
+      <gui>
+        <guiname xml:lang="en">Ptype</guiname>
+        <guiname xml:lang="nl">P-type</guiname>
+      </gui>
+      
<editor><positions><input>-1</input><list>-1</list><search>-1</search></positions></editor>
+      <datatype base="eline" xmlns="http://www.mmbase.org/xmlns/datatypes";>
+        <maxLength value="16" />
+      </datatype>
+    </field>
+
+    <field name="value">
+      <descriptions>
+        <description xml:lang="en">Value of the property</description>
+        <description xml:lang="nl">Waarde van de eigenschap of 
voorkeur</description>
+      </descriptions>
+      <gui>
+        <guiname xml:lang="en">Value</guiname>
+        <guiname xml:lang="nl">Waarde</guiname>
+      </gui>
+      <datatype base="field" xmlns="http://www.mmbase.org/xmlns/datatypes";>
+        <maxLength value="255" />
+      </datatype>
+    </field>
+  </fieldlist>
+
+</builder>

Modified: 
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
===================================================================
--- 
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java 
    2010-04-13 10:31:27 UTC (rev 41871)
+++ 
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java 
    2010-04-13 10:44:41 UTC (rev 41872)
@@ -11,6 +11,7 @@
 
 import java.util.*;
 import org.mmbase.bridge.Field;
+import org.mmbase.bridge.NotFoundException;
 import org.mmbase.storage.search.implementation.*;
 
 import org.mmbase.util.logging.*;
@@ -466,14 +467,18 @@
             return;
         }
 
-        Field fieldDefs= getQueryContext().getField(step.getTableName(), 
fieldName);
-        if (fieldDefs == null) {
-            throw new IllegalArgumentException("Not a known field of builder " 
+ step.getTableName() + ": \"" + fieldName + "\"");
+        try {
+            Field fieldDefs= getQueryContext().getField(step.getTableName(), 
fieldName);
+            if (fieldDefs == null) {
+                throw new IllegalArgumentException("Not a known field of 
builder " + step.getTableName() + ": \"" + fieldName + "\"");
+            }
+
+            // Add the stepfield.
+            BasicStepField stepField= query.addField(step, fieldDefs);
+            fieldsByAlias.put(fieldAlias, stepField);
+        } catch (NotFoundException nfe) {
+            throw new IllegalArgumentException(nfe);
         }
-
-        // Add the stepfield.
-        BasicStepField stepField= query.addField(step, fieldDefs);
-        fieldsByAlias.put(fieldAlias, stepField);
     }
 
     /**

Copied: mmbase/trunk/bridge/src/test/java/org/mmbase/storage (from rev 41853, 
mmbase/trunk/core/src/test/java/org/mmbase/storage)

Deleted: 
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
===================================================================
--- 
mmbase/trunk/core/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
   2010-04-12 15:39:21 UTC (rev 41853)
+++ 
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
 2010-04-13 10:44:41 UTC (rev 41872)
@@ -1,398 +0,0 @@
-package org.mmbase.storage.search;
-
-import java.util.*;
-import org.junit.*;
-import static org.junit.Assert.*;
-import org.mmbase.bridge.*;
-import org.mmbase.bridge.mock.*;
-import org.mmbase.bridge.util.Queries;
-import org.mmbase.storage.search.implementation.*;
-
-
-public class ClusterQueriesTest {
-
-    private final String NEWS = "news";
-    private static int    RELATED;
-
-    @BeforeClass
-    public static void setup() throws java.io.IOException {
-        MockCloudContext.getInstance().addCore();
-        MockCloudContext.getInstance().addCoreModel();
-        
MockCloudContext.getInstance().addNodeManagers(MockBuilderReader.getBuilderLoader().getChildResourceLoader("mynews"));
-        RELATED =  
MockCloudContext.getInstance().getCloud("mmbase").getRelationManager("related").getNumber();
-    }
-
-    ClusterQueries instance = new 
BridgeClusterQueries(MockCloudContext.getInstance().getCloud("mmbase"));
-
-    @Test
-    public void getUniqueTableAlias() {
-        List<String> originalAliases = Arrays.asList(new String[] {"test1", 
"test2"});
-        Set<String> tableAliases = new HashSet<String>();
-        String alias = instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
-        assertTrue(alias.equals("test"));
-        assertTrue(tableAliases.size() == 1);
-        assertTrue(tableAliases.contains("test"));
-        assertTrue(originalAliases.size() == 2);
-
-        alias = instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
-        assertTrue(alias.equals("test0"));
-        assertTrue(tableAliases.size() == 2);
-        assertTrue(tableAliases.contains("test0"));
-        assertTrue(originalAliases.size() == 2);
-
-        alias = instance.getUniqueTableAlias(
-            "test1", tableAliases, originalAliases);
-        assertTrue(alias.equals("test1"));
-        assertTrue(tableAliases.size() == 3);
-        assertTrue(tableAliases.contains("test1"));
-        assertTrue(originalAliases.size() == 2);
-
-        alias = instance.getUniqueTableAlias(
-            "test", tableAliases, originalAliases);
-        assertTrue(alias.equals("test3"));
-        assertTrue(tableAliases.size() == 4);
-        assertTrue(tableAliases.contains("test1"));
-        assertTrue(originalAliases.size() == 2);
-
-        for (int i = 4; i < 10; i++) {
-            alias = instance.getUniqueTableAlias(
-                "test" + (i - 1), tableAliases, originalAliases);
-            assertTrue(alias, alias.equals("test" + i));
-            assertTrue(tableAliases.size() == i + 1);
-            assertTrue(tableAliases.contains("test" + i));
-            assertTrue(originalAliases.size() == 2);
-        }
-
-        try {
-            // Can't generate another unique value for this string,
-            // should throw IndexOutOfBoundsException.
-            instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
-            fail("Can't generate another unique value for this string, "
-                + "should throw IndexOutOfBoundsException.");
-        } catch (IndexOutOfBoundsException e) {}
-
-        assertTrue(tableAliases.size() == 10);
-        for (int i = 0; i < 10; i++) {
-            if (i == 2) {
-                assertTrue(!tableAliases.contains("test" + i));
-            } else {
-                assertTrue(tableAliases.contains("test" + i));
-            }
-        }
-        assertTrue(tableAliases.contains("test"));
-
-        // Alias containing white space.
-        alias = instance.getUniqueTableAlias(
-            "white space", tableAliases, originalAliases);
-        assertTrue(alias, alias.equals("white space"));
-        assertTrue(tableAliases.contains("white space"));
-    }
-
-    @Test
-    public void getBuilder() {
-        Map<String,Integer> nodes = new HashMap<String,Integer>();
-        
assertTrue(MockCloudContext.getInstance().getCloud("mmbase").hasNodeManager(NEWS));
-
-        assertEquals(NEWS, instance.getBuilder("news", nodes));
-        assertTrue(nodes.size() == 0);
-
-        assertTrue(instance.getBuilder("news0", nodes).equals(NEWS));
-        assertTrue(nodes.size() == 0);
-
-        assertTrue(instance.getBuilder("news1", nodes).equals(NEWS));
-        assertTrue(nodes.size() == 0);
-
-        assertEquals("insrel", instance.getBuilder("related", nodes));
-        assertTrue("Nodes is " + nodes + " should be size 1", nodes.size() == 
1);
-        assertEquals(Integer.valueOf(RELATED), nodes.get("related"));
-
-        assertEquals("insrel", instance.getBuilder("related0", nodes));
-
-        assertEquals(2, nodes.size());
-        assertEquals(Integer.valueOf(RELATED), nodes.get("related0"));
-
-        try {
-            // Unknown builder or role, should throw IllegalArgumentException.
-            instance.getBuilder("xxxx", nodes);
-            fail("Unknown builder or role, "
-                + "should throw IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-    }
-
-
-    @Test
-    public void addFields() {
-        BasicSearchQuery query = new BasicSearchQuery();
-        Map<String,Integer> roles = new HashMap<String,Integer>();
-        Map<String, BasicStepField> fieldsByName = new HashMap<String, 
BasicStepField>();
-        List<String> tables = Arrays.asList(
-            new String[] {"news", "related", "people", "news1"});
-        Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables, 
roles, true, fieldsByName);
-        assertTrue(query.getFields().size() == 4);
-        assertTrue(fieldsByName.size() == 4);
-
-        instance.addFields(query, "news.title", stepsByAlias, fieldsByName);
-
-        StepField stepField = getField(query, "news", "title");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("news.title")));
-        assertTrue(stepField.getAlias() == null);
-        assertTrue(query.getFields().size() == 5);
-        assertTrue(fieldsByName.size() == 5);
-
-        instance.addFields(query, "related.number", stepsByAlias, 
fieldsByName);
-        stepField = getField(query, "related", "number");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("related.number")));
-        assertTrue(stepField.getAlias() == null);
-        // Not added twice.
-        assertTrue(query.getFields().size() == 5);
-        assertTrue(fieldsByName.size() == 5);
-
-        instance.addFields(query, "people.firstname", stepsByAlias, 
fieldsByName);
-        stepField = getField(query, "people", "firstname");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("people.firstname")));
-        assertTrue(stepField.getAlias() == null);
-        assertTrue(query.getFields().size() == 6);
-        assertTrue(fieldsByName.size() == 6);
-
-        instance.addFields(query, "news1.title", stepsByAlias, fieldsByName);
-        stepField = getField(query, "news1", "title");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("news1.title")));
-        assertTrue(stepField.getAlias() == null);
-        assertTrue(query.getFields().size() == 7);
-        assertTrue(fieldsByName.size() == 7);
-
-        try {
-            // Invalid expression, should throw IllegalArgumentException.
-            instance.addFields(query, "newsnumber", stepsByAlias, 
fieldsByName);
-            fail("Invalid expression, should throw IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-
-        try {
-            // Invalid expression, should throw IllegalArgumentException.
-            instance.addFields(query, ".newsnumber", stepsByAlias, 
fieldsByName);
-            fail("Invalid expression, should throw IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-
-        try {
-            // Invalid expression, should throw IllegalArgumentException.
-            instance.addFields(query, "newsnumber.", stepsByAlias, 
fieldsByName);
-            fail("Invalid expression, should throw IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-
-        try {
-            // Unknown table alias, should throw IllegalArgumentException.
-            instance.addFields(query, "xxx.number", stepsByAlias, 
fieldsByName);
-            fail("Unknown table alias, should throw 
IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-
-        try {
-            // Unknown field name, should throw IllegalArgumentException.
-            instance.addFields(query, "news.xxx", stepsByAlias, fieldsByName);
-            fail("Unknown table alias, should throw 
IllegalArgumentException.");
-        } catch (IllegalArgumentException e) {}
-
-        instance.addFields(query, "f1(news.body,news1.body)", stepsByAlias, 
fieldsByName);
-        stepField = getField(query, "news", "body");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("news.body")));
-        assertTrue(stepField.getAlias() == null);
-        stepField = getField(query, "news1", "body");
-        assertTrue(stepField != null);
-        assertTrue(stepField.equals(fieldsByName.get("news1.body")));
-        assertTrue(query.getFields().size() == 9);
-        assertTrue(fieldsByName.size() == 9);
-    }
-
-    @Test
-    public void isRelation() {
-        assertTrue(instance.isRelation("insrel"));
-        assertFalse(instance.isRelation("news"));
-    }
-
-
-
-    /** Test of addSteps() method, of class 
org.mmbase.module.core.ClusterBuilder. */
-    @Test
-    public void addSteps() {
-        // --- requires role "related" to be defined: ---
-        BasicSearchQuery query = new BasicSearchQuery();
-        Map<String,Integer> roles = new HashMap<String,Integer>();
-        Map<String, BasicStepField> fieldsByName = new HashMap<String, 
BasicStepField>();
-        List<String> tables = Arrays.asList(new String[] {"news", "news1"});
-        Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables, 
roles, true, fieldsByName);
-        // Test steps and returned map.
-        assertTrue(stepsByAlias.size() == 3);
-        List<Step> steps = query.getSteps();
-        assertTrue(steps.size() == 3);
-        Step step0 = steps.get(0);
-        assertTrue(step0.getTableName().equals("news"));
-        assertTrue(step0.getAlias().equals("news"));
-        assertTrue(stepsByAlias.get("news") == step0);
-        Step step1 = steps.get(1);
-        assertTrue(step1.getTableName().equals("insrel"));
-        assertTrue(step1.getAlias().startsWith("insrel"));
-        assertTrue(stepsByAlias.get("insrel") == step1);
-        Step step2 = steps.get(2);
-        assertTrue(step2.getTableName().equals("news"));
-        assertTrue(step2.getAlias().equals("news1"));
-        assertTrue(stepsByAlias.get("news1") == step2);
-        // Test (number)fields and fields map.
-        assertTrue(fieldsByName.toString(), fieldsByName.size() == 2);
-        List<StepField> fields = query.getFields();
-        assertTrue(fields.size() == 2);
-        StepField field0 = fields.get(0);
-        assertTrue(field0.getStep() == step0);
-        assertTrue(field0.getFieldName().equals("number"));
-        assertTrue(fieldsByName.get("news.number") == field0);
-        StepField field1 = fields.get(1);
-        assertTrue(field1.getStep() == step2);
-        assertTrue(field1.getFieldName().equals("number"));
-        assertTrue(fieldsByName.get("news1.number") == field1);
-        // Test roles.
-        assertTrue("Roles is " + roles + " not{}", roles.size() == 0);
-
-        query = new BasicSearchQuery();
-        roles.clear();
-        fieldsByName.clear();
-        tables = Arrays.asList(new String[] {"news", "news1"});
-        stepsByAlias = instance.addSteps(query, tables, roles, false, 
fieldsByName);
-        // Test steps and returned map.
-        assertTrue(stepsByAlias.size() == 3);
-        steps = query.getSteps();
-        assertTrue(steps.size() == 3);
-        step0 = steps.get(0);
-        assertTrue(step0.getTableName().equals("news"));
-        assertTrue(step0.getAlias().equals("news"));
-        assertTrue(stepsByAlias.get("news") == step0);
-        step1 = steps.get(1);
-        assertTrue(step1.getTableName().equals("insrel"));
-        assertTrue(step1.getAlias().startsWith("insrel"));
-        assertTrue(stepsByAlias.get("insrel") == step1);
-        step2 = steps.get(2);
-        assertTrue(step2.getTableName().equals("news"));
-        assertTrue(step2.getAlias().equals("news1"));
-        assertTrue(stepsByAlias.get("news1") == step2);
-        // Test (number)fields and fields map.
-        assertTrue(fieldsByName.size() == 0);
-        fields = query.getFields();
-        assertTrue(fields.size() == 0);
-        // Test roles.
-        assertTrue(roles.size() == 0);
-
-        query = new BasicSearchQuery();
-        roles.clear();
-        fieldsByName.clear();
-        tables = Arrays.asList(new String[] {"news", "related", "news1"});
-        stepsByAlias = instance.addSteps(query, tables, roles, true, 
fieldsByName);
-        // Test steps and returned map.
-        assertEquals("" + stepsByAlias, 3, stepsByAlias.size());
-        steps = query.getSteps();
-        assertEquals(3, steps.size());
-        step0 = steps.get(0);
-        assertTrue(step0.getTableName().equals("news"));
-        assertTrue(step0.getAlias().equals("news"));
-        assertTrue(stepsByAlias.get("news") == step0);
-        step1 = steps.get(1);
-        assertTrue(step1.getTableName().equals("insrel"));
-        assertTrue(step1.getAlias().equals("related"));
-        assertTrue(stepsByAlias.get("related") == step1);
-        step2 = steps.get(2);
-        assertTrue(step2.getTableName().equals("news"));
-        assertTrue(step2.getAlias().equals("news1"));
-        assertTrue(stepsByAlias.get("news1") == step2);
-
-        // Test (number)fields and fields map.
-        assertTrue(fieldsByName.size() == 3);
-        fields = query.getFields();
-        assertTrue(fields.size() == 3);
-        field0 = fields.get(0);
-        assertTrue(field0.getStep() == step0);
-        assertTrue(field0.getFieldName().equals("number"));
-        assertTrue(fieldsByName.get("news.number") == field0);
-        field1 = fields.get(1);
-        assertTrue(field1.getStep() == step1);
-        assertTrue(field1.getFieldName().equals("number"));
-        assertTrue(fieldsByName.get("related.number") == field1);
-        StepField field2 = fields.get(2);
-        assertTrue(field2.getStep() == step2);
-        assertTrue(field2.getFieldName().equals("number"));
-        assertTrue(fieldsByName.get("news1.number") == field2);
-        // Test roles.
-        assertTrue("Roles is " + roles + " wich has not size 1", roles.size() 
== 1);
-        Integer number = roles.get("related");
-        assertTrue("" + number.intValue() + " != " + RELATED, 
number.intValue() == RELATED);
-
-        query = new BasicSearchQuery();
-        roles.clear();
-        fieldsByName.clear();
-        tables = Arrays.asList(new String[] {"news", "related", "news1", 
"related", "news"});
-        stepsByAlias = instance.addSteps(query, tables, roles, true, 
fieldsByName);
-        // Test steps and returned map.
-        assertTrue(stepsByAlias.size() == 5);
-        steps = query.getSteps();
-        assertTrue(steps.size() == 5);
-        step0 = steps.get(0);
-        assertTrue(step0.getTableName().equals("news"));
-        assertTrue(step0.getAlias().equals("news"));
-        assertTrue(stepsByAlias.get("news") == step0);
-        step1 = steps.get(1);
-        assertTrue(step1.getTableName().equals("insrel"));
-        assertTrue(step1.getAlias().equals("related"));
-        assertTrue(stepsByAlias.get("related") == step1);
-        step2 = steps.get(2);
-        assertTrue(step2.getTableName().equals("news"));
-        assertTrue(step2.getAlias().equals("news1"));
-        assertTrue(stepsByAlias.get("news1") == step2);
-        Step step3 = steps.get(3);
-        assertTrue(step3.getTableName().equals("insrel"));
-        assertTrue(step3.getAlias().equals("related0"));
-        assertTrue(stepsByAlias.get("related0") == step3);
-        Step step4 = steps.get(4);
-        assertTrue(step4.getTableName().equals("news"));
-        assertTrue(step4.getAlias().equals("news0"));
-        assertTrue(stepsByAlias.get("news0") == step4);
-        // Test (number)fields and field map.
-        assertTrue(fieldsByName.size() == 3);
-        fields = query.getFields();
-        assertTrue(fields.toString(), fields.size() == 3);
-        for (int i = 0; i < 3; i++) {
-            StepField field = fields.get(i);
-            assertTrue(field.getStep() == steps.get(i));
-            assertTrue(field.getFieldName().equals("number"));
-            assertTrue(fieldsByName.get(tables.get(i) + ".number") == field);
-        }
-        // Test roles.
-        assertTrue("Roles is " + roles + " which is not size 2. There are to 
roles, so related and related0 must be availab.e", roles.size() == 2);
-        number = roles.get("related");
-        assertTrue(number.intValue() == RELATED);
-    }
-
-    /**
-     * Gets field in query.
-     *
-     * @param query The query.
-     * @param stepAlias The alias of the step.
-     * @param fieldName The name of the field.
-     * @return The field if the field is present in the query, null otherwise.
-     */
-    private StepField getField(
-            SearchQuery query, String stepAlias, String fieldName) {
-        StepField result = null;
-        Iterator<StepField> iFields = query.getFields().iterator();
-        while (iFields.hasNext()) {
-            StepField field = iFields.next();
-            if (field.getStep().getAlias().equals(stepAlias)
-            && field.getFieldName().equals(fieldName)) {
-                // Found.
-                result = field;
-                break;
-            }
-        }
-        return result;
-    }
-
-}

Copied: 
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
 (from rev 41856, 
mmbase/trunk/core/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java)
===================================================================
--- 
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
                         (rev 0)
+++ 
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
 2010-04-13 10:44:41 UTC (rev 41872)
@@ -0,0 +1,398 @@
+package org.mmbase.storage.search;
+
+import java.util.*;
+import org.junit.*;
+import static org.junit.Assert.*;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.mock.*;
+import org.mmbase.bridge.util.Queries;
+import org.mmbase.storage.search.implementation.*;
+
+
+public class ClusterQueriesTest {
+
+    private final String NEWS = "news";
+    private static int    RELATED;
+
+    @BeforeClass
+    public static void setup() throws java.io.IOException {
+        MockCloudContext.getInstance().addCore();
+        MockCloudContext.getInstance().addCoreModel();
+        
MockCloudContext.getInstance().addNodeManagers(MockBuilderReader.getBuilderLoader().getChildResourceLoader("mynews"));
+        RELATED =  
MockCloudContext.getInstance().getCloud("mmbase").getRelationManager("related").getNumber();
+    }
+
+    ClusterQueries instance = new BridgeClusterQueries(new 
QueryContext.Bridge(MockCloudContext.getInstance().getCloud("mmbase")));
+
+    @Test
+    public void getUniqueTableAlias() {
+        List<String> originalAliases = Arrays.asList(new String[] {"test1", 
"test2"});
+        Set<String> tableAliases = new HashSet<String>();
+        String alias = instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
+        assertTrue(alias.equals("test"));
+        assertTrue(tableAliases.size() == 1);
+        assertTrue(tableAliases.contains("test"));
+        assertTrue(originalAliases.size() == 2);
+
+        alias = instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
+        assertTrue(alias.equals("test0"));
+        assertTrue(tableAliases.size() == 2);
+        assertTrue(tableAliases.contains("test0"));
+        assertTrue(originalAliases.size() == 2);
+
+        alias = instance.getUniqueTableAlias(
+            "test1", tableAliases, originalAliases);
+        assertTrue(alias.equals("test1"));
+        assertTrue(tableAliases.size() == 3);
+        assertTrue(tableAliases.contains("test1"));
+        assertTrue(originalAliases.size() == 2);
+
+        alias = instance.getUniqueTableAlias(
+            "test", tableAliases, originalAliases);
+        assertTrue(alias.equals("test3"));
+        assertTrue(tableAliases.size() == 4);
+        assertTrue(tableAliases.contains("test1"));
+        assertTrue(originalAliases.size() == 2);
+
+        for (int i = 4; i < 10; i++) {
+            alias = instance.getUniqueTableAlias(
+                "test" + (i - 1), tableAliases, originalAliases);
+            assertTrue(alias, alias.equals("test" + i));
+            assertTrue(tableAliases.size() == i + 1);
+            assertTrue(tableAliases.contains("test" + i));
+            assertTrue(originalAliases.size() == 2);
+        }
+
+        try {
+            // Can't generate another unique value for this string,
+            // should throw IndexOutOfBoundsException.
+            instance.getUniqueTableAlias("test", tableAliases, 
originalAliases);
+            fail("Can't generate another unique value for this string, "
+                + "should throw IndexOutOfBoundsException.");
+        } catch (IndexOutOfBoundsException e) {}
+
+        assertTrue(tableAliases.size() == 10);
+        for (int i = 0; i < 10; i++) {
+            if (i == 2) {
+                assertTrue(!tableAliases.contains("test" + i));
+            } else {
+                assertTrue(tableAliases.contains("test" + i));
+            }
+        }
+        assertTrue(tableAliases.contains("test"));
+
+        // Alias containing white space.
+        alias = instance.getUniqueTableAlias(
+            "white space", tableAliases, originalAliases);
+        assertTrue(alias, alias.equals("white space"));
+        assertTrue(tableAliases.contains("white space"));
+    }
+
+    @Test
+    public void getBuilder() {
+        Map<String,Integer> nodes = new HashMap<String,Integer>();
+        
assertTrue(MockCloudContext.getInstance().getCloud("mmbase").hasNodeManager(NEWS));
+
+        assertEquals(NEWS, instance.getBuilder("news", nodes));
+        assertTrue(nodes.size() == 0);
+
+        assertTrue(instance.getBuilder("news0", nodes).equals(NEWS));
+        assertTrue(nodes.size() == 0);
+
+        assertTrue(instance.getBuilder("news1", nodes).equals(NEWS));
+        assertTrue(nodes.size() == 0);
+
+        assertEquals("insrel", instance.getBuilder("related", nodes));
+        assertTrue("Nodes is " + nodes + " should be size 1", nodes.size() == 
1);
+        assertEquals(Integer.valueOf(RELATED), nodes.get("related"));
+
+        assertEquals("insrel", instance.getBuilder("related0", nodes));
+
+        assertEquals(2, nodes.size());
+        assertEquals(Integer.valueOf(RELATED), nodes.get("related0"));
+
+        try {
+            // Unknown builder or role, should throw IllegalArgumentException.
+            instance.getBuilder("xxxx", nodes);
+            fail("Unknown builder or role, "
+                + "should throw IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+    }
+
+
+    @Test
+    public void addFields() {
+        BasicSearchQuery query = new BasicSearchQuery();
+        Map<String,Integer> roles = new HashMap<String,Integer>();
+        Map<String, BasicStepField> fieldsByName = new HashMap<String, 
BasicStepField>();
+        List<String> tables = Arrays.asList(
+            new String[] {"news", "related", "people", "news1"});
+        Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables, 
roles, true, fieldsByName);
+        assertTrue(query.getFields().size() == 4);
+        assertTrue(fieldsByName.size() == 4);
+
+        instance.addFields(query, "news.title", stepsByAlias, fieldsByName);
+
+        StepField stepField = getField(query, "news", "title");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("news.title")));
+        assertTrue(stepField.getAlias() == null);
+        assertTrue(query.getFields().size() == 5);
+        assertTrue(fieldsByName.size() == 5);
+
+        instance.addFields(query, "related.number", stepsByAlias, 
fieldsByName);
+        stepField = getField(query, "related", "number");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("related.number")));
+        assertTrue(stepField.getAlias() == null);
+        // Not added twice.
+        assertTrue(query.getFields().size() == 5);
+        assertTrue(fieldsByName.size() == 5);
+
+        instance.addFields(query, "people.firstname", stepsByAlias, 
fieldsByName);
+        stepField = getField(query, "people", "firstname");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("people.firstname")));
+        assertTrue(stepField.getAlias() == null);
+        assertTrue(query.getFields().size() == 6);
+        assertTrue(fieldsByName.size() == 6);
+
+        instance.addFields(query, "news1.title", stepsByAlias, fieldsByName);
+        stepField = getField(query, "news1", "title");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("news1.title")));
+        assertTrue(stepField.getAlias() == null);
+        assertTrue(query.getFields().size() == 7);
+        assertTrue(fieldsByName.size() == 7);
+
+        try {
+            // Invalid expression, should throw IllegalArgumentException.
+            instance.addFields(query, "newsnumber", stepsByAlias, 
fieldsByName);
+            fail("Invalid expression, should throw IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+
+        try {
+            // Invalid expression, should throw IllegalArgumentException.
+            instance.addFields(query, ".newsnumber", stepsByAlias, 
fieldsByName);
+            fail("Invalid expression, should throw IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+
+        try {
+            // Invalid expression, should throw IllegalArgumentException.
+            instance.addFields(query, "newsnumber.", stepsByAlias, 
fieldsByName);
+            fail("Invalid expression, should throw IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+
+        try {
+            // Unknown table alias, should throw IllegalArgumentException.
+            instance.addFields(query, "xxx.number", stepsByAlias, 
fieldsByName);
+            fail("Unknown table alias, should throw 
IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+
+        try {
+            // Unknown field name, should throw IllegalArgumentException.
+            instance.addFields(query, "news.xxx", stepsByAlias, fieldsByName);
+            fail("Unknown table alias, should throw 
IllegalArgumentException.");
+        } catch (IllegalArgumentException e) {}
+
+        instance.addFields(query, "f1(news.body,news1.body)", stepsByAlias, 
fieldsByName);
+        stepField = getField(query, "news", "body");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("news.body")));
+        assertTrue(stepField.getAlias() == null);
+        stepField = getField(query, "news1", "body");
+        assertTrue(stepField != null);
+        assertTrue(stepField.equals(fieldsByName.get("news1.body")));
+        assertTrue(query.getFields().size() == 9);
+        assertTrue(fieldsByName.size() == 9);
+    }
+
+    @Test
+    public void isRelation() {
+        assertTrue(instance.isRelation("insrel"));
+        assertFalse(instance.isRelation("news"));
+    }
+
+
+
+    /** Test of addSteps() method, of class 
org.mmbase.module.core.ClusterBuilder. */
+    @Test
+    public void addSteps() {
+        // --- requires role "related" to be defined: ---
+        BasicSearchQuery query = new BasicSearchQuery();
+        Map<String,Integer> roles = new HashMap<String,Integer>();
+        Map<String, BasicStepField> fieldsByName = new HashMap<String, 
BasicStepField>();
+        List<String> tables = Arrays.asList(new String[] {"news", "news1"});
+        Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables, 
roles, true, fieldsByName);
+        // Test steps and returned map.
+        assertTrue(stepsByAlias.size() == 3);
+        List<Step> steps = query.getSteps();
+        assertTrue(steps.size() == 3);
+        Step step0 = steps.get(0);
+        assertTrue(step0.getTableName().equals("news"));
+        assertTrue(step0.getAlias().equals("news"));
+        assertTrue(stepsByAlias.get("news") == step0);
+        Step step1 = steps.get(1);
+        assertTrue(step1.getTableName().equals("insrel"));
+        assertTrue(step1.getAlias().startsWith("insrel"));
+        assertTrue(stepsByAlias.get("insrel") == step1);
+        Step step2 = steps.get(2);
+        assertTrue(step2.getTableName().equals("news"));
+        assertTrue(step2.getAlias().equals("news1"));
+        assertTrue(stepsByAlias.get("news1") == step2);
+        // Test (number)fields and fields map.
+        assertTrue(fieldsByName.toString(), fieldsByName.size() == 2);
+        List<StepField> fields = query.getFields();
+        assertTrue(fields.size() == 2);
+        StepField field0 = fields.get(0);
+        assertTrue(field0.getStep() == step0);
+        assertTrue(field0.getFieldName().equals("number"));
+        assertTrue(fieldsByName.get("news.number") == field0);
+        StepField field1 = fields.get(1);
+        assertTrue(field1.getStep() == step2);
+        assertTrue(field1.getFieldName().equals("number"));
+        assertTrue(fieldsByName.get("news1.number") == field1);
+        // Test roles.
+        assertTrue("Roles is " + roles + " not{}", roles.size() == 0);
+
+        query = new BasicSearchQuery();
+        roles.clear();
+        fieldsByName.clear();
+        tables = Arrays.asList(new String[] {"news", "news1"});
+        stepsByAlias = instance.addSteps(query, tables, roles, false, 
fieldsByName);
+        // Test steps and returned map.
+        assertTrue(stepsByAlias.size() == 3);
+        steps = query.getSteps();
+        assertTrue(steps.size() == 3);
+        step0 = steps.get(0);
+        assertTrue(step0.getTableName().equals("news"));
+        assertTrue(step0.getAlias().equals("news"));
+        assertTrue(stepsByAlias.get("news") == step0);
+        step1 = steps.get(1);
+        assertTrue(step1.getTableName().equals("insrel"));
+        assertTrue(step1.getAlias().startsWith("insrel"));
+        assertTrue(stepsByAlias.get("insrel") == step1);
+        step2 = steps.get(2);
+        assertTrue(step2.getTableName().equals("news"));
+        assertTrue(step2.getAlias().equals("news1"));
+        assertTrue(stepsByAlias.get("news1") == step2);
+        // Test (number)fields and fields map.
+        assertTrue(fieldsByName.size() == 0);
+        fields = query.getFields();
+        assertTrue(fields.size() == 0);
+        // Test roles.
+        assertTrue(roles.size() == 0);
+
+        query = new BasicSearchQuery();
+        roles.clear();
+        fieldsByName.clear();
+        tables = Arrays.asList(new String[] {"news", "related", "news1"});
+        stepsByAlias = instance.addSteps(query, tables, roles, true, 
fieldsByName);
+        // Test steps and returned map.
+        assertEquals("" + stepsByAlias, 3, stepsByAlias.size());
+        steps = query.getSteps();
+        assertEquals(3, steps.size());
+        step0 = steps.get(0);
+        assertTrue(step0.getTableName().equals("news"));
+        assertTrue(step0.getAlias().equals("news"));
+        assertTrue(stepsByAlias.get("news") == step0);
+        step1 = steps.get(1);
+        assertTrue(step1.getTableName().equals("insrel"));
+        assertTrue(step1.getAlias().equals("related"));
+        assertTrue(stepsByAlias.get("related") == step1);
+        step2 = steps.get(2);
+        assertTrue(step2.getTableName().equals("news"));
+        assertTrue(step2.getAlias().equals("news1"));
+        assertTrue(stepsByAlias.get("news1") == step2);
+
+        // Test (number)fields and fields map.
+        assertTrue(fieldsByName.size() == 3);
+        fields = query.getFields();
+        assertTrue(fields.size() == 3);
+        field0 = fields.get(0);
+        assertTrue(field0.getStep() == step0);
+        assertTrue(field0.getFieldName().equals("number"));
+        assertTrue(fieldsByName.get("news.number") == field0);
+        field1 = fields.get(1);
+        assertTrue(field1.getStep() == step1);
+        assertTrue(field1.getFieldName().equals("number"));
+        assertTrue(fieldsByName.get("related.number") == field1);
+        StepField field2 = fields.get(2);
+        assertTrue(field2.getStep() == step2);
+        assertTrue(field2.getFieldName().equals("number"));
+        assertTrue(fieldsByName.get("news1.number") == field2);
+        // Test roles.
+        assertTrue("Roles is " + roles + " wich has not size 1", roles.size() 
== 1);
+        Integer number = roles.get("related");
+        assertTrue("" + number.intValue() + " != " + RELATED, 
number.intValue() == RELATED);
+
+        query = new BasicSearchQuery();
+        roles.clear();
+        fieldsByName.clear();
+        tables = Arrays.asList(new String[] {"news", "related", "news1", 
"related", "news"});
+        stepsByAlias = instance.addSteps(query, tables, roles, true, 
fieldsByName);
+        // Test steps and returned map.
+        assertTrue(stepsByAlias.size() == 5);
+        steps = query.getSteps();
+        assertTrue(steps.size() == 5);
+        step0 = steps.get(0);
+        assertTrue(step0.getTableName().equals("news"));
+        assertTrue(step0.getAlias().equals("news"));
+        assertTrue(stepsByAlias.get("news") == step0);
+        step1 = steps.get(1);
+        assertTrue(step1.getTableName().equals("insrel"));
+        assertTrue(step1.getAlias().equals("related"));
+        assertTrue(stepsByAlias.get("related") == step1);
+        step2 = steps.get(2);
+        assertTrue(step2.getTableName().equals("news"));
+        assertTrue(step2.getAlias().equals("news1"));
+        assertTrue(stepsByAlias.get("news1") == step2);
+        Step step3 = steps.get(3);
+        assertTrue(step3.getTableName().equals("insrel"));
+        assertTrue(step3.getAlias().equals("related0"));
+        assertTrue(stepsByAlias.get("related0") == step3);
+        Step step4 = steps.get(4);
+        assertTrue(step4.getTableName().equals("news"));
+        assertTrue(step4.getAlias().equals("news0"));
+        assertTrue(stepsByAlias.get("news0") == step4);
+        // Test (number)fields and field map.
+        assertTrue(fieldsByName.size() == 3);
+        fields = query.getFields();
+        assertTrue(fields.toString(), fields.size() == 3);
+        for (int i = 0; i < 3; i++) {
+            StepField field = fields.get(i);
+            assertTrue(field.getStep() == steps.get(i));
+            assertTrue(field.getFieldName().equals("number"));
+            assertTrue(fieldsByName.get(tables.get(i) + ".number") == field);
+        }
+        // Test roles.
+        assertTrue("Roles is " + roles + " which is not size 2. There are to 
roles, so related and related0 must be availab.e", roles.size() == 2);
+        number = roles.get("related");
+        assertTrue(number.intValue() == RELATED);
+    }
+
+    /**
+     * Gets field in query.
+     *
+     * @param query The query.
+     * @param stepAlias The alias of the step.
+     * @param fieldName The name of the field.
+     * @return The field if the field is present in the query, null otherwise.
+     */
+    private StepField getField(
+            SearchQuery query, String stepAlias, String fieldName) {
+        StepField result = null;
+        Iterator<StepField> iFields = query.getFields().iterator();
+        while (iFields.hasNext()) {
+            StepField field = iFields.next();
+            if (field.getStep().getAlias().equals(stepAlias)
+            && field.getFieldName().equals(fieldName)) {
+                // Found.
+                result = field;
+                break;
+            }
+        }
+        return result;
+    }
+
+}

Modified: 
mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
===================================================================
--- mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java   
2010-04-13 10:31:27 UTC (rev 41871)
+++ mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java   
2010-04-13 10:44:41 UTC (rev 41872)
@@ -29,18 +29,7 @@
 public class ResourceLoaderTest {
 
 
-
-    /**
-     * perform lookup of mmbaseroot.xml using getConfigurationroot
-     */
     @Test
-    public void getMMBaseRootModule() throws java.io.IOException {
-        URL url = 
ResourceLoader.getConfigurationRoot().getResource("modules/mmbaseroot.xml");
-        assertNotNull("did not find mmbaseroot.xml", url);
-        assertTrue("existing resource should be openable for input", 
url.openConnection().getDoInput());
-    }
-
-    @Test
     public void getPropertiesBuilder() throws java.io.IOException {
         URL url = 
ResourceLoader.getConfigurationRoot().getResource("builders/properties.xml");
         assertNotNull("did not find properties.xml", url);

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to