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

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() throws Exception {
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 String) {
166             return "'" + o + "'";
167         } else if (o instanceof Calendar) {
168             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
169             return sdf.format(((Calendar) o).getTime());
170         }
171 
172         return o.toString();
173     }
174 
175     // --- asserts ----
176 
177     protected boolean isEqual(Object expected, Object actual) {
178         if (expected == null && actual == null) {
179             return true;
180         }
181 
182         if (expected != null && expected.equals(actual)) {
183             return true;
184         }
185 
186         return false;
187     }
188 
189     protected CmisTestResult assertIsTrue(Boolean test, CmisTestResult success, CmisTestResult failure) {
190         if (test != null && test) {
191             return success;
192         }
193 
194         if (test == null) {
195             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
196         } else {
197             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "False!"));
198         }
199     }
200 
201     protected CmisTestResult assertIsFalse(Boolean test, CmisTestResult success, CmisTestResult failure) {
202         if (test != null && !test) {
203             return success;
204         }
205 
206         if (test == null) {
207             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
208         } else {
209             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "True!"));
210         }
211     }
212 
213     protected CmisTestResult assertNull(Object object, CmisTestResult success, CmisTestResult failure) {
214         if (object == null) {
215             return success;
216         }
217 
218         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is not null!"));
219     }
220 
221     protected CmisTestResult assertNotNull(Object object, CmisTestResult success, CmisTestResult failure) {
222         if (object != null) {
223             return success;
224         }
225 
226         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is null!"));
227     }
228 
229     protected CmisTestResult assertStringNullOrEmpty(String str, CmisTestResult success, CmisTestResult failure) {
230         if (str == null || str.length() == 0) {
231             return success;
232         }
233 
234         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String has this value: " + str));
235     }
236 
237     protected CmisTestResult assertStringNotEmpty(String str, CmisTestResult success, CmisTestResult failure) {
238         if (str != null && str.length() > 0) {
239             return success;
240         }
241 
242         if (str == null) {
243             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is null!"));
244         } else {
245             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is empty!"));
246         }
247     }
248 
249     protected CmisTestResult assertListNotEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
250         if (list != null && !list.isEmpty()) {
251             return success;
252         }
253 
254         if (list == null) {
255             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is null!"));
256         } else {
257             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is empty!"));
258         }
259     }
260 
261     protected CmisTestResult assertListNullOrEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
262         if (list == null || list.isEmpty()) {
263             return success;
264         }
265 
266         return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is not empty!"));
267 
268     }
269 
270     protected CmisTestResult assertEquals(Object expected, Object actual, CmisTestResult success, CmisTestResult failure) {
271         if (isEqual(expected, actual)) {
272             return success;
273         }
274 
275         return addResultChild(
276                 failure,
277                 createResult(CmisTestResultStatus.INFO, "expected: " + formatValue(expected) + " / actual: "
278                         + formatValue(actual)));
279     }
280 
281     protected CmisTestResult assertContains(Collection<?> collection, Object value, CmisTestResult success,
282             CmisTestResult failure) {
283         if (collection == null) {
284             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Collection is null!"));
285         }
286 
287         if (collection.contains(value)) {
288             return success;
289         }
290 
291         return addResultChild(failure,
292                 createResult(CmisTestResultStatus.INFO, "Collection does not contain " + formatValue(value)));
293     }
294 
295     protected CmisTestResult assertEqualLists(List<?> expected, List<?> actual, CmisTestResult success,
296             CmisTestResult failure) {
297         if (expected == null && actual == null) {
298             return success;
299         }
300 
301         if (expected == null) {
302             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected list is null!"));
303         }
304 
305         if (actual == null) {
306             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual list is null!"));
307         }
308 
309         if (expected.size() != actual.size()) {
310             return addResultChild(
311                     failure,
312                     createResult(CmisTestResultStatus.INFO, "List sizes don't match! expected: " + expected.size()
313                             + " / actual: " + actual.size()));
314         }
315 
316         for (int i = 0; i < expected.size(); i++) {
317             if (!isEqual(expected.get(i), actual.get(i))) {
318                 return addResultChild(
319                         failure,
320                         createResult(CmisTestResultStatus.INFO, "expected list item[" + i + "]: "
321                                 + formatValue(expected.get(i)) + " / actual list item[" + i + "]: "
322                                 + formatValue(actual.get(i))));
323             }
324         }
325 
326         return success;
327     }
328 
329     protected CmisTestResult assertEqualSet(Set<?> expected, Set<?> actual, CmisTestResult success,
330             CmisTestResult failure) {
331         if (expected == null && actual == null) {
332             return success;
333         }
334 
335         if (expected == null) {
336             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected set is null!"));
337         }
338 
339         if (actual == null) {
340             return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual set is null!"));
341         }
342 
343         if (expected.size() != actual.size()) {
344             return addResultChild(
345                     failure,
346                     createResult(CmisTestResultStatus.INFO, "Set sizes don't match! expected: " + expected.size()
347                             + " / actual: " + actual.size()));
348         }
349 
350         for (Object o : expected) {
351             if (!actual.contains(o)) {
352                 return addResultChild(failure,
353                         createResult(CmisTestResultStatus.INFO, "Item not in actual set: " + formatValue(o)));
354             }
355         }
356 
357         return success;
358     }
359 }