<?xml version="1.0"?>

<!--
  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

      https://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.
-->

<project name="msvss-test" basedir="../../../"
         default="test-all" xmlns:vss="antlib:org.apache.ant.vss">

  <property name="file" value="build.xml"/>
  <property name="vss-project" value="antlib"/>
  <property name="testcase-dir" value="${basedir}/src/etc/testcases"/>
  <property name="testing-dir" value="${basedir}/testing"/>
  <property environment="env" />

  <presetdef name="sscreate">
    <vss:create
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
      login="Guest,"
    />
  </presetdef>

  <presetdef name="sscp">
    <vss:cp
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
      login="Guest,"
    />
  </presetdef>

  <presetdef name="ssadd">
    <vss:add
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
      login="Guest,"
    />
  </presetdef>

  <macrodef name="create-tempfile">
    <attribute name="property" />
    <attribute name="directory" default="${testing-dir}" />
    <attribute name="message" default="Testing VSS"/>
    <sequential>
      <mkdir dir="@{directory}" />
      <tempfile property="@{property}" destdir="@{directory}"
          suffix=".java" />
      <echo file="${@{property}}" message="// @{message}" />
    </sequential>
  </macrodef>

  <target name="setup" depends="find-ss-server-dir, find-ss-dir">
    <fail unless="vss-ss-dir">Could not find ss.exe.
        Add to Path environment variable
        or add vss-ss-dir=[path to ss.exe] to build.properties
        or add -Dvss-ss-dir=[path to ss.exe] to command line.</fail>
    <fail unless="vss-server-dir">Could not find SourceSafe Database.
        Add SSDIR to environment
        or add vss-server-dir=[path to database] to build.properties
        or add -Dvss-server-dir=[path to database] to command line.</fail>
    <sscreate
      vsspath="$/${vss-project}"
    />
    <sscp
      vsspath="$/${vss-project}"
    />
  </target>

  <target name="find-ss-server-dir" unless="vss-server-dir">
    <available property="vss-server-dir" file="srcsafe.ini"
        filepath="${env.SSDIR}" value="${env.SSDIR}" />
    <available property="vss-server-dir" file="srcsafe.ini"
        filepath="${env.Ssdir}" value="${env.Ssdir}" />
    <available property="vss-server-dir" file="srcsafe.ini"
        filepath="${env.ssdir}" value="${env.ssdir}" />
  </target>

  <target name="find-ss-dir" depends="find-ss-exe" if="vss-ss-exe"
      unless="vss-ss-dir">
    <dirname property="vss-ss-dir" file="${vss-ss-exe}" />
  </target>

  <target name="find-ss-exe" unless="vss-ss-exe">
    <available property="vss-ss-exe" file="ss.exe" filepath="${env.Path}"
        value="ss.exe" />
    <available property="vss-ss-exe"
        file="C:\Program Files\Microsoft Visual Sourcesafe\ss.exe"
        value="C:\Program Files\Microsoft Visual Sourcesafe\ss.exe" />
    <available property="vss-ss-exe"
        file="C:\Program Files (x86)\Microsoft Visual Sourcesafe\ss.exe"
        value="C:\Program Files (x86)\Microsoft Visual Sourcesafe\ss.exe"/>
  </target>


  <target name="test-all" depends="setup, test-delete-recover, test-add,
      test-move, test-cloak, test-locate, test-status, test-checkout, test-checkin"
      description="Test all VSS tasks other than destroy (use cleanup for that)"
  />

  <target name="test-add" depends="setup">
    <create-tempfile property="vss-temp-file" message="Testing Add for VSS" />
    <ssadd
      vsspath="$/${vss-project}"
      localpath="${vss-temp-file}"
      comment="Testing Add for VSS"
    />
  </target>

  <target name="test-move" depends="setup">
    <!-- create sub projects -->
    <sscreate
      vsspath="$/${vss-project}/sub1"
    />

    <sscreate
      vsspath="$/${vss-project}/sub2"
    />

    <!-- perform move operation -->
    <vss:move
      vsspath="$/${vss-project}/sub2"
      destination="$/${vss-project}/sub1"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
  </target>

  <target name="test-cloak" depends="setup">
    <vss:cloak
      vsspath="$/${vss-project}"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
    <vss:decloak
      vsspath="$/${vss-project}"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
  </target>

  <target name="test-delete-recover" depends="setup">
    <vss:delete
      vsspath="$/${vss-project}"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
    <vss:recover
      vsspath="$/${vss-project}"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
    <!-- should be able to change to project as it has been 'recovered' -->
    <sscp
      vsspath="$/${vss-project}"
    />
  </target>

  <target name="test-locate" depends="setup">
    <vss:locate
      vsspath="$/${vss-project}"
      login="Guest,"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
  </target>

  <target name="test-status" depends="setup">
    <vss:status
      vsspath="$/${vss-project}"
      login="Guest,"
      user="Guest"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
  </target>

  <target name="test-checkout" depends="setup, test-add">
    <vss:checkout
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
      vsspath="$/${vss-project}"
      localpath="${testing-dir}"
      login="Guest,"
    />
  </target>

  <target name="test-checkin" depends="setup, test-checkout">
    <echo file="${vss-temp-file}" message="Testing Checkin with VSS" />
    <vss:checkin
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
      vsspath="$/${vss-project}"
      localpath="${testing-dir}"
      login="Guest,"
      comment="Testing Checkin with VSS"
    />
  </target>

  <target name="cleanup" depends="find-ss-server-dir, find-ss-dir">
    <vss:destroy
      vsspath="$/${vss-project}"
      login="Guest,"
      autoresponse="Y"
      ssdir="${vss-ss-dir}"
      serverPath="${vss-server-dir}"
    />
    <delete dir="${testing-dir}" />
  </target>
</project>