 --------------
 Maven SCM Jazz Provider - TCK Test Implementation Details.
 --------------
 Chris Graham
 --------------
 2012-03-19
 --------------

 ~~ 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.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html

TCK Tests

  The TCK test the actual implementation of the SCM APIs by calling the provider implementations via JUnit tests. 

Jazz TCK Test Setup

  The Jazz TCK tests are enabled by enabling the <<<tck-jazz>>> profile. This can be done by <<<mvn -Ptck-jazz ...>>>.

  The Jazz TCK tests require three system properties to be defined. These properties can be defined in your local
  <<<settings.xml>>> file or from the command line, via <<<-D>>>. The latter option may be needed if running the
  TCK tests as JUnit tests from inside Eclipse.

  * tckBaseDir

    This property must be defined to define where the test snapshot is to be loaded into. Due to the
    sandbox in a sandbox issue, this must be outside of the existing source tree. This property will
    still need to be set if Eclipse is being used, and the Eclipse Workspace is a sandbox.

  * tckSnapshotName

    This is the name of an existing snapshot on the Jazz SCM server that is used to load the sandbox
    used to conduct that TCK tests. This snapshot needs to be created independently of these TCK tests.
    At the current time, creating a repository workspace with a named component (as opposed to a default
    one; which causes duplicates when run more than once) is not supported by the Jazz SCM CLI tool.
    Therefore a snapshot, with the appropriate contents, will need to be created before running these
    TCK tests, and its name set to the value of the <<<tckSnapshotName>>> property.

  * tckUrl

    This property defines the initial part of the SCM URL that points to the server used to perform the TCK tests against.
    For example:

+---
  scm:jazz:Deb;Deb@https://rtc:9444/jazz:MavenSCMTCKTestWorkspace
+---

    This is part of the usual SCM URL for Jazz. However, this value is appended with <<<System.currentTimeMillis()>>>
    as part of the repository workspace name to guarantee uniqueness. A new repostory workspace is created for
    each TCK test as it is being run.
    
  The <<<tckSnapshotName>>> is loaded into the <<<tckBaseDir>>> location from the server referenced in the <<<tckUrl>>>
  property.

 Jazz creates some challenges for the existing TCK tests.
 
   * Jazz always has an initial baseline. This maps to a revision. SCM's such as SVN/CVS etc, around which
     the SCM API's and corresponding TCK tests assume that there is no initial revision.
   
   * Jazz has no equivalent of a SVN/CVS style <<<add>>> command, whereby you can add a file to a SCM, ie
     indicate that it is to be added, and not commit it.
     
 Fully implemented Jazz TCK tests.
 
   * JazzBlameCommandTckTest
   
   * JazzCheckOutCommandTckTest
 
 Functional but failing Jazz TCK tests.
 
   * JazzChangeLogCommandTckTest
   
   * JazzCheckInCommandTckTest
   
   * JazzDiffCommandTckTest
   
   * JazzStatusCommandTckTest
   
   * JazzTagCommandTckTest
   
   * JazzUpdateCommandTckTest
   
   []

   The underlying Jazz SCM CLI tool does have issues with adding or checking in files that are in the sandbox root.
   Several work items have been opened against the Jazz SCM CLI tool to address these issues.
   When these work items have been addressed, the Jazz SCM provider should be fully able to support the SCM API and
   these TCK tests.
 
Cleaning Up
 
   Currently, we can not delete Jazz SCM repository objects using the Jazz SCM CLI tool. A work item has been opened
   to address this. When this functionality is present, then the removeRepo() method in the TCK tests can be used
   to perform a cleanup. Until that time, the repository workspaces that are created using these TCK tests will need
   to be removed using the Eclipse client that has the full functionality to do so.
   