This project has retired. For details please refer to its Attic page.
AbstractCmisTest xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.tck.impl;
20  
21  import java.text.SimpleDateFormat;
22  import java.util.ArrayList;
23  import java.util.Calendar;
24  import java.util.Collection;
25  import java.util.List;
26  import java.util.Map;
27  import java.util.Set;
28  
29  import org.apache.chemistry.opencmis.tck.CmisTest;
30  import org.apache.chemistry.opencmis.tck.CmisTestResult;
31  import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
32  import org.junit.Test;
33  
34  /**
35   * Base class for tests.
36   */
37  public abstract class AbstractCmisTest implements CmisTest {
38  
39      private Map<String, String> parameters;
40      private AbstractCmisTestGroup group;
41      private String name;
42      private String description;
43      private boolean isEnabled = true;
44      private List<CmisTestResult> results;
45      private long time;
46  
47      public void init(Map<String, String> parameters) {
48          this.parameters = parameters;
49          results = new ArrayList<CmisTestResult>();
50      }
51  
52      protected Map<String, String> getParameters() {
53          return parameters;
54      }
55  
56      public String getName() {
57          return name;
58      }
59  
60      public void setName(String name) {
61          this.name = name;
62      }
63  
64      public String getDescription() {
65          return description;
66      }
67  
68      public void setDescription(String description) {
69          this.description = description;
70      }
71  
72      public void setGroup(AbstractCmisTestGroup group) {
73          this.group = group;
74      }
75  
76      public AbstractCmisTestGroup getGroup() {
77          return group;
78      }
79  
80      public abstract void run() throws Exception;
81  
82      @Test
83      public void junit() {
84          JUnitHelper.run(this);
85      }
86  
87      public List<CmisTestResult> getResults() {
88          return results;
89      }
90  
91      public boolean isEnabled() {
92          return isEnabled;
93      }
94  
95      public void setEnabled(boolean enabled) {
96          this.isEnabled = enabled;
97      }
98  
99      public long getTime() {
100         return time;
101     }
102 
103     public void setTime(long time) {
104         this.time = time;
105     }
106 
107     public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, Throwable exception,
108             boolean isFatal) {
109         return new CmisTestResultImpl(group.getName(), name, message, status, exception, isFatal);
110     }
111 
112     public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, boolean isFatal) {
113         return new CmisTestResultImpl(group.getName(), name, message, status, null, isFatal);
114     }
115 
116     public CmisTestResultImpl createResult(CmisTestResultStatus status, String message) {
117         return new CmisTestResultImpl(group.getName(), name, message, status, null, false);
118     }
119 
120     public CmisTestResultImpl createInfoResult(String message) {
121         return new CmisTestResultImpl(group.getName(), name, message, CmisTestResultStatus.INFO, null, false);
122     }
123 
124     public void addResult(CmisTestResult result) {
125         if (result != null) {
126             if (result instanceof CmisTestResultImpl) {
127                 ((CmisTestResultImpl) result).setStackTrace(getStackTrace());
128             }
129 
130             results.add(result);
131             if (result.isFatal()) {
132                 throw new FatalTestException(result.getMessage());
133             }
134         }
135     }
136 
137     protected StackTraceElement[] getStackTrace() {
138         StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
139         StackTraceElement[] shortStackTrace = new StackTraceElement[0];
140         if (stackTrace.length > 3) {
141             shortStackTrace = new StackTraceElement[stackTrace.length - 3];
142             System.arraycopy(stackTrace, 3, shortStackTrace, 0, stackTrace.length - 3);
143         }
144 
145         return shortStackTrace;
146     }
147 
148     protected CmisTestResult addResultChild(CmisTestResult result, CmisTestResult child) {
149         if (result == null) {
150             return null;
151         }
152 
153         result.getChildren().add(child);
154 
155         return result;
156     }
157 
158     // --- helpers ----
159 
160     protected String formatValue(Object o) {
161         if (o == null) {
162             return "null";
163         }
164 
165         if (o instanceof Calendar) {
166             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
167             return sdf.format(((Calendar) o).getTime());
168         }
169 
170         return o.toString();
171     }
172 
173     // --- asserts ----
174 
175     protected boolean isEqual(Object expected, Object actual) {
176         if (expected == null && actual == null) {
177             return true;
178         }
179 
180         if (expected != null && expected.equals(actual)) {
181             return true;
182         }
183 
184         return false;
185     }
186 
187     protected CmisTestResult assertIsTrue(Boolean test, CmisTestResult success, CmisTestResult failure) {
188         if (test != null && test) {
189             return success;
190         }
191 
192         if (test == null) {
193             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
194         } else {
195             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "False!"));
196         }
197     }
198 
199     protected CmisTestResult assertIsFalse(Boolean test, CmisTestResult success, CmisTestResult failure) {
200         if (test != null && !test) {
201             return success;
202         }
203 
204         if (test == null) {
205             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
206         } else {
207             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "True!"));
208         }
209     }
210 
211     protected CmisTestResult assertNull(Object object, CmisTestResult success, CmisTestResult failure) {
212         if (object == null) {
213             return success;
214         }
215 
216         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is not null!"));
217     }
218 
219     protected CmisTestResult assertNotNull(Object object, CmisTestResult success, CmisTestResult failure) {
220         if (object != null) {
221             return success;
222         }
223 
224         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is null!"));
225     }
226 
227     protected CmisTestResult assertStringNullOrEmpty(String str, CmisTestResult success, CmisTestResult failure) {
228         if (str == null || str.length() == 0) {
229             return success;
230         }
231 
232         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String has this value: " + str));
233     }
234 
235     protected CmisTestResult assertStringNotEmpty(String str, CmisTestResult success, CmisTestResult failure) {
236         if (str != null && str.length() > 0) {
237             return success;
238         }
239 
240         if (str == null) {
241             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is null!"));
242         } else {
243             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is empty!"));
244         }
245     }
246 
247     protected CmisTestResult assertListNotEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
248         if (list != null && list.size() > 0) {
249             return success;
250         }
251 
252         if (list == null) {
253             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is null!"));
254         } else {
255             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is empty!"));
256         }
257     }
258 
259     protected CmisTestResult assertEquals(Object expected, Object actual, CmisTestResult success, CmisTestResult failure) {
260         if (isEqual(expected, actual)) {
261             return success;
262         }
263 
264         return addResultChild(
265                 failure,
266                 createResult(CmisTestResultStatus.INFO, "expected: " + formatValue(expected) + " / actual: "
267                         + formatValue(actual)));
268     }
269 
270     protected CmisTestResult assertContains(Collection<?> collection, Object value, CmisTestResult success,
271             CmisTestResult failure) {
272         if (collection == null) {
273             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Collection is null!"));
274         }
275 
276         if (collection.contains(value)) {
277             return success;
278         }
279 
280         return addResultChild(failure,
281                 createResult(CmisTestResultStatus.INFO, "Collection does not contain '" + formatValue(value) + "'"));
282     }
283 
284     protected CmisTestResult assertEqualLists(List<?> expected, List<?> actual, CmisTestResult success,
285             CmisTestResult failure) {
286         if (expected == null && actual == null) {
287             return success;
288         }
289 
290         if (expected == null) {
291             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected list is null!"));
292         }
293 
294         if (actual == null) {
295             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual list is null!"));
296         }
297 
298         if (expected.size() != actual.size()) {
299             return addResultChild(
300                     failure,
301                     createResult(CmisTestResultStatus.INFO, "List sizes don't match! expected: " + expected.size()
302                             + " / actual: " + actual.size()));
303         }
304 
305         for (int i = 0; i < expected.size(); i++) {
306             if (!isEqual(expected.get(i), actual.get(i))) {
307                 return addResultChild(
308                         failure,
309                         createResult(CmisTestResultStatus.INFO, "expected list item[" + i + "]: "
310                                 + formatValue(expected.get(i)) + " / actual list item[" + i + "]: "
311                                 + formatValue(actual.get(i))));
312             }
313         }
314 
315         return success;
316     }
317 
318     protected CmisTestResult assertEqualSet(Set<?> expected, Set<?> actual, CmisTestResult success,
319             CmisTestResult failure) {
320         if (expected == null && actual == null) {
321             return success;
322         }
323 
324         if (expected == null) {
325             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected set is null!"));
326         }
327 
328         if (actual == null) {
329             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual set is null!"));
330         }
331 
332         if (expected.size() != actual.size()) {
333             return addResultChild(
334                     failure,
335                     createResult(CmisTestResultStatus.INFO, "Set sizes don't match! expected: " + expected.size()
336                             + " / actual: " + actual.size()));
337         }
338 
339         for (Object o : expected) {
340             if (!actual.contains(o)) {
341                 return addResultChild(failure,
342                         createResult(CmisTestResultStatus.INFO, "Item not in actual set: " + formatValue(o)));
343             }
344         }
345 
346         return success;
347     }
348 }