1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.tika.metadata;
18  
19  //JDK imports
20  import java.util.Properties;
21  
22  //Junit imports
23  import junit.framework.Test;
24  import junit.framework.TestCase;
25  import junit.framework.TestSuite;
26  import junit.textui.TestRunner;
27  
28  /**
29   * JUnit based tests of class {@link org.apache.tika.metadata.Metadata}.
30   */
31  public class TestMetadata extends TestCase {
32  
33      private static final String CONTENTTYPE = "contenttype";
34  
35      public TestMetadata(String testName) {
36          super(testName);
37      }
38  
39      public static Test suite() {
40          return new TestSuite(TestMetadata.class);
41      }
42  
43      public static void main(String[] args) {
44          TestRunner.run(suite());
45      }
46  
47      /** Test for the <code>add(String, String)</code> method. */
48      public void testAdd() {
49          String[] values = null;
50          Metadata meta = new Metadata();
51  
52          values = meta.getValues(CONTENTTYPE);
53          assertEquals(0, values.length);
54  
55          meta.add(CONTENTTYPE, "value1");
56          values = meta.getValues(CONTENTTYPE);
57          assertEquals(1, values.length);
58          assertEquals("value1", values[0]);
59  
60          meta.add(CONTENTTYPE, "value2");
61          values = meta.getValues(CONTENTTYPE);
62          assertEquals(2, values.length);
63          assertEquals("value1", values[0]);
64          assertEquals("value2", values[1]);
65  
66          // NOTE : For now, the same value can be added many times.
67          // Should it be changed?
68          meta.add(CONTENTTYPE, "value1");
69          values = meta.getValues(CONTENTTYPE);
70          assertEquals(3, values.length);
71          assertEquals("value1", values[0]);
72          assertEquals("value2", values[1]);
73          assertEquals("value1", values[2]);
74      }
75  
76      /** Test for the <code>set(String, String)</code> method. */
77      public void testSet() {
78          String[] values = null;
79          Metadata meta = new Metadata();
80  
81          values = meta.getValues(CONTENTTYPE);
82          assertEquals(0, values.length);
83  
84          meta.set(CONTENTTYPE, "value1");
85          values = meta.getValues(CONTENTTYPE);
86          assertEquals(1, values.length);
87          assertEquals("value1", values[0]);
88  
89          meta.set(CONTENTTYPE, "value2");
90          values = meta.getValues(CONTENTTYPE);
91          assertEquals(1, values.length);
92          assertEquals("value2", values[0]);
93  
94          meta.set(CONTENTTYPE, "new value 1");
95          meta.add("contenttype", "new value 2");
96          values = meta.getValues(CONTENTTYPE);
97          assertEquals(2, values.length);
98          assertEquals("new value 1", values[0]);
99          assertEquals("new value 2", values[1]);
100     }
101 
102     /** Test for <code>setAll(Properties)</code> method. */
103     public void testSetProperties() {
104         String[] values = null;
105         Metadata meta = new Metadata();
106         Properties props = new Properties();
107 
108         meta.setAll(props);
109         assertEquals(0, meta.size());
110 
111         props.setProperty("name-one", "value1.1");
112         meta.setAll(props);
113         assertEquals(1, meta.size());
114         values = meta.getValues("name-one");
115         assertEquals(1, values.length);
116         assertEquals("value1.1", values[0]);
117 
118         props.setProperty("name-two", "value2.1");
119         meta.setAll(props);
120         assertEquals(2, meta.size());
121         values = meta.getValues("name-one");
122         assertEquals(1, values.length);
123         assertEquals("value1.1", values[0]);
124         values = meta.getValues("name-two");
125         assertEquals(1, values.length);
126         assertEquals("value2.1", values[0]);
127     }
128 
129     /** Test for <code>get(String)</code> method. */
130     public void testGet() {
131         Metadata meta = new Metadata();
132         assertNull(meta.get("a-name"));
133         meta.add("a-name", "value-1");
134         assertEquals("value-1", meta.get("a-name"));
135         meta.add("a-name", "value-2");
136         assertEquals("value-1", meta.get("a-name"));
137     }
138 
139     /** Test for <code>isMultiValued()</code> method. */
140     public void testIsMultiValued() {
141         Metadata meta = new Metadata();
142         assertFalse(meta.isMultiValued("key"));
143         meta.add("key", "value1");
144         assertFalse(meta.isMultiValued("key"));
145         meta.add("key", "value2");
146         assertTrue(meta.isMultiValued("key"));
147     }
148 
149     /** Test for <code>names</code> method. */
150     public void testNames() {
151         String[] names = null;
152         Metadata meta = new Metadata();
153         names = meta.names();
154         assertEquals(0, names.length);
155 
156         meta.add("name-one", "value");
157         names = meta.names();
158         assertEquals(1, names.length);
159         assertEquals("name-one", names[0]);
160         meta.add("name-two", "value");
161         names = meta.names();
162         assertEquals(2, names.length);
163     }
164 
165     /** Test for <code>remove(String)</code> method. */
166     public void testRemove() {
167         Metadata meta = new Metadata();
168         meta.remove("name-one");
169         assertEquals(0, meta.size());
170         meta.add("name-one", "value-1.1");
171         meta.add("name-one", "value-1.2");
172         meta.add("name-two", "value-2.2");
173         assertEquals(2, meta.size());
174         assertNotNull(meta.get("name-one"));
175         assertNotNull(meta.get("name-two"));
176         meta.remove("name-one");
177         assertEquals(1, meta.size());
178         assertNull(meta.get("name-one"));
179         assertNotNull(meta.get("name-two"));
180         meta.remove("name-two");
181         assertEquals(0, meta.size());
182         assertNull(meta.get("name-one"));
183         assertNull(meta.get("name-two"));
184     }
185 
186     /** Test for <code>equals(Object)</code> method. */
187     public void testObject() {
188         Metadata meta1 = new Metadata();
189         Metadata meta2 = new Metadata();
190         assertFalse(meta1.equals(null));
191         assertFalse(meta1.equals("String"));
192         assertTrue(meta1.equals(meta2));
193         meta1.add("name-one", "value-1.1");
194         assertFalse(meta1.equals(meta2));
195         meta2.add("name-one", "value-1.1");
196         assertTrue(meta1.equals(meta2));
197         meta1.add("name-one", "value-1.2");
198         assertFalse(meta1.equals(meta2));
199         meta2.add("name-one", "value-1.2");
200         assertTrue(meta1.equals(meta2));
201         meta1.add("name-two", "value-2.1");
202         assertFalse(meta1.equals(meta2));
203         meta2.add("name-two", "value-2.1");
204         assertTrue(meta1.equals(meta2));
205         meta1.add("name-two", "value-2.2");
206         assertFalse(meta1.equals(meta2));
207         meta2.add("name-two", "value-2.x");
208         assertFalse(meta1.equals(meta2));
209     }
210 
211 }