blob: d7ad32d28975bdbecf159c8ae0aafe2e6f4168ff [file] [log] [blame]
/*
* 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.chemistry.opencmis.tck.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestResult;
import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
import org.junit.Test;
/**
* Base class for tests.
*/
public abstract class AbstractCmisTest implements CmisTest {
private Map<String, String> parameters;
private AbstractCmisTestGroup group;
private String name;
private String description;
private boolean isEnabled = true;
private List<CmisTestResult> results;
private long time;
public void init(Map<String, String> parameters) {
this.parameters = parameters;
results = new ArrayList<CmisTestResult>();
}
protected Map<String, String> getParameters() {
return parameters;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public void setGroup(AbstractCmisTestGroup group) {
this.group = group;
}
public AbstractCmisTestGroup getGroup() {
return group;
}
public abstract void run() throws Exception;
@Test
public void junit() throws Exception {
JUnitHelper.run(this);
}
public List<CmisTestResult> getResults() {
return results;
}
public boolean isEnabled() {
return isEnabled;
}
public void setEnabled(boolean enabled) {
this.isEnabled = enabled;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, Throwable exception,
boolean isFatal) {
return new CmisTestResultImpl(group.getName(), name, message, status, exception, isFatal);
}
public CmisTestResultImpl createResult(CmisTestResultStatus status, String message, boolean isFatal) {
return new CmisTestResultImpl(group.getName(), name, message, status, null, isFatal);
}
public CmisTestResultImpl createResult(CmisTestResultStatus status, String message) {
return new CmisTestResultImpl(group.getName(), name, message, status, null, false);
}
public CmisTestResultImpl createInfoResult(String message) {
return new CmisTestResultImpl(group.getName(), name, message, CmisTestResultStatus.INFO, null, false);
}
public void addResult(CmisTestResult result) {
if (result != null) {
if (result instanceof CmisTestResultImpl) {
((CmisTestResultImpl) result).setStackTrace(getStackTrace());
}
results.add(result);
if (result.isFatal()) {
throw new FatalTestException(result.getMessage());
}
}
}
protected StackTraceElement[] getStackTrace() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
StackTraceElement[] shortStackTrace = new StackTraceElement[0];
if (stackTrace.length > 3) {
shortStackTrace = new StackTraceElement[stackTrace.length - 3];
System.arraycopy(stackTrace, 3, shortStackTrace, 0, stackTrace.length - 3);
}
return shortStackTrace;
}
protected CmisTestResult addResultChild(CmisTestResult result, CmisTestResult child) {
if (result == null) {
return null;
}
result.getChildren().add(child);
return result;
}
// --- helpers ----
protected String formatValue(Object o) {
if (o == null) {
return "null";
}
if (o instanceof String) {
return "'" + o + "'";
} else if (o instanceof Calendar) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
return sdf.format(((Calendar) o).getTime());
}
return o.toString();
}
// --- asserts ----
protected boolean isEqual(Object expected, Object actual) {
if (expected == null && actual == null) {
return true;
}
if (expected != null && expected.equals(actual)) {
return true;
}
return false;
}
protected CmisTestResult assertIsTrue(Boolean test, CmisTestResult success, CmisTestResult failure) {
if (test != null && test) {
return success;
}
if (test == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
} else {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "False!"));
}
}
protected CmisTestResult assertIsFalse(Boolean test, CmisTestResult success, CmisTestResult failure) {
if (test != null && !test) {
return success;
}
if (test == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Null!"));
} else {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "True!"));
}
}
protected CmisTestResult assertNull(Object object, CmisTestResult success, CmisTestResult failure) {
if (object == null) {
return success;
}
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is not null!"));
}
protected CmisTestResult assertNotNull(Object object, CmisTestResult success, CmisTestResult failure) {
if (object != null) {
return success;
}
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Object is null!"));
}
protected CmisTestResult assertStringNullOrEmpty(String str, CmisTestResult success, CmisTestResult failure) {
if (str == null || str.length() == 0) {
return success;
}
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String has this value: " + str));
}
protected CmisTestResult assertStringNotEmpty(String str, CmisTestResult success, CmisTestResult failure) {
if (str != null && str.length() > 0) {
return success;
}
if (str == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is null!"));
} else {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "String is empty!"));
}
}
protected CmisTestResult assertListNotEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
if (list != null && !list.isEmpty()) {
return success;
}
if (list == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is null!"));
} else {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is empty!"));
}
}
protected CmisTestResult assertListNullOrEmpty(List<?> list, CmisTestResult success, CmisTestResult failure) {
if (list == null || list.isEmpty()) {
return success;
}
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "List is not empty!"));
}
protected CmisTestResult assertEquals(Object expected, Object actual, CmisTestResult success, CmisTestResult failure) {
if (isEqual(expected, actual)) {
return success;
}
return addResultChild(
failure,
createResult(CmisTestResultStatus.INFO, "expected: " + formatValue(expected) + " / actual: "
+ formatValue(actual)));
}
protected CmisTestResult assertContains(Collection<?> collection, Object value, CmisTestResult success,
CmisTestResult failure) {
if (collection == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Collection is null!"));
}
if (collection.contains(value)) {
return success;
}
return addResultChild(failure,
createResult(CmisTestResultStatus.INFO, "Collection does not contain " + formatValue(value)));
}
protected CmisTestResult assertEqualLists(List<?> expected, List<?> actual, CmisTestResult success,
CmisTestResult failure) {
if (expected == null && actual == null) {
return success;
}
if (expected == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected list is null!"));
}
if (actual == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual list is null!"));
}
if (expected.size() != actual.size()) {
return addResultChild(
failure,
createResult(CmisTestResultStatus.INFO, "List sizes don't match! expected: " + expected.size()
+ " / actual: " + actual.size()));
}
for (int i = 0; i < expected.size(); i++) {
if (!isEqual(expected.get(i), actual.get(i))) {
return addResultChild(
failure,
createResult(CmisTestResultStatus.INFO, "expected list item[" + i + "]: "
+ formatValue(expected.get(i)) + " / actual list item[" + i + "]: "
+ formatValue(actual.get(i))));
}
}
return success;
}
protected CmisTestResult assertEqualSet(Set<?> expected, Set<?> actual, CmisTestResult success,
CmisTestResult failure) {
if (expected == null && actual == null) {
return success;
}
if (expected == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Expected set is null!"));
}
if (actual == null) {
return addResultChild(failure, createResult(CmisTestResultStatus.INFO, "Actual set is null!"));
}
if (expected.size() != actual.size()) {
return addResultChild(
failure,
createResult(CmisTestResultStatus.INFO, "Set sizes don't match! expected: " + expected.size()
+ " / actual: " + actual.size()));
}
for (Object o : expected) {
if (!actual.contains(o)) {
return addResultChild(failure,
createResult(CmisTestResultStatus.INFO, "Item not in actual set: " + formatValue(o)));
}
}
return success;
}
}