add moved test classes to core.metadata

git-svn-id: https://svn.apache.org/repos/asf/lenya/trunk@1034460 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/org.apache.lenya.core.metadata/pom.xml b/org.apache.lenya.core.metadata/pom.xml
index 37994bf..c8d5f43 100644
--- a/org.apache.lenya.core.metadata/pom.xml
+++ b/org.apache.lenya.core.metadata/pom.xml
@@ -35,5 +35,13 @@
       <groupId>org.apache.lenya</groupId>
       <artifactId>lenya-core-workflow</artifactId>
     </dependency>
+        <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-cocoon</artifactId>
+    </dependency>
+        <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-publication</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.metadata/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java b/org.apache.lenya.core.metadata/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java
new file mode 100644
index 0000000..01da550
--- /dev/null
+++ b/org.apache.lenya.core.metadata/src/test/java/org/apache/lenya/cms/metadata/MetaDataTest.java
@@ -0,0 +1,193 @@
+/*
+ * 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.lenya.cms.metadata;
+
+import java.util.Map;
+
+import org.apache.lenya.cms.AbstractAccessControlTest;
+import org.apache.lenya.cms.metadata.dublincore.DublinCore;
+import org.apache.lenya.cms.publication.Document;
+import org.apache.lenya.cms.publication.Publication;
+import org.apache.lenya.cms.repository.metadata.Element;
+
+/**
+ * Meta data test.
+ */
+public class MetaDataTest extends AbstractAccessControlTest {
+
+    /**
+     * Tests the meta data.
+     * @throws Exception
+     */
+    public void testMetaData() throws Exception {
+
+        Publication publication = getSession().getPublication("test");
+        Document doc = publication.getArea("authoring").getSite().getNode("/index").getLink("en")
+                .getDocument();
+
+        String namespaceUri = "foobar";
+        Exception e = null;
+        try {
+            doc.getMetaData(namespaceUri);
+        } catch (Exception e1) {
+            e = e1;
+        }
+        assertNotNull(e);
+
+        namespaceUri = DublinCore.DC_NAMESPACE;
+        MetaData dc = doc.getMetaData(namespaceUri);
+
+        doc.lock();
+
+        checkSetTitle(dc);
+        checkRemoveAllValues(dc);
+
+    }
+
+    protected void checkSetTitle(MetaData dc) throws MetaDataException {
+        Exception e = null;
+        try {
+            dc.setValue("foo", "bar");
+        } catch (Exception e1) {
+            e = e1;
+        }
+        assertNotNull(e);
+        dc.setValue("title", "This is the title");
+
+        e = null;
+        // addValue() should throw an exception because a value is already set
+        try {
+            dc.addValue("title", "bar");
+        } catch (Exception e1) {
+            e = e1;
+        }
+        assertNotNull(e);
+
+    }
+
+    String NAMESPACE = "http://apache.org/lenya/test/metadata";
+
+    protected void checkOnCopy(Publication pub) throws Exception {
+        MetaDataRegistryWrapper registry = null;
+        try {
+            registry = (MetaDataRegistryWrapper) getManager().lookup(MetaDataRegistry.ROLE);
+            org.apache.lenya.cms.repository.metadata.ElementSet set = new TestElementSet();
+            registry.getRepositoryMetaDataRegistry().register(NAMESPACE, set);
+        } finally {
+            getManager().release(registry);
+        }
+
+        Document source = pub.getArea(Publication.AUTHORING_AREA).getDocument("/index", "en");
+        Document target = pub.getArea(Publication.AUTHORING_AREA).getDocument("/index", "en");
+
+        MetaData sourceMeta = source.getMetaData(NAMESPACE);
+        sourceMeta.setValue("copy", "sourceCopy");
+        sourceMeta.setValue("ignore", "sourceIgnore");
+        sourceMeta.setValue("delete", "sourceDelete");
+
+        MetaData targetMeta = target.getMetaData(NAMESPACE);
+        targetMeta.setValue("ignore", "targetIgnore");
+        targetMeta.setValue("delete", "targetDelete");
+
+        targetMeta.replaceBy(sourceMeta);
+
+        assertTrue(targetMeta.getValues("copy").length == 1);
+        assertEquals(sourceMeta.getValues("copy"), targetMeta.getValues("copy"));
+
+        assertTrue(targetMeta.getValues("ignore").length == 1);
+        assertEquals(targetMeta.getFirstValue("ignore"), "targetIgnore");
+
+        assertTrue(targetMeta.getValues("delete").length == 0);
+    }
+
+    protected void checkRemoveAllValues(MetaData dc) throws MetaDataException {
+        dc.removeAllValues("title");
+        assertTrue(dc.getValues("title").length == 0);
+    }
+
+    protected class TestElement implements org.apache.lenya.cms.repository.metadata.Element {
+
+        private String name;
+        private int actionOnCopy;
+
+        protected TestElement(String name, int actionOnCopy) {
+            this.name = name;
+            this.actionOnCopy = actionOnCopy;
+        }
+
+        public int getActionOnCopy() {
+            return actionOnCopy;
+        }
+
+        public String getDescription() {
+            return "";
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public boolean isEditable() {
+            return false;
+        }
+
+        public boolean isMultiple() {
+            return false;
+        }
+
+        public boolean isSearchable() {
+            return false;
+        }
+
+    }
+
+    protected class TestElementSet implements org.apache.lenya.cms.repository.metadata.ElementSet {
+
+        private org.apache.lenya.cms.repository.metadata.Element[] elements = {
+                new TestElement("copy", Element.ONCOPY_COPY),
+                new TestElement("ignore", Element.ONCOPY_IGNORE),
+                new TestElement("delete", Element.ONCOPY_DELETE) };
+
+        private Map<String, org.apache.lenya.cms.repository.metadata.Element> name2element;
+
+        protected TestElementSet() {
+            for (int i = 0; i < elements.length; i++) {
+                this.name2element.put(elements[i].getName(), elements[i]);
+            }
+        }
+
+        public boolean containsElement(String name) {
+            return true;
+        }
+
+        public org.apache.lenya.cms.repository.metadata.Element getElement(String name)
+                throws org.apache.lenya.cms.repository.metadata.MetaDataException {
+            return (org.apache.lenya.cms.repository.metadata.Element) this.name2element.get(name);
+        }
+
+        public org.apache.lenya.cms.repository.metadata.Element[] getElements() {
+            return elements;
+        }
+
+        public String getNamespaceUri() {
+            return NAMESPACE;
+        }
+
+    }
+
+}