chemistry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dcaru...@apache.org
Subject svn commit: r936922 [12/18] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-client: chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/ chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/...
Date Thu, 22 Apr 2010 16:04:22 GMT
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java?rev=936922&r1=936921&r2=936922&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/test/java/org/apache/chemistry/opencmis/client/bindings/framework/AbstractCmisTestCase.java Thu Apr 22 16:04:19 2010
@@ -73,1138 +73,1138 @@ import org.apache.commons.logging.LogFac
  */
 public abstract class AbstractCmisTestCase extends TestCase {
 
-	public static final String DEFAULT_TESTS_ENABLED = "false";
-	public static final String DEFAULT_USERNAME = "test";
-	public static final String DEFAULT_PASSWORD = "test";
-	public static final String DEFAULT_ATOMPUB_URL = "http://localhost:8080/cmis/atom";
-	public static final String DEFAULT_WEBSERVICES_URLPREFIX = "http://localhost:8080/cmis/services/";
-	public static final String DEFAULT_DOCTYPE = "cmis:document";
-	public static final String DEFAULT_FOLDERTYPE = "cmis:folder";
-
-	public static final String PROP_TESTS_ENABLED = "opencmis.test";
-	public static final String PROP_USERNAME = "opencmis.test.username";
-	public static final String PROP_PASSWORD = "opencmis.test.password";
-	public static final String PROP_REPOSITORY = "opencmis.test.repository";
-	public static final String PROP_TESTFOLDER = "opencmis.test.testfolder";
-	public static final String PROP_DOCTYPE = "opencmis.test.documenttype";
-	public static final String PROP_FOLDERTYPE = "opencmis.test.foldertype";
-	public static final String PROP_CONFIG_FILE = "opencmis.test.config";
-
-	public static final String PROP_ATOMPUB_URL = "opencmis.test.atompub.url";
-	public static final String PROP_WEBSERVICES_URLPREFIX = "opencmis.test.webservices.url";
-
-	private CmisBinding binding;
-	private String fTestRepositoryId;
-	private String fTestFolderId;
-
-	private static Log log = LogFactory.getLog(AbstractCmisTestCase.class);
-
-	/**
-	 * Read configuration file.
-	 */
-	static {
-		String configFileName = System.getProperty(PROP_CONFIG_FILE);
-		if (configFileName != null) {
-
-			try {
-				java.util.Properties properties = new java.util.Properties();
-				properties.load(new FileInputStream(configFileName));
-
-				for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
-					String key = (String) e.nextElement();
-					String value = properties.getProperty(key);
-					System.setProperty(key, value);
-				}
-			} catch (Exception e) {
-				System.err.println("Could not load test properties: " + e.toString());
-			}
-		}
-	}
-
-	/**
-	 * Returns the binding object or creates one if does not exist.
-	 */
-	protected CmisBinding getBinding() {
-		if (binding == null) {
-			log.info("Creating binding...");
-			binding = createBinding();
-		}
-
-		return binding;
-	}
-
-	/**
-	 * Creates a binding object.
-	 */
-	protected abstract CmisBinding createBinding();
-
-	/**
-	 * Returns a set of test names that enabled.
-	 */
-	protected abstract Set<String> getEnabledTests();
-
-	/**
-	 * Returns the test repository id.
-	 */
-	protected String getTestRepositoryId() {
-		if (fTestRepositoryId != null) {
-			return fTestRepositoryId;
-		}
-
-		fTestRepositoryId = System.getProperty(PROP_REPOSITORY);
-		if (fTestRepositoryId != null) {
-			log.info("Test repository: " + fTestRepositoryId);
-			return fTestRepositoryId;
-		}
-
-		fTestRepositoryId = getFirstRepositoryId();
-		log.info("Test repository: " + fTestRepositoryId);
-
-		return fTestRepositoryId;
-	}
-
-	/**
-	 * Returns the test root folder id.
-	 */
-	protected String getTestRootFolder() {
-		if (fTestFolderId != null) {
-			return fTestFolderId;
-		}
-
-		fTestFolderId = System.getProperty(PROP_TESTFOLDER);
-		if (fTestFolderId != null) {
-			log.info("Test root folder: " + fTestFolderId);
-			return fTestFolderId;
-		}
-
-		fTestFolderId = getRootFolderId();
-		log.info("Test root folder: " + fTestFolderId);
-
-		return fTestFolderId;
-	}
-
-	/**
-	 * Returns if the test is enabled.
-	 */
-	protected boolean isEnabled(String name) {
-		boolean testsEnabled = Boolean.parseBoolean(System.getProperty(PROP_TESTS_ENABLED, DEFAULT_TESTS_ENABLED));
-
-		if (testsEnabled && getEnabledTests().contains(name)) {
-			return true;
-		}
-
-		log.info("Skipping test '" + name + "'!");
-
-		return false;
-	}
-
-	/**
-	 * Returns the test username.
-	 */
-	protected String getUsername() {
-		return System.getProperty(PROP_USERNAME, DEFAULT_USERNAME);
-	}
-
-	/**
-	 * Returns the test password.
-	 */
-	protected String getPassword() {
-		return System.getProperty(PROP_PASSWORD, DEFAULT_PASSWORD);
-	}
-
-	/**
-	 * Returns the default document type.
-	 */
-	protected String getDefaultDocumentType() {
-		return System.getProperty(PROP_DOCTYPE, DEFAULT_DOCTYPE);
-	}
-
-	/**
-	 * Returns the default folder type.
-	 */
-	protected String getDefaultFolderType() {
-		return System.getProperty(PROP_FOLDERTYPE, DEFAULT_FOLDERTYPE);
-	}
-
-	/**
-	 * Returns the AtomPub URL.
-	 */
-	protected String getAtomPubURL() {
-		return System.getProperty(PROP_ATOMPUB_URL, DEFAULT_ATOMPUB_URL);
-	}
-
-	/**
-	 * Returns the Web Services URL prefix.
-	 */
-	protected String getWebServicesURL() {
-		return System.getProperty(PROP_WEBSERVICES_URLPREFIX, DEFAULT_WEBSERVICES_URLPREFIX);
-	}
-
-	/**
-	 * Returns the object factory.
-	 */
-	protected BindingsObjectFactory getObjectFactory() {
-		return getBinding().getObjectFactory();
-	}
-
-	/**
-	 * Returns the id of the first repository.
-	 */
-	protected String getFirstRepositoryId() {
-		List<RepositoryInfo> repositories = getBinding().getRepositoryService().getRepositoryInfos(null);
-
-		assertNotNull(repositories);
-		assertFalse(repositories.isEmpty());
-		assertNotNull(repositories.get(0).getId());
-
-		return repositories.get(0).getId();
-	}
-
-	/**
-	 * Returns the info object of the test repository.
-	 */
-	protected RepositoryInfo getRepositoryInfo() {
-		RepositoryInfo repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(getTestRepositoryId(),
-				null);
-
-		assertNotNull(repositoryInfo);
-		assertNotNull(repositoryInfo.getId());
-		assertEquals(getTestRepositoryId(), repositoryInfo.getId());
-
-		return repositoryInfo;
-	}
-
-	/**
-	 * Returns the root folder of the test repository.
-	 */
-	protected String getRootFolderId() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getRootFolderId());
-
-		return repository.getRootFolderId();
-	}
-
-	/**
-	 * Returns if the test repository supports reading ACLs.
-	 */
-	protected boolean supportsDiscoverACLs() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		return (repository.getCapabilities().getAclCapability() != CapabilityAcl.NONE);
-	}
-
-	/**
-	 * Returns if the test repository supports setting ACLs.
-	 */
-	protected boolean supportsManageACLs() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		return (repository.getCapabilities().getAclCapability() == CapabilityAcl.MANAGE);
-	}
-
-	/**
-	 * Returns if the test repository supports renditions.
-	 */
-	protected boolean supportsRenditions() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getCapabilities().getRenditionsCapability() == null) {
-			return false;
-		}
-
-		return (repository.getCapabilities().getRenditionsCapability() != CapabilityRenditions.NONE);
-	}
-
-	/**
-	 * Returns if the test repository supports descendants.
-	 */
-	protected boolean supportsDescendants() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getCapabilities().isGetDescendantsSupported() == null) {
-			return false;
-		}
-
-		return repository.getCapabilities().isGetDescendantsSupported().booleanValue();
-	}
-
-	/**
-	 * Returns if the test repository supports descendants.
-	 */
-	protected boolean supportsFolderTree() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getCapabilities().isGetFolderTreeSupported() == null) {
-			return false;
-		}
-
-		return repository.getCapabilities().isGetFolderTreeSupported().booleanValue();
-	}
-
-	/**
-	 * Returns if the test repository supports content changes.
-	 */
-	protected boolean supportsContentChanges() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getCapabilities().getChangesCapability() == null) {
-			return false;
-		}
-
-		return (repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE);
-	}
-
-	/**
-	 * Returns if the test repository supports query.
-	 */
-	protected boolean supportsQuery() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getCapabilities().getQueryCapability() == null) {
-			return false;
-		}
-
-		return (repository.getCapabilities().getQueryCapability() != CapabilityQuery.NONE);
-	}
-
-	/**
-	 * Returns if the test repository supports relationships.
-	 */
-	protected boolean supportsRelationships() {
-		TypeDefinition relType = null;
-
-		try {
-			relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:relationship",
-					null);
-		} catch (CmisObjectNotFoundException e) {
-			return false;
-		}
-
-		return (relType != null);
-	}
-
-	/**
-	 * Returns if the test repository supports policies.
-	 */
-	protected boolean supportsPolicies() {
-		TypeDefinition relType = null;
-
-		try {
-			relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:policy", null);
-		} catch (CmisObjectNotFoundException e) {
-			return false;
-		}
-
-		return (relType != null);
-	}
-
-	/**
-	 * Returns the AclPropagation from the ACL capabilities.
-	 */
-	protected AclPropagation getAclPropagation() {
-		RepositoryInfo repository = getRepositoryInfo();
-
-		assertNotNull(repository.getCapabilities());
-
-		if (repository.getAclCapabilities().getAclPropagation() == null) {
-			return AclPropagation.REPOSITORYDETERMINED;
-		}
-
-		return repository.getAclCapabilities().getAclPropagation();
-	}
-
-	// ---- helpers ----
-
-	/**
-	 * Prints a warning.
-	 */
-	protected void warning(String message) {
-		System.out.println("**** " + message);
-	}
-
-	/**
-	 * Creates a ContentStreamData object from a byte array.
-	 */
-	protected ContentStream createContentStreamData(String mimeType, byte[] content) {
-		assertNotNull(content);
-
-		return getObjectFactory().createContentStream("test", BigInteger.valueOf(content.length), mimeType,
-				new ByteArrayInputStream(content));
-	}
-
-	/**
-	 * Extracts the path from a folder object.
-	 */
-	protected String getPath(ObjectData folderObject) {
-		assertNotNull(folderObject);
-		assertNotNull(folderObject.getProperties());
-		assertNotNull(folderObject.getProperties().getProperties());
-		assertTrue(folderObject.getProperties().getProperties().get(PropertyIds.PATH) instanceof PropertyString);
-
-		PropertyString pathProperty = (PropertyString) folderObject.getProperties().getProperties().get(
-				PropertyIds.PATH);
-
-		assertNotNull(pathProperty.getValues());
-		assertEquals(1, pathProperty.getValues().size());
-		assertNotNull(pathProperty.getValues().get(0));
-
-		return pathProperty.getValues().get(0);
-	}
-
-	// ---- short cuts ----
-
-	/**
-	 * Retrieves an object.
-	 */
-	protected ObjectData getObject(String objectId, String filter, Boolean includeAllowableActions,
-			IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-			Boolean includeACL, ExtensionsData extension) {
-		ObjectData object = getBinding().getObjectService()
-				.getObject(getTestRepositoryId(), objectId, filter, includeAllowableActions, includeRelationships,
-						renditionFilter, includePolicyIds, includeACL, extension);
-
-		assertNotNull(object);
-
-		return object;
-	}
-
-	/**
-	 * Retrieves a full blown object.
-	 */
-	protected ObjectData getObject(String objectId) {
-		ObjectData object = getObject(objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-				Boolean.TRUE, null);
-
-		assertBasicProperties(object.getProperties());
-
-		return object;
-	}
-
-	/**
-	 * Retrieves an object by path.
-	 */
-	protected ObjectData getObjectByPath(String path, String filter, Boolean includeAllowableActions,
-			IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
-			Boolean includeACL, ExtensionsData extension) {
-		ObjectData object = getBinding().getObjectService()
-				.getObjectByPath(getTestRepositoryId(), path, filter, includeAllowableActions, includeRelationships,
-						renditionFilter, includePolicyIds, includeACL, extension);
-
-		assertNotNull(object);
-
-		return object;
-	}
-
-	/**
-	 * Retrieves a full blown object by path.
-	 */
-	protected ObjectData getObjectByPath(String path) {
-		ObjectData object = getObjectByPath(path, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-				Boolean.TRUE, null);
-
-		assertBasicProperties(object.getProperties());
-
-		return object;
-	}
-
-	/**
-	 * Returns <code>true</code> if the object with the given id exists,
-	 * <code>false</code> otherwise.
-	 */
-	protected boolean existsObject(String objectId) {
-		try {
-			ObjectData object = getObject(objectId, PropertyIds.OBJECT_ID, Boolean.FALSE, IncludeRelationships.NONE,
-					null, Boolean.FALSE, Boolean.FALSE, null);
-
-			assertNotNull(object);
-			assertNotNull(object.getId());
-		} catch (CmisObjectNotFoundException e) {
-			return false;
-		}
-
-		return true;
-	}
-
-	/**
-	 * Returns the child of a folder.
-	 */
-	protected ObjectInFolderData getChild(String folderId, String objectId) {
-		boolean hasMore = true;
-
-		while (hasMore) {
-			ObjectInFolderList children = getBinding().getNavigationService().getChildren(getTestRepositoryId(),
-					folderId, "*", null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE, null, null, null);
-
-			assertNotNull(children);
-			assertTrue(children.getObjects().size() > 0);
-
-			hasMore = (children.hasMoreItems() == null ? false : children.hasMoreItems().booleanValue());
-
-			for (ObjectInFolderData object : children.getObjects()) {
-				assertNotNull(object);
-				assertNotNull(object.getPathSegment());
-				assertNotNull(object.getObject());
-				assertNotNull(object.getObject().getId());
-
-				assertBasicProperties(object.getObject().getProperties());
-
-				if (object.getObject().getId().equals(objectId)) {
-					return object;
-				}
-			}
-		}
-
-		fail("Child not found!");
-
-		return null;
-	}
-
-	/**
-	 * Gets the version series id of an object.
-	 */
-	protected String getVersionSeriesId(ObjectData object) {
-		PropertyData<?> versionSeriesId = object.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID);
-		assertNotNull(versionSeriesId);
-		assertTrue(versionSeriesId instanceof PropertyId);
-
-		return ((PropertyId) versionSeriesId).getFirstValue();
-	}
-
-	/**
-	 * Gets the version series id of an object.
-	 */
-	protected String getVersionSeriesId(String docId) {
-		return getVersionSeriesId(getObject(docId));
-	}
-
-	/**
-	 * Creates a folder.
-	 */
-	protected String createFolder(Properties properties, String folderId, List<String> policies, Acl addACEs,
-			Acl removeACEs) {
-		String objectId = getBinding().getObjectService().createFolder(getTestRepositoryId(), properties, folderId,
-				policies, addACEs, removeACEs, null);
-		assertNotNull(objectId);
-		assertTrue(existsObject(objectId));
-
-		ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-		// check canGetProperties
-		assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
-
-		// check name
-		PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-		if (nameProp != null) {
-			assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-					nameProp.getFirstValue());
-		}
-
-		// check object type
-		PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-		assertNotNull(typeProp);
-		assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
-				typeProp.getFirstValue());
-
-		// check parent
-		ObjectData parent = getBinding().getNavigationService().getFolderParent(getTestRepositoryId(), objectId, null,
-				null);
-		assertNotNull(parent);
-		assertNotNull(parent.getProperties());
-		assertNotNull(parent.getProperties().getProperties());
-		assertNotNull(parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-		assertEquals(folderId, parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue());
-
-		return objectId;
-	}
-
-	/**
-	 * Creates a folder with the default type.
-	 */
-	protected String createDefaultFolder(String folderId, String name) {
-		List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-		propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
-		propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultFolderType()));
-
-		Properties properties = getObjectFactory().createPropertiesData(propList);
-
-		return createFolder(properties, folderId, null, null, null);
-	}
-
-	/**
-	 * Creates a document.
-	 */
-	protected String createDocument(Properties properties, String folderId, ContentStream contentStream,
-			VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
-		String objectId = getBinding().getObjectService().createDocument(getTestRepositoryId(), properties, folderId,
-				contentStream, versioningState, policies, addACEs, removeACEs, null);
-		assertNotNull(objectId);
-		assertTrue(existsObject(objectId));
-
-		if (folderId != null) {
-			ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-			// check canGetProperties
-			assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
-
-			// check canGetContentStream
-			if (contentStream != null) {
-				assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_CONTENT_STREAM,
-						true);
-			}
-
-			// check name
-			PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-			if (nameProp != null) {
-				assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-						nameProp.getFirstValue());
-			}
-
-			// check object type
-			PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
-			assertNotNull(typeProp);
-			assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
-					typeProp.getFirstValue());
-
-			// check parent
-			List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-					getTestRepositoryId(), objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-					null);
-			assertNotNull(parents);
-			assertEquals(1, parents.size());
-
-			ObjectParentData parent = parents.get(0);
-			assertNotNull(parent);
-			assertNotNull(parent.getRelativePathSegment());
-			assertNotNull(parent.getObject());
-			assertNotNull(parent.getObject().getProperties().getProperties());
-			assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-			assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
-					.getFirstValue());
-
-			// get document by path (check relative path segment)
-			assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.PATH));
-			String parentPath = parent.getObject().getProperties().getProperties().get(PropertyIds.PATH)
-					.getFirstValue().toString();
-
-			ObjectData docByPath = getObjectByPath((parentPath.equals("/") ? "" : parentPath) + "/"
-					+ parent.getRelativePathSegment());
-
-			PropertyData<?> idProp = docByPath.getProperties().getProperties().get(PropertyIds.OBJECT_ID);
-			assertNotNull(idProp);
-			assertEquals(objectId, idProp.getFirstValue());
-		} else {
-			List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-					getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-					null);
-			assertNotNull(parents);
-			assertEquals(0, parents.size());
-		}
-
-		return objectId;
-	}
-
-	/**
-	 * Creates a document with the default type.
-	 */
-	protected String createDefaultDocument(String folderId, String name, String contentType, byte[] content) {
-		VersioningState vs = (isVersionable(getDefaultDocumentType()) ? VersioningState.MAJOR : VersioningState.NONE);
-
-		List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
-		propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
-		propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultDocumentType()));
-
-		Properties properties = getObjectFactory().createPropertiesData(propList);
-
-		ContentStream contentStream = createContentStreamData(contentType, content);
-
-		return createDocument(properties, folderId, contentStream, vs, null, null, null);
-	}
-
-	/**
-	 * Creates a document from source.
-	 */
-	protected String createDocumentFromSource(String sourceId, Properties properties, String folderId,
-			VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
-		String objectId = getBinding().getObjectService().createDocumentFromSource(getTestRepositoryId(), sourceId,
-				properties, folderId, versioningState, policies, addACEs, removeACEs, null);
-		assertNotNull(objectId);
-		assertTrue(existsObject(objectId));
-
-		if (folderId != null) {
-			ObjectInFolderData folderChild = getChild(folderId, objectId);
-
-			// check name
-			PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
-			if (nameProp != null) {
-				assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
-						nameProp.getValues().get(0));
-			}
-
-			// check parent
-			List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
-					getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
-					null);
-			assertNotNull(parents);
-			assertEquals(1, parents.size());
-
-			ObjectParentData parent = parents.get(0);
-			assertNotNull(parent);
-			assertNotNull(parent.getRelativePathSegment());
-			assertNotNull(parent.getObject());
-			assertNotNull(parent.getObject().getProperties().getProperties());
-			assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
-			assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
-					.getFirstValue());
-		}
-
-		return objectId;
-	}
-
-	/**
-	 * Deletes an object.
-	 */
-	protected void delete(String objectId, boolean allVersions) {
-		getBinding().getObjectService().deleteObject(getTestRepositoryId(), objectId, allVersions, null);
-		assertFalse(existsObject(objectId));
-	}
-
-	/**
-	 * Deletes a tree.
-	 */
-	protected void deleteTree(String folderId) {
-		getBinding().getObjectService().deleteTree(getTestRepositoryId(), folderId, Boolean.TRUE, UnfileObject.DELETE,
-				Boolean.TRUE, null);
-		assertFalse(existsObject(folderId));
-	}
-
-	/**
-	 * Gets a content stream.
-	 */
-	protected ContentStream getContent(String objectId, String streamId) {
-		ContentStream contentStream = getBinding().getObjectService().getContentStream(getTestRepositoryId(), objectId,
-				streamId, null, null, null);
-		assertNotNull(contentStream);
-		assertNotNull(contentStream.getMimeType());
-		assertNotNull(contentStream.getStream());
-
-		return contentStream;
-	}
-
-	/**
-	 * Reads the content from a content stream into a byte array.
-	 */
-	protected byte[] readContent(ContentStream contentStream) throws Exception {
-		assertNotNull(contentStream);
-		assertNotNull(contentStream.getStream());
-
-		InputStream stream = contentStream.getStream();
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-		byte[] buffer = new byte[4096];
-		int b;
-		while ((b = stream.read(buffer)) > -1) {
-			baos.write(buffer, 0, b);
-		}
-
-		return baos.toByteArray();
-	}
-
-	/**
-	 * Returns a type definition.
-	 */
-	protected TypeDefinition getTypeDefinition(String typeName) {
-		TypeDefinition typeDef = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), typeName,
-				null);
-
-		assertNotNull(typeDef);
-		assertNotNull(typeDef.getId());
-
-		return typeDef;
-	}
-
-	/**
-	 * Returns if the type is versionable.
-	 */
-	protected boolean isVersionable(String typeName) {
-		TypeDefinition type = getTypeDefinition(typeName);
-
-		assertTrue(type instanceof DocumentTypeDefinition);
-
-		Boolean isVersionable = ((DocumentTypeDefinition) type).isVersionable();
-		assertNotNull(isVersionable);
-
-		return isVersionable.booleanValue();
-	}
-
-	// ---- asserts ----
-
-	protected void assertEquals(TypeDefinition expected, TypeDefinition actual, boolean checkPropertyDefintions) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected type definition is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual type definition is null!");
-		}
-
-		assertEquals("TypeDefinition id:", expected.getId(), actual.getId());
-		assertEquals("TypeDefinition local name:", expected.getLocalName(), actual.getLocalName());
-		assertEquals("TypeDefinition local namespace:", expected.getLocalNamespace(), actual.getLocalNamespace());
-		assertEquals("TypeDefinition display name:", expected.getDisplayName(), actual.getDisplayName());
-		assertEquals("TypeDefinition description:", expected.getDescription(), actual.getDescription());
-		assertEquals("TypeDefinition query name:", expected.getQueryName(), actual.getQueryName());
-		assertEquals("TypeDefinition parent id:", expected.getParentTypeId(), actual.getParentTypeId());
-		assertEquals("TypeDefinition base id:", expected.getBaseTypeId(), actual.getBaseTypeId());
-
-		if (!checkPropertyDefintions) {
-			return;
-		}
-
-		if ((expected.getPropertyDefinitions() == null) && (actual.getPropertyDefinitions() == null)) {
-			return;
-		}
-
-		if (expected.getPropertyDefinitions() == null) {
-			fail("Expected property definition list is null!");
-		}
-
-		if (actual.getPropertyDefinitions() == null) {
-			fail("Actual property definition list is null!");
-		}
-
-		assertEquals(expected.getPropertyDefinitions().size(), actual.getPropertyDefinitions().size());
-
-		for (PropertyDefinition<?> expectedPropDef : expected.getPropertyDefinitions().values()) {
-			PropertyDefinition<?> actualPropDef = actual.getPropertyDefinitions().get(expectedPropDef.getId());
-
-			assertEquals(expectedPropDef, actualPropDef);
-		}
-	}
-
-	protected void assertEquals(PropertyDefinition<?> expected, PropertyDefinition<?> actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected property definition is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual property definition is null!");
-		}
-
-		assertNotNull(expected.getId());
-		assertNotNull(actual.getId());
-
-		String id = expected.getId();
-
-		assertEquals("PropertyDefinition " + id + " id:", expected.getId(), actual.getId());
-		assertEquals("PropertyDefinition " + id + " local name:", expected.getLocalName(), actual.getLocalName());
-		assertEquals("PropertyDefinition " + id + " local namespace:", expected.getLocalNamespace(), actual
-				.getLocalNamespace());
-		assertEquals("PropertyDefinition " + id + " query name:", expected.getQueryName(), actual.getQueryName());
-		assertEquals("PropertyDefinition " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
-		assertEquals("PropertyDefinition " + id + " description:", expected.getDescription(), actual.getDescription());
-		assertEquals("PropertyDefinition " + id + " property type:", expected.getPropertyType(), actual
-				.getPropertyType());
-		assertEquals("PropertyDefinition " + id + " cardinality:", expected.getCardinality(), actual.getCardinality());
-		assertEquals("PropertyDefinition " + id + " updatability:", expected.getUpdatability(), actual
-				.getUpdatability());
-	}
-
-	protected void assertEquals(Properties expected, Properties actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected properties data is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual properties data is null!");
-		}
-
-		if ((expected.getProperties() == null) && (actual.getProperties() == null)) {
-			return;
-		}
-
-		if ((expected.getProperties() == null) || (actual.getProperties() == null)) {
-			fail("Properties are null!");
-		}
-
-		if (expected.getProperties() == null) {
-			fail("Expected properties are null!");
-		}
-
-		if (actual.getProperties() == null) {
-			fail("Actual properties are null!");
-		}
-
-		assertEquals(expected.getProperties().size(), actual.getProperties().size());
-
-		for (String id : expected.getProperties().keySet()) {
-			PropertyData<?> expectedProperty = expected.getProperties().get(id);
-			assertNotNull(expectedProperty);
-			assertEquals(id, expectedProperty.getId());
-
-			PropertyData<?> actualProperty = actual.getProperties().get(id);
-			assertNotNull(actualProperty);
-			assertEquals(id, actualProperty.getId());
-
-			assertEquals(expectedProperty, actualProperty);
-		}
-	}
-
-	protected void assertEquals(PropertyData<?> expected, PropertyData<?> actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if ((expected == null) || (actual == null)) {
-			fail("Properties data is null!");
-		}
-
-		String id = expected.getId();
-
-		assertEquals("PropertyData " + id + " id:", expected.getId(), actual.getId());
-		assertEquals("PropertyData " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
-		assertEquals("PropertyData " + id + " local name:", expected.getLocalName(), actual.getLocalName());
-		assertEquals("PropertyData " + id + " query name:", expected.getQueryName(), actual.getQueryName());
-
-		assertEquals("PropertyData " + id + " values:", expected.getValues().size(), actual.getValues().size());
-
-		for (int i = 0; i < expected.getValues().size(); i++) {
-			assertEquals("PropertyData " + id + " value[" + i + "]:", expected.getValues().get(i), actual.getValues()
-					.get(i));
-		}
-	}
-
-	protected void assertBasicProperties(Properties properties) {
-		assertNotNull(properties);
-		assertNotNull(properties.getProperties());
-
-		assertProperty(properties.getProperties().get(PropertyIds.OBJECT_ID), PropertyIds.OBJECT_ID, PropertyId.class);
-		assertProperty(properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID), PropertyIds.OBJECT_TYPE_ID,
-				PropertyId.class);
-		assertProperty(properties.getProperties().get(PropertyIds.BASE_TYPE_ID), PropertyIds.BASE_TYPE_ID,
-				PropertyId.class);
-		assertProperty(properties.getProperties().get(PropertyIds.NAME), PropertyIds.NAME, PropertyString.class);
-		assertProperty(properties.getProperties().get(PropertyIds.CREATED_BY), PropertyIds.CREATED_BY,
-				PropertyString.class);
-		assertProperty(properties.getProperties().get(PropertyIds.CREATION_DATE), PropertyIds.CREATION_DATE,
-				PropertyDateTime.class);
-		assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFIED_BY), PropertyIds.LAST_MODIFIED_BY,
-				PropertyString.class);
-		assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFICATION_DATE),
-				PropertyIds.LAST_MODIFICATION_DATE, PropertyDateTime.class);
-	}
-
-	protected void assertProperty(PropertyData<?> property, String id, Class<?> clazz) {
-		assertNotNull(property);
-		assertNotNull(property.getId());
-		assertEquals("PropertyData " + id + " id:", id, property.getId());
-		assertTrue(clazz.isAssignableFrom(property.getClass()));
-		assertNotNull(property.getValues());
-		assertFalse(property.getValues().isEmpty());
-	}
-
-	protected void assertPropertyValue(PropertyData<?> property, String id, Class<?> clazz, Object... values) {
-		assertProperty(property, id, clazz);
-
-		assertEquals("Property " + id + " values:", values.length, property.getValues().size());
-
-		int i = 0;
-		for (Object value : property.getValues()) {
-			assertEquals("Property " + id + " value[" + i + "]:", values[i], value);
-			i++;
-		}
-	}
-
-	protected void assertPropertyValue(Properties properties, String id, Class<?> clazz, Object... values) {
-		assertNotNull(properties);
-		assertNotNull(properties.getProperties());
-
-		PropertyData<?> property = properties.getProperties().get(id);
-		assertNotNull(property);
-
-		assertPropertyValue(property, id, clazz, values);
-	}
-
-	protected void assertEquals(AllowableActions expected, AllowableActions actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected allowable action data is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual allowable action data is null!");
-		}
-
-		assertNotNull(expected.getAllowableActions());
-		assertNotNull(actual.getAllowableActions());
-
-		assertEquals("Allowable action size:", expected.getAllowableActions().size(), actual.getAllowableActions()
-				.size());
-
-		for (Action action : expected.getAllowableActions()) {
-			boolean expectedBoolean = expected.getAllowableActions().contains(action);
-			boolean actualBoolean = actual.getAllowableActions().contains(action);
-
-			assertEquals("AllowableAction " + action + ":", expectedBoolean, actualBoolean);
-		}
-	}
-
-	protected void assertAllowableAction(AllowableActions allowableActions, Action action, boolean expected) {
-		assertNotNull(allowableActions);
-		assertNotNull(allowableActions.getAllowableActions());
-		assertNotNull(action);
-
-		assertEquals("Allowable action \"" + action + "\":", expected, allowableActions.getAllowableActions().contains(
-				action));
-	}
-
-	protected void assertEquals(Acl expected, Acl actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected ACL data is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual ACL data is null!");
-		}
-
-		if ((expected.getAces() == null) && (actual.getAces() == null)) {
-			return;
-		}
-
-		if (expected.getAces() == null) {
-			fail("Expected ACE data is null!");
-		}
-
-		if (actual.getAces() == null) {
-			fail("Actual ACE data is null!");
-		}
-
-		// assertEquals(expected.isExact(), actual.isExact());
-		assertEquals(expected.getAces().size(), actual.getAces().size());
-
-		for (int i = 0; i < expected.getAces().size(); i++) {
-			assertEquals(expected.getAces().get(i), actual.getAces().get(i));
-		}
-	}
-
-	protected void assertEquals(Ace expected, Ace actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected ACE data is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual ACE data is null!");
-		}
-
-		assertNotNull(expected.getPrincipal());
-		assertNotNull(expected.getPrincipal().getId());
-		assertNotNull(actual.getPrincipal());
-		assertNotNull(actual.getPrincipal().getId());
-		assertEquals("ACE Principal:", expected.getPrincipal().getId(), actual.getPrincipal().getId());
-
-		assertEqualLists(expected.getPermissions(), actual.getPermissions());
-	}
-
-	protected void assertEquals(RenditionData expected, RenditionData actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected rendition is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual rendition is null!");
-		}
-
-		assertEquals("Rendition kind:", expected.getKind(), actual.getKind());
-		assertEquals("Rendition MIME type:", expected.getMimeType(), actual.getMimeType());
-		assertEquals("Rendition length:", expected.getBigLength(), actual.getBigLength());
-		assertEquals("Rendition stream id:", expected.getStreamId(), actual.getStreamId());
-		assertEquals("Rendition title:", expected.getTitle(), actual.getTitle());
-		assertEquals("Rendition height:", expected.getBigHeight(), actual.getBigHeight());
-		assertEquals("Rendition width:", expected.getBigWidth(), actual.getBigWidth());
-		assertEquals("Rendition document id:", expected.getRenditionDocumentId(), actual.getRenditionDocumentId());
-	}
-
-	protected void assertContent(byte[] expected, byte[] actual) {
-		assertNotNull(expected);
-		assertNotNull(actual);
-
-		assertEquals("Content size:", expected.length, actual.length);
-
-		for (int i = 0; i < expected.length; i++) {
-			assertEquals("Content not equal.", expected[i], actual[i]);
-		}
-	}
-
-	protected void assertMimeType(String expected, String actual) {
-		assertNotNull(expected);
-		assertNotNull(actual);
-
-		int paramIdx = actual.indexOf(';');
-		if (paramIdx != -1) {
-			actual = actual.substring(0, paramIdx);
-		}
-
-		assertEquals(expected, actual);
-	}
-
-	protected void assertEqualLists(List<?> expected, List<?> actual) {
-		if ((expected == null) && (actual == null)) {
-			return;
-		}
-
-		if (expected == null) {
-			fail("Expected list is null!");
-		}
-
-		if (actual == null) {
-			fail("Actual list is null!");
-		}
-
-		assertEquals("List size:", expected.size(), actual.size());
-
-		for (int i = 0; i < expected.size(); i++) {
-			assertEquals("List element " + i + ":", expected.get(i), actual.get(i));
-		}
-	}
+    public static final String DEFAULT_TESTS_ENABLED = "false";
+    public static final String DEFAULT_USERNAME = "test";
+    public static final String DEFAULT_PASSWORD = "test";
+    public static final String DEFAULT_ATOMPUB_URL = "http://localhost:8080/cmis/atom";
+    public static final String DEFAULT_WEBSERVICES_URLPREFIX = "http://localhost:8080/cmis/services/";
+    public static final String DEFAULT_DOCTYPE = "cmis:document";
+    public static final String DEFAULT_FOLDERTYPE = "cmis:folder";
+
+    public static final String PROP_TESTS_ENABLED = "opencmis.test";
+    public static final String PROP_USERNAME = "opencmis.test.username";
+    public static final String PROP_PASSWORD = "opencmis.test.password";
+    public static final String PROP_REPOSITORY = "opencmis.test.repository";
+    public static final String PROP_TESTFOLDER = "opencmis.test.testfolder";
+    public static final String PROP_DOCTYPE = "opencmis.test.documenttype";
+    public static final String PROP_FOLDERTYPE = "opencmis.test.foldertype";
+    public static final String PROP_CONFIG_FILE = "opencmis.test.config";
+
+    public static final String PROP_ATOMPUB_URL = "opencmis.test.atompub.url";
+    public static final String PROP_WEBSERVICES_URLPREFIX = "opencmis.test.webservices.url";
+
+    private CmisBinding binding;
+    private String fTestRepositoryId;
+    private String fTestFolderId;
+
+    private static Log log = LogFactory.getLog(AbstractCmisTestCase.class);
+
+    /**
+     * Read configuration file.
+     */
+    static {
+        String configFileName = System.getProperty(PROP_CONFIG_FILE);
+        if (configFileName != null) {
+
+            try {
+                java.util.Properties properties = new java.util.Properties();
+                properties.load(new FileInputStream(configFileName));
+
+                for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements();) {
+                    String key = (String) e.nextElement();
+                    String value = properties.getProperty(key);
+                    System.setProperty(key, value);
+                }
+            } catch (Exception e) {
+                System.err.println("Could not load test properties: " + e.toString());
+            }
+        }
+    }
+
+    /**
+     * Returns the binding object or creates one if does not exist.
+     */
+    protected CmisBinding getBinding() {
+        if (binding == null) {
+            log.info("Creating binding...");
+            binding = createBinding();
+        }
+
+        return binding;
+    }
+
+    /**
+     * Creates a binding object.
+     */
+    protected abstract CmisBinding createBinding();
+
+    /**
+     * Returns a set of test names that enabled.
+     */
+    protected abstract Set<String> getEnabledTests();
+
+    /**
+     * Returns the test repository id.
+     */
+    protected String getTestRepositoryId() {
+        if (fTestRepositoryId != null) {
+            return fTestRepositoryId;
+        }
+
+        fTestRepositoryId = System.getProperty(PROP_REPOSITORY);
+        if (fTestRepositoryId != null) {
+            log.info("Test repository: " + fTestRepositoryId);
+            return fTestRepositoryId;
+        }
+
+        fTestRepositoryId = getFirstRepositoryId();
+        log.info("Test repository: " + fTestRepositoryId);
+
+        return fTestRepositoryId;
+    }
+
+    /**
+     * Returns the test root folder id.
+     */
+    protected String getTestRootFolder() {
+        if (fTestFolderId != null) {
+            return fTestFolderId;
+        }
+
+        fTestFolderId = System.getProperty(PROP_TESTFOLDER);
+        if (fTestFolderId != null) {
+            log.info("Test root folder: " + fTestFolderId);
+            return fTestFolderId;
+        }
+
+        fTestFolderId = getRootFolderId();
+        log.info("Test root folder: " + fTestFolderId);
+
+        return fTestFolderId;
+    }
+
+    /**
+     * Returns if the test is enabled.
+     */
+    protected boolean isEnabled(String name) {
+        boolean testsEnabled = Boolean.parseBoolean(System.getProperty(PROP_TESTS_ENABLED, DEFAULT_TESTS_ENABLED));
+
+        if (testsEnabled && getEnabledTests().contains(name)) {
+            return true;
+        }
+
+        log.info("Skipping test '" + name + "'!");
+
+        return false;
+    }
+
+    /**
+     * Returns the test username.
+     */
+    protected String getUsername() {
+        return System.getProperty(PROP_USERNAME, DEFAULT_USERNAME);
+    }
+
+    /**
+     * Returns the test password.
+     */
+    protected String getPassword() {
+        return System.getProperty(PROP_PASSWORD, DEFAULT_PASSWORD);
+    }
+
+    /**
+     * Returns the default document type.
+     */
+    protected String getDefaultDocumentType() {
+        return System.getProperty(PROP_DOCTYPE, DEFAULT_DOCTYPE);
+    }
+
+    /**
+     * Returns the default folder type.
+     */
+    protected String getDefaultFolderType() {
+        return System.getProperty(PROP_FOLDERTYPE, DEFAULT_FOLDERTYPE);
+    }
+
+    /**
+     * Returns the AtomPub URL.
+     */
+    protected String getAtomPubURL() {
+        return System.getProperty(PROP_ATOMPUB_URL, DEFAULT_ATOMPUB_URL);
+    }
+
+    /**
+     * Returns the Web Services URL prefix.
+     */
+    protected String getWebServicesURL() {
+        return System.getProperty(PROP_WEBSERVICES_URLPREFIX, DEFAULT_WEBSERVICES_URLPREFIX);
+    }
+
+    /**
+     * Returns the object factory.
+     */
+    protected BindingsObjectFactory getObjectFactory() {
+        return getBinding().getObjectFactory();
+    }
+
+    /**
+     * Returns the id of the first repository.
+     */
+    protected String getFirstRepositoryId() {
+        List<RepositoryInfo> repositories = getBinding().getRepositoryService().getRepositoryInfos(null);
+
+        assertNotNull(repositories);
+        assertFalse(repositories.isEmpty());
+        assertNotNull(repositories.get(0).getId());
+
+        return repositories.get(0).getId();
+    }
+
+    /**
+     * Returns the info object of the test repository.
+     */
+    protected RepositoryInfo getRepositoryInfo() {
+        RepositoryInfo repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(getTestRepositoryId(),
+                null);
+
+        assertNotNull(repositoryInfo);
+        assertNotNull(repositoryInfo.getId());
+        assertEquals(getTestRepositoryId(), repositoryInfo.getId());
+
+        return repositoryInfo;
+    }
+
+    /**
+     * Returns the root folder of the test repository.
+     */
+    protected String getRootFolderId() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getRootFolderId());
+
+        return repository.getRootFolderId();
+    }
+
+    /**
+     * Returns if the test repository supports reading ACLs.
+     */
+    protected boolean supportsDiscoverACLs() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        return (repository.getCapabilities().getAclCapability() != CapabilityAcl.NONE);
+    }
+
+    /**
+     * Returns if the test repository supports setting ACLs.
+     */
+    protected boolean supportsManageACLs() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        return (repository.getCapabilities().getAclCapability() == CapabilityAcl.MANAGE);
+    }
+
+    /**
+     * Returns if the test repository supports renditions.
+     */
+    protected boolean supportsRenditions() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getCapabilities().getRenditionsCapability() == null) {
+            return false;
+        }
+
+        return (repository.getCapabilities().getRenditionsCapability() != CapabilityRenditions.NONE);
+    }
+
+    /**
+     * Returns if the test repository supports descendants.
+     */
+    protected boolean supportsDescendants() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getCapabilities().isGetDescendantsSupported() == null) {
+            return false;
+        }
+
+        return repository.getCapabilities().isGetDescendantsSupported().booleanValue();
+    }
+
+    /**
+     * Returns if the test repository supports descendants.
+     */
+    protected boolean supportsFolderTree() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getCapabilities().isGetFolderTreeSupported() == null) {
+            return false;
+        }
+
+        return repository.getCapabilities().isGetFolderTreeSupported().booleanValue();
+    }
+
+    /**
+     * Returns if the test repository supports content changes.
+     */
+    protected boolean supportsContentChanges() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getCapabilities().getChangesCapability() == null) {
+            return false;
+        }
+
+        return (repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE);
+    }
+
+    /**
+     * Returns if the test repository supports query.
+     */
+    protected boolean supportsQuery() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getCapabilities().getQueryCapability() == null) {
+            return false;
+        }
+
+        return (repository.getCapabilities().getQueryCapability() != CapabilityQuery.NONE);
+    }
+
+    /**
+     * Returns if the test repository supports relationships.
+     */
+    protected boolean supportsRelationships() {
+        TypeDefinition relType = null;
+
+        try {
+            relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:relationship",
+                    null);
+        } catch (CmisObjectNotFoundException e) {
+            return false;
+        }
+
+        return (relType != null);
+    }
+
+    /**
+     * Returns if the test repository supports policies.
+     */
+    protected boolean supportsPolicies() {
+        TypeDefinition relType = null;
+
+        try {
+            relType = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), "cmis:policy", null);
+        } catch (CmisObjectNotFoundException e) {
+            return false;
+        }
+
+        return (relType != null);
+    }
+
+    /**
+     * Returns the AclPropagation from the ACL capabilities.
+     */
+    protected AclPropagation getAclPropagation() {
+        RepositoryInfo repository = getRepositoryInfo();
+
+        assertNotNull(repository.getCapabilities());
+
+        if (repository.getAclCapabilities().getAclPropagation() == null) {
+            return AclPropagation.REPOSITORYDETERMINED;
+        }
+
+        return repository.getAclCapabilities().getAclPropagation();
+    }
+
+    // ---- helpers ----
+
+    /**
+     * Prints a warning.
+     */
+    protected void warning(String message) {
+        System.out.println("**** " + message);
+    }
+
+    /**
+     * Creates a ContentStreamData object from a byte array.
+     */
+    protected ContentStream createContentStreamData(String mimeType, byte[] content) {
+        assertNotNull(content);
+
+        return getObjectFactory().createContentStream("test", BigInteger.valueOf(content.length), mimeType,
+                new ByteArrayInputStream(content));
+    }
+
+    /**
+     * Extracts the path from a folder object.
+     */
+    protected String getPath(ObjectData folderObject) {
+        assertNotNull(folderObject);
+        assertNotNull(folderObject.getProperties());
+        assertNotNull(folderObject.getProperties().getProperties());
+        assertTrue(folderObject.getProperties().getProperties().get(PropertyIds.PATH) instanceof PropertyString);
+
+        PropertyString pathProperty = (PropertyString) folderObject.getProperties().getProperties().get(
+                PropertyIds.PATH);
+
+        assertNotNull(pathProperty.getValues());
+        assertEquals(1, pathProperty.getValues().size());
+        assertNotNull(pathProperty.getValues().get(0));
+
+        return pathProperty.getValues().get(0);
+    }
+
+    // ---- short cuts ----
+
+    /**
+     * Retrieves an object.
+     */
+    protected ObjectData getObject(String objectId, String filter, Boolean includeAllowableActions,
+            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
+            Boolean includeACL, ExtensionsData extension) {
+        ObjectData object = getBinding().getObjectService()
+                .getObject(getTestRepositoryId(), objectId, filter, includeAllowableActions, includeRelationships,
+                        renditionFilter, includePolicyIds, includeACL, extension);
+
+        assertNotNull(object);
+
+        return object;
+    }
+
+    /**
+     * Retrieves a full blown object.
+     */
+    protected ObjectData getObject(String objectId) {
+        ObjectData object = getObject(objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
+                Boolean.TRUE, null);
+
+        assertBasicProperties(object.getProperties());
+
+        return object;
+    }
+
+    /**
+     * Retrieves an object by path.
+     */
+    protected ObjectData getObjectByPath(String path, String filter, Boolean includeAllowableActions,
+            IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
+            Boolean includeACL, ExtensionsData extension) {
+        ObjectData object = getBinding().getObjectService()
+                .getObjectByPath(getTestRepositoryId(), path, filter, includeAllowableActions, includeRelationships,
+                        renditionFilter, includePolicyIds, includeACL, extension);
+
+        assertNotNull(object);
+
+        return object;
+    }
+
+    /**
+     * Retrieves a full blown object by path.
+     */
+    protected ObjectData getObjectByPath(String path) {
+        ObjectData object = getObjectByPath(path, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
+                Boolean.TRUE, null);
+
+        assertBasicProperties(object.getProperties());
+
+        return object;
+    }
+
+    /**
+     * Returns <code>true</code> if the object with the given id exists,
+     * <code>false</code> otherwise.
+     */
+    protected boolean existsObject(String objectId) {
+        try {
+            ObjectData object = getObject(objectId, PropertyIds.OBJECT_ID, Boolean.FALSE, IncludeRelationships.NONE,
+                    null, Boolean.FALSE, Boolean.FALSE, null);
+
+            assertNotNull(object);
+            assertNotNull(object.getId());
+        } catch (CmisObjectNotFoundException e) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the child of a folder.
+     */
+    protected ObjectInFolderData getChild(String folderId, String objectId) {
+        boolean hasMore = true;
+
+        while (hasMore) {
+            ObjectInFolderList children = getBinding().getNavigationService().getChildren(getTestRepositoryId(),
+                    folderId, "*", null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE, null, null, null);
+
+            assertNotNull(children);
+            assertTrue(children.getObjects().size() > 0);
+
+            hasMore = (children.hasMoreItems() == null ? false : children.hasMoreItems().booleanValue());
+
+            for (ObjectInFolderData object : children.getObjects()) {
+                assertNotNull(object);
+                assertNotNull(object.getPathSegment());
+                assertNotNull(object.getObject());
+                assertNotNull(object.getObject().getId());
+
+                assertBasicProperties(object.getObject().getProperties());
+
+                if (object.getObject().getId().equals(objectId)) {
+                    return object;
+                }
+            }
+        }
+
+        fail("Child not found!");
+
+        return null;
+    }
+
+    /**
+     * Gets the version series id of an object.
+     */
+    protected String getVersionSeriesId(ObjectData object) {
+        PropertyData<?> versionSeriesId = object.getProperties().getProperties().get(PropertyIds.VERSION_SERIES_ID);
+        assertNotNull(versionSeriesId);
+        assertTrue(versionSeriesId instanceof PropertyId);
+
+        return ((PropertyId) versionSeriesId).getFirstValue();
+    }
+
+    /**
+     * Gets the version series id of an object.
+     */
+    protected String getVersionSeriesId(String docId) {
+        return getVersionSeriesId(getObject(docId));
+    }
+
+    /**
+     * Creates a folder.
+     */
+    protected String createFolder(Properties properties, String folderId, List<String> policies, Acl addACEs,
+            Acl removeACEs) {
+        String objectId = getBinding().getObjectService().createFolder(getTestRepositoryId(), properties, folderId,
+                policies, addACEs, removeACEs, null);
+        assertNotNull(objectId);
+        assertTrue(existsObject(objectId));
+
+        ObjectInFolderData folderChild = getChild(folderId, objectId);
+
+        // check canGetProperties
+        assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
+
+        // check name
+        PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
+        if (nameProp != null) {
+            assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
+                    nameProp.getFirstValue());
+        }
+
+        // check object type
+        PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
+        assertNotNull(typeProp);
+        assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
+                typeProp.getFirstValue());
+
+        // check parent
+        ObjectData parent = getBinding().getNavigationService().getFolderParent(getTestRepositoryId(), objectId, null,
+                null);
+        assertNotNull(parent);
+        assertNotNull(parent.getProperties());
+        assertNotNull(parent.getProperties().getProperties());
+        assertNotNull(parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID));
+        assertEquals(folderId, parent.getProperties().getProperties().get(PropertyIds.OBJECT_ID).getFirstValue());
+
+        return objectId;
+    }
+
+    /**
+     * Creates a folder with the default type.
+     */
+    protected String createDefaultFolder(String folderId, String name) {
+        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
+        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
+        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultFolderType()));
+
+        Properties properties = getObjectFactory().createPropertiesData(propList);
+
+        return createFolder(properties, folderId, null, null, null);
+    }
+
+    /**
+     * Creates a document.
+     */
+    protected String createDocument(Properties properties, String folderId, ContentStream contentStream,
+            VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
+        String objectId = getBinding().getObjectService().createDocument(getTestRepositoryId(), properties, folderId,
+                contentStream, versioningState, policies, addACEs, removeACEs, null);
+        assertNotNull(objectId);
+        assertTrue(existsObject(objectId));
+
+        if (folderId != null) {
+            ObjectInFolderData folderChild = getChild(folderId, objectId);
+
+            // check canGetProperties
+            assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_PROPERTIES, true);
+
+            // check canGetContentStream
+            if (contentStream != null) {
+                assertAllowableAction(folderChild.getObject().getAllowableActions(), Action.CAN_GET_CONTENT_STREAM,
+                        true);
+            }
+
+            // check name
+            PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
+            if (nameProp != null) {
+                assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
+                        nameProp.getFirstValue());
+            }
+
+            // check object type
+            PropertyData<?> typeProp = properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID);
+            assertNotNull(typeProp);
+            assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.OBJECT_TYPE_ID, PropertyId.class,
+                    typeProp.getFirstValue());
+
+            // check parent
+            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
+                    getTestRepositoryId(), objectId, "*", Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
+                    null);
+            assertNotNull(parents);
+            assertEquals(1, parents.size());
+
+            ObjectParentData parent = parents.get(0);
+            assertNotNull(parent);
+            assertNotNull(parent.getRelativePathSegment());
+            assertNotNull(parent.getObject());
+            assertNotNull(parent.getObject().getProperties().getProperties());
+            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
+            assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
+                    .getFirstValue());
+
+            // get document by path (check relative path segment)
+            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.PATH));
+            String parentPath = parent.getObject().getProperties().getProperties().get(PropertyIds.PATH)
+                    .getFirstValue().toString();
+
+            ObjectData docByPath = getObjectByPath((parentPath.equals("/") ? "" : parentPath) + "/"
+                    + parent.getRelativePathSegment());
+
+            PropertyData<?> idProp = docByPath.getProperties().getProperties().get(PropertyIds.OBJECT_ID);
+            assertNotNull(idProp);
+            assertEquals(objectId, idProp.getFirstValue());
+        } else {
+            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
+                    getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
+                    null);
+            assertNotNull(parents);
+            assertEquals(0, parents.size());
+        }
+
+        return objectId;
+    }
+
+    /**
+     * Creates a document with the default type.
+     */
+    protected String createDefaultDocument(String folderId, String name, String contentType, byte[] content) {
+        VersioningState vs = (isVersionable(getDefaultDocumentType()) ? VersioningState.MAJOR : VersioningState.NONE);
+
+        List<PropertyData<?>> propList = new ArrayList<PropertyData<?>>();
+        propList.add(getObjectFactory().createPropertyStringData(PropertyIds.NAME, name));
+        propList.add(getObjectFactory().createPropertyIdData(PropertyIds.OBJECT_TYPE_ID, getDefaultDocumentType()));
+
+        Properties properties = getObjectFactory().createPropertiesData(propList);
+
+        ContentStream contentStream = createContentStreamData(contentType, content);
+
+        return createDocument(properties, folderId, contentStream, vs, null, null, null);
+    }
+
+    /**
+     * Creates a document from source.
+     */
+    protected String createDocumentFromSource(String sourceId, Properties properties, String folderId,
+            VersioningState versioningState, List<String> policies, Acl addACEs, Acl removeACEs) {
+        String objectId = getBinding().getObjectService().createDocumentFromSource(getTestRepositoryId(), sourceId,
+                properties, folderId, versioningState, policies, addACEs, removeACEs, null);
+        assertNotNull(objectId);
+        assertTrue(existsObject(objectId));
+
+        if (folderId != null) {
+            ObjectInFolderData folderChild = getChild(folderId, objectId);
+
+            // check name
+            PropertyData<?> nameProp = properties.getProperties().get(PropertyIds.NAME);
+            if (nameProp != null) {
+                assertPropertyValue(folderChild.getObject().getProperties(), PropertyIds.NAME, PropertyString.class,
+                        nameProp.getValues().get(0));
+            }
+
+            // check parent
+            List<ObjectParentData> parents = getBinding().getNavigationService().getObjectParents(
+                    getTestRepositoryId(), objectId, null, Boolean.TRUE, IncludeRelationships.BOTH, null, Boolean.TRUE,
+                    null);
+            assertNotNull(parents);
+            assertEquals(1, parents.size());
+
+            ObjectParentData parent = parents.get(0);
+            assertNotNull(parent);
+            assertNotNull(parent.getRelativePathSegment());
+            assertNotNull(parent.getObject());
+            assertNotNull(parent.getObject().getProperties().getProperties());
+            assertNotNull(parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID));
+            assertEquals(folderId, parent.getObject().getProperties().getProperties().get(PropertyIds.OBJECT_ID)
+                    .getFirstValue());
+        }
+
+        return objectId;
+    }
+
+    /**
+     * Deletes an object.
+     */
+    protected void delete(String objectId, boolean allVersions) {
+        getBinding().getObjectService().deleteObject(getTestRepositoryId(), objectId, allVersions, null);
+        assertFalse(existsObject(objectId));
+    }
+
+    /**
+     * Deletes a tree.
+     */
+    protected void deleteTree(String folderId) {
+        getBinding().getObjectService().deleteTree(getTestRepositoryId(), folderId, Boolean.TRUE, UnfileObject.DELETE,
+                Boolean.TRUE, null);
+        assertFalse(existsObject(folderId));
+    }
+
+    /**
+     * Gets a content stream.
+     */
+    protected ContentStream getContent(String objectId, String streamId) {
+        ContentStream contentStream = getBinding().getObjectService().getContentStream(getTestRepositoryId(), objectId,
+                streamId, null, null, null);
+        assertNotNull(contentStream);
+        assertNotNull(contentStream.getMimeType());
+        assertNotNull(contentStream.getStream());
+
+        return contentStream;
+    }
+
+    /**
+     * Reads the content from a content stream into a byte array.
+     */
+    protected byte[] readContent(ContentStream contentStream) throws Exception {
+        assertNotNull(contentStream);
+        assertNotNull(contentStream.getStream());
+
+        InputStream stream = contentStream.getStream();
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        byte[] buffer = new byte[4096];
+        int b;
+        while ((b = stream.read(buffer)) > -1) {
+            baos.write(buffer, 0, b);
+        }
+
+        return baos.toByteArray();
+    }
+
+    /**
+     * Returns a type definition.
+     */
+    protected TypeDefinition getTypeDefinition(String typeName) {
+        TypeDefinition typeDef = getBinding().getRepositoryService().getTypeDefinition(getTestRepositoryId(), typeName,
+                null);
+
+        assertNotNull(typeDef);
+        assertNotNull(typeDef.getId());
+
+        return typeDef;
+    }
+
+    /**
+     * Returns if the type is versionable.
+     */
+    protected boolean isVersionable(String typeName) {
+        TypeDefinition type = getTypeDefinition(typeName);
+
+        assertTrue(type instanceof DocumentTypeDefinition);
+
+        Boolean isVersionable = ((DocumentTypeDefinition) type).isVersionable();
+        assertNotNull(isVersionable);
+
+        return isVersionable.booleanValue();
+    }
+
+    // ---- asserts ----
+
+    protected void assertEquals(TypeDefinition expected, TypeDefinition actual, boolean checkPropertyDefintions) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected type definition is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual type definition is null!");
+        }
+
+        assertEquals("TypeDefinition id:", expected.getId(), actual.getId());
+        assertEquals("TypeDefinition local name:", expected.getLocalName(), actual.getLocalName());
+        assertEquals("TypeDefinition local namespace:", expected.getLocalNamespace(), actual.getLocalNamespace());
+        assertEquals("TypeDefinition display name:", expected.getDisplayName(), actual.getDisplayName());
+        assertEquals("TypeDefinition description:", expected.getDescription(), actual.getDescription());
+        assertEquals("TypeDefinition query name:", expected.getQueryName(), actual.getQueryName());
+        assertEquals("TypeDefinition parent id:", expected.getParentTypeId(), actual.getParentTypeId());
+        assertEquals("TypeDefinition base id:", expected.getBaseTypeId(), actual.getBaseTypeId());
+
+        if (!checkPropertyDefintions) {
+            return;
+        }
+
+        if ((expected.getPropertyDefinitions() == null) && (actual.getPropertyDefinitions() == null)) {
+            return;
+        }
+
+        if (expected.getPropertyDefinitions() == null) {
+            fail("Expected property definition list is null!");
+        }
+
+        if (actual.getPropertyDefinitions() == null) {
+            fail("Actual property definition list is null!");
+        }
+
+        assertEquals(expected.getPropertyDefinitions().size(), actual.getPropertyDefinitions().size());
+
+        for (PropertyDefinition<?> expectedPropDef : expected.getPropertyDefinitions().values()) {
+            PropertyDefinition<?> actualPropDef = actual.getPropertyDefinitions().get(expectedPropDef.getId());
+
+            assertEquals(expectedPropDef, actualPropDef);
+        }
+    }
+
+    protected void assertEquals(PropertyDefinition<?> expected, PropertyDefinition<?> actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected property definition is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual property definition is null!");
+        }
+
+        assertNotNull(expected.getId());
+        assertNotNull(actual.getId());
+
+        String id = expected.getId();
+
+        assertEquals("PropertyDefinition " + id + " id:", expected.getId(), actual.getId());
+        assertEquals("PropertyDefinition " + id + " local name:", expected.getLocalName(), actual.getLocalName());
+        assertEquals("PropertyDefinition " + id + " local namespace:", expected.getLocalNamespace(), actual
+                .getLocalNamespace());
+        assertEquals("PropertyDefinition " + id + " query name:", expected.getQueryName(), actual.getQueryName());
+        assertEquals("PropertyDefinition " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
+        assertEquals("PropertyDefinition " + id + " description:", expected.getDescription(), actual.getDescription());
+        assertEquals("PropertyDefinition " + id + " property type:", expected.getPropertyType(), actual
+                .getPropertyType());
+        assertEquals("PropertyDefinition " + id + " cardinality:", expected.getCardinality(), actual.getCardinality());
+        assertEquals("PropertyDefinition " + id + " updatability:", expected.getUpdatability(), actual
+                .getUpdatability());
+    }
+
+    protected void assertEquals(Properties expected, Properties actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected properties data is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual properties data is null!");
+        }
+
+        if ((expected.getProperties() == null) && (actual.getProperties() == null)) {
+            return;
+        }
+
+        if ((expected.getProperties() == null) || (actual.getProperties() == null)) {
+            fail("Properties are null!");
+        }
+
+        if (expected.getProperties() == null) {
+            fail("Expected properties are null!");
+        }
+
+        if (actual.getProperties() == null) {
+            fail("Actual properties are null!");
+        }
+
+        assertEquals(expected.getProperties().size(), actual.getProperties().size());
+
+        for (String id : expected.getProperties().keySet()) {
+            PropertyData<?> expectedProperty = expected.getProperties().get(id);
+            assertNotNull(expectedProperty);
+            assertEquals(id, expectedProperty.getId());
+
+            PropertyData<?> actualProperty = actual.getProperties().get(id);
+            assertNotNull(actualProperty);
+            assertEquals(id, actualProperty.getId());
+
+            assertEquals(expectedProperty, actualProperty);
+        }
+    }
+
+    protected void assertEquals(PropertyData<?> expected, PropertyData<?> actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if ((expected == null) || (actual == null)) {
+            fail("Properties data is null!");
+        }
+
+        String id = expected.getId();
+
+        assertEquals("PropertyData " + id + " id:", expected.getId(), actual.getId());
+        assertEquals("PropertyData " + id + " display name:", expected.getDisplayName(), actual.getDisplayName());
+        assertEquals("PropertyData " + id + " local name:", expected.getLocalName(), actual.getLocalName());
+        assertEquals("PropertyData " + id + " query name:", expected.getQueryName(), actual.getQueryName());
+
+        assertEquals("PropertyData " + id + " values:", expected.getValues().size(), actual.getValues().size());
+
+        for (int i = 0; i < expected.getValues().size(); i++) {
+            assertEquals("PropertyData " + id + " value[" + i + "]:", expected.getValues().get(i), actual.getValues()
+                    .get(i));
+        }
+    }
+
+    protected void assertBasicProperties(Properties properties) {
+        assertNotNull(properties);
+        assertNotNull(properties.getProperties());
+
+        assertProperty(properties.getProperties().get(PropertyIds.OBJECT_ID), PropertyIds.OBJECT_ID, PropertyId.class);
+        assertProperty(properties.getProperties().get(PropertyIds.OBJECT_TYPE_ID), PropertyIds.OBJECT_TYPE_ID,
+                PropertyId.class);
+        assertProperty(properties.getProperties().get(PropertyIds.BASE_TYPE_ID), PropertyIds.BASE_TYPE_ID,
+                PropertyId.class);
+        assertProperty(properties.getProperties().get(PropertyIds.NAME), PropertyIds.NAME, PropertyString.class);
+        assertProperty(properties.getProperties().get(PropertyIds.CREATED_BY), PropertyIds.CREATED_BY,
+                PropertyString.class);
+        assertProperty(properties.getProperties().get(PropertyIds.CREATION_DATE), PropertyIds.CREATION_DATE,
+                PropertyDateTime.class);
+        assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFIED_BY), PropertyIds.LAST_MODIFIED_BY,
+                PropertyString.class);
+        assertProperty(properties.getProperties().get(PropertyIds.LAST_MODIFICATION_DATE),
+                PropertyIds.LAST_MODIFICATION_DATE, PropertyDateTime.class);
+    }
+
+    protected void assertProperty(PropertyData<?> property, String id, Class<?> clazz) {
+        assertNotNull(property);
+        assertNotNull(property.getId());
+        assertEquals("PropertyData " + id + " id:", id, property.getId());
+        assertTrue(clazz.isAssignableFrom(property.getClass()));
+        assertNotNull(property.getValues());
+        assertFalse(property.getValues().isEmpty());
+    }
+
+    protected void assertPropertyValue(PropertyData<?> property, String id, Class<?> clazz, Object... values) {
+        assertProperty(property, id, clazz);
+
+        assertEquals("Property " + id + " values:", values.length, property.getValues().size());
+
+        int i = 0;
+        for (Object value : property.getValues()) {
+            assertEquals("Property " + id + " value[" + i + "]:", values[i], value);
+            i++;
+        }
+    }
+
+    protected void assertPropertyValue(Properties properties, String id, Class<?> clazz, Object... values) {
+        assertNotNull(properties);
+        assertNotNull(properties.getProperties());
+
+        PropertyData<?> property = properties.getProperties().get(id);
+        assertNotNull(property);
+
+        assertPropertyValue(property, id, clazz, values);
+    }
+
+    protected void assertEquals(AllowableActions expected, AllowableActions actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected allowable action data is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual allowable action data is null!");
+        }
+
+        assertNotNull(expected.getAllowableActions());
+        assertNotNull(actual.getAllowableActions());
+
+        assertEquals("Allowable action size:", expected.getAllowableActions().size(), actual.getAllowableActions()
+                .size());
+
+        for (Action action : expected.getAllowableActions()) {
+            boolean expectedBoolean = expected.getAllowableActions().contains(action);
+            boolean actualBoolean = actual.getAllowableActions().contains(action);
+
+            assertEquals("AllowableAction " + action + ":", expectedBoolean, actualBoolean);
+        }
+    }
+
+    protected void assertAllowableAction(AllowableActions allowableActions, Action action, boolean expected) {
+        assertNotNull(allowableActions);
+        assertNotNull(allowableActions.getAllowableActions());
+        assertNotNull(action);
+
+        assertEquals("Allowable action \"" + action + "\":", expected, allowableActions.getAllowableActions().contains(
+                action));
+    }
+
+    protected void assertEquals(Acl expected, Acl actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected ACL data is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual ACL data is null!");
+        }
+
+        if ((expected.getAces() == null) && (actual.getAces() == null)) {
+            return;
+        }
+
+        if (expected.getAces() == null) {
+            fail("Expected ACE data is null!");
+        }
+
+        if (actual.getAces() == null) {
+            fail("Actual ACE data is null!");
+        }
+
+        // assertEquals(expected.isExact(), actual.isExact());
+        assertEquals(expected.getAces().size(), actual.getAces().size());
+
+        for (int i = 0; i < expected.getAces().size(); i++) {
+            assertEquals(expected.getAces().get(i), actual.getAces().get(i));
+        }
+    }
+
+    protected void assertEquals(Ace expected, Ace actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected ACE data is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual ACE data is null!");
+        }
+
+        assertNotNull(expected.getPrincipal());
+        assertNotNull(expected.getPrincipal().getId());
+        assertNotNull(actual.getPrincipal());
+        assertNotNull(actual.getPrincipal().getId());
+        assertEquals("ACE Principal:", expected.getPrincipal().getId(), actual.getPrincipal().getId());
+
+        assertEqualLists(expected.getPermissions(), actual.getPermissions());
+    }
+
+    protected void assertEquals(RenditionData expected, RenditionData actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected rendition is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual rendition is null!");
+        }
+
+        assertEquals("Rendition kind:", expected.getKind(), actual.getKind());
+        assertEquals("Rendition MIME type:", expected.getMimeType(), actual.getMimeType());
+        assertEquals("Rendition length:", expected.getBigLength(), actual.getBigLength());
+        assertEquals("Rendition stream id:", expected.getStreamId(), actual.getStreamId());
+        assertEquals("Rendition title:", expected.getTitle(), actual.getTitle());
+        assertEquals("Rendition height:", expected.getBigHeight(), actual.getBigHeight());
+        assertEquals("Rendition width:", expected.getBigWidth(), actual.getBigWidth());
+        assertEquals("Rendition document id:", expected.getRenditionDocumentId(), actual.getRenditionDocumentId());
+    }
+
+    protected void assertContent(byte[] expected, byte[] actual) {
+        assertNotNull(expected);
+        assertNotNull(actual);
+
+        assertEquals("Content size:", expected.length, actual.length);
+
+        for (int i = 0; i < expected.length; i++) {
+            assertEquals("Content not equal.", expected[i], actual[i]);
+        }
+    }
+
+    protected void assertMimeType(String expected, String actual) {
+        assertNotNull(expected);
+        assertNotNull(actual);
+
+        int paramIdx = actual.indexOf(';');
+        if (paramIdx != -1) {
+            actual = actual.substring(0, paramIdx);
+        }
+
+        assertEquals(expected, actual);
+    }
+
+    protected void assertEqualLists(List<?> expected, List<?> actual) {
+        if ((expected == null) && (actual == null)) {
+            return;
+        }
+
+        if (expected == null) {
+            fail("Expected list is null!");
+        }
+
+        if (actual == null) {
+            fail("Actual list is null!");
+        }
+
+        assertEquals("List size:", expected.size(), actual.size());
+
+        for (int i = 0; i < expected.size(); i++) {
+            assertEquals("List element " + i + ":", expected.get(i), actual.get(i));
+        }
+    }
 }



Mime
View raw message