You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2007/04/24 07:30:56 UTC

svn commit: r531732 [2/2] - in /harmony/enhanced/buildtest/branches: ./ 2.0/ 2.0/adaptors/ 2.0/adaptors/classlib/ 2.0/adaptors/drlvm/ 2.0/scripts/ 2.0/scripts/templates/

Added: harmony/enhanced/buildtest/branches/2.0/scripts/exec-adaptor.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/exec-adaptor.xml?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/exec-adaptor.xml (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/exec-adaptor.xml Mon Apr 23 22:30:55 2007
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    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. -->
+
+<!DOCTYPE buildtest SYSTEM "../buildtest.dtd">
+
+<!-- ====================================================================== 
+               BT Framework Implementation of Adaptors Execution 
+     ====================================================================== -->
+<project name="exec-adaptor" default="call" basedir=".">
+
+    <import file="${framework.implementation.file}"/>
+    <import file="${adaptors.dir}/${suite.name}/adaptor.xml"/>
+
+    <!-- calls the adaptor's target specified by 
+         '@{target}' attribute value.
+         Supposed parameters:
+             ${suite.name} - the name of the suite to call
+             @{target}     - the target of the adaptor to launch
+             ${result.file.location} - the location of the file for
+                    storing of the resulting parameters values
+         It's supposed that all of the properties needed to be known
+         by Test Suite are already defined and passed to this call
+         with Ant's environment.
+         -->
+    <macrodef name="call-target">
+        <attribute name="target"/>
+        <sequential>
+            <trycatch property="execution.exception">
+            <try>
+                <runtarget target="@{target}"/>
+            </try>
+            <catch>
+                <echo>
+--------
+WARNING: Target @{target} of adaptor for Test Suite '${suite.name}' FAILED
+-------- with the following exception:
+${execution.exception}
+</echo>
+                <property name="${suite.name}.parameters.@{target}.failed" value="true"/>
+            </catch>
+            </trycatch>
+            <resolve-parameters suite="${suite.name}" file="${result.file.location}"/>
+            <save-parameters suite="${suite.name}" file="${result.file.location}"/>
+        </sequential>
+    </macrodef>
+
+    <target name="setup-suite">
+        <call-target target="setup"/>
+    </target>
+
+    <target name="run-suite">
+        <call-target target="run"/>
+    </target>
+
+    <!-- just load all defined parameters -->
+    <target name="import-suite">
+        <xmlproperty file="parameters.xml"
+                     collapseAttributes="true"
+                     semanticAttributes="true"
+                     prefix="${suite.name}"
+        />
+        <save-parameters suite="${suite.name}" file="${result.file.location}"/>
+    </target>
+
+</project>
+

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/exec-adaptor.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/framework.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/framework.properties?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/framework.properties (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/framework.properties Mon Apr 23 22:30:55 2007
@@ -0,0 +1,25 @@
+build.dir=${root.dir}/build
+test.sources.dir=${root.dir}/tests
+
+required.parameters.location=${root.dir}/required-parameters.properties
+backup.parameters.location=${root.dir}/backup-parameters.properties
+
+external.libs.dir=${build.dir}/libs
+external.arch.dir=${build.dir}/arch
+temp.files.dir=${build.dir}/temp
+checkouts.dir=${build.dir}/checkouts
+results.dir=${build.dir}/results
+classes.dir=${build.dir}/classes
+
+execution.timeout=10000
+
+cc.work.dir=${build.dir}/cc
+cc.config.file=${cc.work.dir}/cc-config.xml
+cc.config.template=${scripts.dir}/templates/cc-config-template.xml
+cc.project.template=${scripts.dir}/templates/cc-project-template.xml
+cc.log.dir=${cc.work.dir}/logs
+cc.project.execution.timeout=5000000
+
+local.configuration.file=${root.dir}/framework.local.properties
+local.configuration.template.file=${scripts.dir}/local.properties.template
+

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/framework.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/framework.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/framework.xml?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/framework.xml (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/framework.xml Mon Apr 23 22:30:55 2007
@@ -0,0 +1,835 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    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. -->
+
+<!DOCTYPE buildtest SYSTEM "../buildtest.dtd">
+
+<!-- ====================================================================== 
+                   BT Framework Implementation Specific Code 
+     ====================================================================== 
+     Defines the following ids on the objects:
+        <propertyset id="parameters.id">
+            set of all of the parameters with keys in extended form
+            (${suite.name}.parameters.*)
+
+        <propertyset id="resolved.external.parameters.id">
+            names of resolved externals (ext.*)
+        
+        <propertyset id="required.parameters.id">
+            set of all of the required parameters with keys in extended form
+            (${suite.name}.parameters.required.${required.parameter.name})
+        
+        <propertyset id="required.parameters.simple.id">
+            set of all of the required parameters with keys in simple form
+            (${suite.name}.${required.parameter.name})
+
+        <propertyset id="shared.parameters.id">
+            set of all of the shared parameters with keys in extended form
+
+        <propertyset id="shared.parameters.simple.id">
+            set of all of the shared parameters with keys in simple form 
+
+        <propertyset id="@{suite}.parameters.id">
+            set of all of the parameters needed to be known by @{suite}
+
+-->
+<project name="framework-implementation" default="run" basedir=".">
+
+    <import file="download.xml"/>
+    <import file="cc-project.xml"/>
+
+    <!-- check framework parameters passed to adaptors -->
+    <target name="check-framework-parameters">
+        <check-file-pointer property="build.dir" type="dir"/>
+        <check-file-pointer property="checkouts.dir" type="dir"/>
+    </target>
+
+    <!-- Sets up the framework -->
+    <target name="init-framework" 
+            depends="define-tasks, make-dirs, patch-ant, reorder-suites, load-parameters,
+                        fetch-depends,
+                            -delete-temporal-properties"/>
+
+    <!-- Fixes Ant's Bug described at: 
+         http://issues.apache.org/bugzilla/show_bug.cgi?id=30569
+        -->
+    <target name="patch-ant" depends="make-dirs, define-tasks">
+        <if>
+            <not><available file="${temp.files.dir}/SubAnt.java"/></not>
+        <then>
+            <get src="http://issues.apache.org/bugzilla/attachment.cgi?id=15681"
+                 dest="${temp.files.dir}/SubAnt.java"
+                 usetimestamp="true"
+                 verbose="true"
+            />
+        </then>
+        </if>
+        <javac 
+            srcdir="${temp.files.dir}"
+            destdir="${classes.dir}"
+            includesfile="${temp.files.dir}/SubAnt.java">
+            <depend targetdir="${classes.dir}/org/apache/tools/ant/taskdefs">
+                <mapper>
+                    <globmapper from="*.java" to="*.class"/>
+                </mapper>
+            </depend>
+        </javac>
+    </target>
+
+    <target name="make-dirs">
+        <!-- Make Dirs -->
+        <mkdir dir="${build.dir}"/>
+        <mkdir dir="${checkouts.dir}"/>
+        <mkdir dir="${results.dir}"/>
+        <mkdir dir="${temp.files.dir}"/>
+        <mkdir dir="${classes.dir}"/>
+    </target>
+
+    <target name="define-tasks" depends="fetch-ant-contrib, define-ant-contrib"/>
+
+    <target name="define-ant-contrib">
+        <!-- plug in the ANTCONTRIB -->
+        <taskdef resource="net/sf/antcontrib/antlib.xml">
+            <classpath>
+                <pathelement location="${ext.ant-contrib.location}" />
+            </classpath>
+        </taskdef>
+    </target>
+
+    <target name="load-suites-parameters" depends="define-tasks, define-suites-ids">
+        <!-- load suites properties -->
+        <for list="${test.suites.names.list}" param="suite">
+            <sequential>
+                <log message="Load Parameters For '@{suite}'"/>
+                <call-to-adaptor suite="@{suite}" call="import-suite"/>
+            </sequential>
+        </for>
+    </target>
+
+    <target name="load-framework-parameters">
+        <!-- load framework parameters file containing 
+                       external libraries descriptions -->
+        <xmlproperty 
+            file="${scripts.dir}/parameters.xml"
+            collapseAttributes="true" 
+            semanticAttributes="true"
+            prefix="framework"
+        />
+    </target>
+
+    <target name="load-parameters"
+            depends="load-framework-parameters, load-suites-parameters, 
+                        define-tasks">
+        <log message="Loaded Parameters:"/>
+        <print-parameters/>
+
+        <!-- all parameters with keys in extended form -->
+        <propertyset id="parameters.id">
+            <propertyref regex="[^.][^.]*\.parameters\."/>
+        </propertyset>
+
+        <!-- all parameters defined for framework -->
+        <propertyset id="framework.parameters.id">
+            <propertyref regex="framework\.parameters\."/>
+        </propertyset>
+
+        <!-- required parameters with keys in extended form -->
+        <propertyset id="required.parameters.id">
+            <propertyref regex="[^.][^.]*\.parameters\.required"/>
+        </propertyset>
+
+        <!-- required parameters with keys in simple form -->
+        <propertyset id="required.parameters.simple.id">
+            <propertyref regex="[^.][^.]*\.parameters\.required"/>
+            <regexpmapper from="^([^.][^.]*)\.parameters\.required\.(.*)$" to="\1.\2"/>
+        </propertyset>
+
+        <!-- shared parameters with keys in extended form -->
+        <propertyset id="shared.parameters.id">
+            <propertyref regex="[^.][^.]*\.parameters\.shared"/>
+        </propertyset>
+
+        <!-- shared parameters with keys in simple form -->
+        <propertyset id="shared.parameters.simple.id">
+            <propertyref regex="[^.][^.]*\.parameters\.shared"/>
+            <regexpmapper from="^([^.][^.]*)\.parameters\.shared\.(.*)$" to="\1.\2"/>
+        </propertyset>
+
+        <!-- resolved externals -->
+        <propertyset id="resolved.external.parameters.id">
+            <propertyref prefix="ext."/>
+        </propertyset>
+    </target>
+
+    <target name="process-required-parameters" depends="load-parameters">
+        <!-- Load and define (as extended) preset required parameters -->
+        <property file="${required.parameters.location}" prefix="tmp.required.preset"/>
+        <!-- XXX echoproperties>
+            <propertyset>
+                <propertyref prefix="tmp.required.preset"/>
+            </propertyset>
+        </echoproperties -->
+        <property name="tmp.preset.required.params.list" value=""/>
+        <propertyselector 
+            property="tmp.preset.required.params.list"
+            override="true"
+            delimiter=","
+            match="^tmp\.required\.preset\.(.*)$"
+            select="\1"
+            distinct="true"
+        />
+        <log message="Preset Required Parameters: ${tmp.preset.required.params.list}"/>
+        <!-- Set up Required Parameter values and remove possible trash 
+             properties got from the file (local configuration properties put
+             into the wrong place (${local.configuration.file} should be used
+             instead of ${required.parameters.location}) 
+             or required parameters of unsellected suites) -->
+        <for list="${tmp.preset.required.params.list}" param="preset">
+            <sequential>
+                <var name="tmp.param.key" unset="true"/>
+                <property name="tmp.param.key" value=""/>
+                <!-- bring the parameter key to the extended form -->
+                <propertyregex
+                    property="tmp.param.key" 
+                    input="@{preset}"
+                    regexp="^([^.][^.]*)\.(.*)$"
+                    replace="\1.parameters.required.\2"
+                    override="true"
+                />
+                <var name="tmp.param.value" unset="true"/>
+                <property name="tmp.param.value" 
+                          value="${tmp.required.preset.@{preset}}"/>
+                <!-- log message="Processing: ${tmp.param.key} = ${tmp.param.value} (${tmp.required.preset.@{preset}})"/ -->
+                <if>
+                    <not><isset property="${tmp.param.key}.description"/></not>
+                <then>
+                    <echo>
+--------
+WARNING: Property
+--------    @{preset}=${tmp.param.value}
+specified in 
+            ${required.parameters.location}
+file was not described as 'required' for any of selected test suites:
+            ${test.suites.names.list}
+It is removed from required properties settings file 
+and it's backed up into
+            ${backup.parameters.location}
+file.
+</echo>
+                    <echo file="${backup.parameters.location}" append="true">
+@{preset}=${tmp.param.value}</echo>
+                </then>
+                <else>
+                    <if>
+                        <!-- check that the value is set -->
+                        <length string="${tmp.param.value}" 
+                                when="greater" length="0"/>
+                    <then>
+                        <!-- value is set, so use it -->
+                        <var name="${tmp.param.key}" 
+                             value="${tmp.param.value}"/>
+                    </then>
+                    </if>
+                </else>
+                </if>
+            </sequential>
+        </for>
+
+        <antcall target="update-required-parameters-file" inheritAll="true">
+            <propertyset>
+                <propertyset refid="required.parameters.simple.id"/>
+                <globmapper from="*" to="R-EQUIRED.*"/>
+            </propertyset>
+        </antcall>
+    </target>
+
+    <!-- Updates the file containing all of the required properties -->
+    <!-- This target should be called with propertyset containing all the
+         required parameter properties with names prefixed with 
+         "required." -->
+    <target name="update-required-parameters-file">
+        <property name="tmp.required.parameters.list" value=""/>
+        <propertyselector 
+            property="tmp.required.parameters.list"
+            override="true"
+            delimiter=","
+            match="^R-EQUIRED\.(.*?)(?:\.description)?$"
+            select="\1"
+            distinct="true"
+        />
+        <sortlist 
+            property="tmp.required.parameters.sorted.list"
+            value="${tmp.required.parameters.list}"
+            delimiter=","
+            override="true"
+        />
+        <echo file="${required.parameters.location}">#
+# Required Parameters Settings File
+#
+# Please, provide the values for all of the 
+# required unset parameters described here.
+#
+# This file was generated on the base of parameters
+# described as 'required' by selected test suites (${test.suites.names.list})
+#
+# The other configuration properties (not described as 'required'
+# by any of the selected test suites) should not be added to this file.
+# They should be specified in
+#    ${local.configuration.file} 
+# file.
+#
+# If there is a property not considered as 'required' it will be 
+# removed from this file and backed up into
+#    ${backup.parameters.location}
+# file.
+#
+
+</echo>
+        <for list="${tmp.required.parameters.sorted.list}" param="required" trim="yes">
+            <sequential>
+
+                <log message="Precessing of @{required} = ${R-EQUIRED.@{required}}"/>
+
+                <!-- Print Description -->
+                <if>
+                    <isset property="R-EQUIRED.@{required}.description"/>
+                <then>
+                    <echo append="true"
+                          file="${required.parameters.location}"># ${R-EQUIRED.@{required}.description}
+</echo>
+                </then>
+                </if>
+
+                <var name="tmp.param.value" unset="true"/>
+                <property name="tmp.param.value" value=""/>
+                <if>
+                    <or>
+                        <not><isset property="R-EQUIRED.@{required}"/></not>
+                        <equals arg1="${R-EQUIRED.@{required}}" arg2="" trim="true"/>
+                        <contains string="${R-EQUIRED.@{required}}" substring=".parameters.shared."/>
+                    </or>
+                <then>
+                    <echo append="true"
+                          file="${required.parameters.location}">@{required}=
+</echo>
+                    <property name="tmp.unset.required.parameter.exists" value="true"/>
+                    <echo>
+--------
+WARNING: The value of the Required Parameter 
+--------    @{required}
+         was not set! 
+         Please, update Required Parameters Settings File:
+            ${required.parameters.location}
+
+</echo>
+                </then>
+                <else>
+                    <propertyregex
+                        property="tmp.param.value" 
+                        input="${R-EQUIRED.@{required}}"
+                        regexp="\\"
+                        replace="\\\\\\\\"
+                        global="true"
+                        override="true"
+                        defaultValue="${R-EQUIRED.@{required}}"
+                    />
+                    <echo append="true"
+                          file="${required.parameters.location}">@{required}=${tmp.param.value}
+</echo>
+                </else>
+                </if>
+            </sequential>
+        </for>
+        <fail if="tmp.unset.required.parameter.exists">...
+------
+ERROR: Some of the Required Parameters for selected Test Suites:
+------      ${test.suites.names.list}
+       were not set. 
+       Please, update Requirted Parameters Settings File:
+            ${required.parameters.location}
+</fail>
+
+    </target>
+
+    <target name="define-suites-ids">
+        <!-- do define IDs for the parameters for each particular 
+             tets suite -->
+        <for list="${test.suites.names.list}" param="suite">
+        <sequential>
+            <propertyset id="@{suite}.parameters.id">
+                <propertyset refid="resolved.external.parameters.id"/>
+                <propertyset refid="framework.parameters.id"/>
+                <propertyset refid="global.build.parameters.id"/>
+                <!-- required parameters in the simple form -->
+                <propertyset>
+                    <propertyset refid="required.parameters.simple.id"/> 
+                    <propertyref prefix="@{suite}"/>
+                </propertyset>
+                <!-- required parameters in the simple form 
+                     without suite name -->
+                <propertyset>
+                    <propertyset refid="required.parameters.simple.id"/>
+                    <regexpmapper from="^@{suite}\.(.*)$" to="\1"/>
+                </propertyset>
+                <!-- shared parameters in any form" -->
+                <propertyset refid="shared.parameters.id"/>
+                <propertyset refid="shared.parameters.simple.id"/>
+                <!-- shared parameters in the simple form 
+                     without suite name -->
+                <propertyset>
+                    <propertyset refid="shared.parameters.simple.id"/>
+                    <regexpmapper from="^@{suite}\.(.*)$" to="\1"/>
+                </propertyset>
+            </propertyset>
+        </sequential>
+        </for>
+    </target>
+
+    <!-- do test suites initialization work before adaptors execution -->
+    <target name="init-suites" 
+                depends="init-framework, process-required-parameters, 
+                            define-suites-ids, -delete-temporal-properties"/>
+
+    <!-- Sets up the suites -->
+    <target name="setup-suites" depends="init-suites">
+        <!-- load suites properties -->
+        <for list="${test.suites.names.list}" param="suite">
+        <sequential>
+            <echo>===========================================</echo>
+            <echo>Setup of '@{suite}' Test Suite..</echo>
+            <!-- check for the failures of the superior suites -->
+            <for list="${@{suite}.parameters.depends}" param="superior">
+            <sequential>
+                <log message="Check for setup failure of @{superior} = ${@{superior}.parameters.run.failed}"/>
+                <condition property="@{suite}.has.failed.superior">
+                    <or>
+                        <isset property="@{superior}.parameters.setup.failed"/>
+                        <isset property="@{superior}.parameters.setup.skipped"/>
+                    </or>
+                </condition>
+            </sequential>
+            </for>
+            <if>
+                <isset property="@{suite}.has.failed.superior"/>
+            <then>
+                <property name="@{suite}.parameters.setup.skipped" value="true"/>
+                <echo>
+--------
+WARNING: Suite '@{suite}' won't be set up as some of its superior
+-------- dependency suites:
+            ${@{suite}.parameters.depends}
+         failed to set up.
+</echo>
+            </then>
+            <else>
+                <call-to-adaptor suite="@{suite}" call="setup-suite"/>
+            </else>
+            </if>
+        </sequential>
+        </for>
+        <antcall target="check-status"/>
+    </target>
+
+    <!-- Run suites -->
+    <target name="run-suites" depends="init-suites">
+        <for list="${test.suites.names.list}" param="suite">
+        <sequential>
+            <log message="Run of '@{suite}' Test Suite."/>
+            <if>
+                <!-- check for setup failure -->
+                <or>
+                    <isset property="@{suite}.parameters.setup.failed"/>
+                    <isset property="@{suite}.parameters.setup.skipped"/>
+                </or>
+            <then>
+                <echo>
+--------
+WARNING: Suite '@{suite}' won't be launched because its setup failed.
+--------
+</echo>
+            </then>
+            <else>
+                <!-- check for the failures of the superior suites -->
+                <for list="${@{suite}.parameters.depends}" param="superior">
+                <sequential>
+                    <log message="Check for failure of @{superior} = ${@{superior}.parameters.run.failed}"/>
+                    <condition property="@{suite}.has.failed.superior">
+                        <or>
+                            <isset property="@{superior}.parameters.run.failed"/>
+                            <isset property="@{superior}.parameters.run.skipped"/>
+                        </or>
+                    </condition>
+                </sequential>
+                </for>
+                <if>
+                    <isset property="@{suite}.has.failed.superior"/>
+                <then>
+                    <property name="@{suite}.parameters.run.skipped" value="true"/>
+                    <echo>
+--------
+WARNING: Suite '@{suite}' won't be launched as some of its superior
+-------- dependency suites:
+            ${@{suite}.parameters.depends}
+         failed.
+</echo>
+                </then>
+                <else>
+                    <call-to-adaptor suite="@{suite}" call="run-suite"/>
+                </else>
+                </if>
+            </else>
+            </if>
+        </sequential>
+        </for>
+        <antcall target="check-status"/>
+    </target>
+
+    <macrodef name="call-to-adaptor">
+        <attribute name="suite"/>
+        <attribute name="call"/>
+        <sequential>
+            <!-- create the file for passing the values of shared properties 
+                 (they are starting with ${suite}. prefix ) -->
+            <tempfile destdir="${temp.files.dir}"
+                      property="tmp.result.file"/>
+
+            <ant dir="${adaptors.dir}/@{suite}"
+                 antfile="${scripts.dir}/exec-adaptor.xml"
+                 target="@{call}"
+                 inheritAll="true">
+                <property name="suite.name" value="@{suite}"/>
+                <property name="suite.adaptor.dir" location="${adaptors.dir}/@{suite}"/>
+                <property name="result.file.location" value="${tmp.result.file}"/>
+                <!-- pass the set of all of the parameters needed to be known 
+                     by @{suite} -->
+                <propertyset refid="@{suite}.parameters.id"/>
+            </ant>
+
+            <!-- import resulting suite's parameter values -->
+            <var file="${tmp.result.file}"/>
+
+            <!-- Resolve names depending on suite's shared parameters -->
+            <resolve-parameters file="${tmp.result.file}"/>
+            
+            <!-- remove the temporary objects -->
+            <delete file="${tmp.result.file}" quiet="true" verbose="false"/>
+            <var name="tmp.result.file" unset="true"/>
+        </sequential>
+    </macrodef>
+
+    <!-- Resolve the values of the parameters depending 
+         on internal adaptor's properties -->
+    <macrodef name="resolve-parameters">
+        <!-- resolve for all suites by default -->
+        <attribute name="suite" default="[^\.]*"/>
+        <!-- helper file used for names resolution -->
+        <attribute name="file"/>
+        <sequential>
+            <!-- save -->
+            <save-parameters file="@{file}" suite="@{suite}"/>
+            <!-- load -->
+            <var file="@{file}"/>
+            <!-- == reload :) -->
+        </sequential>
+    </macrodef>
+
+    <!-- Save the values of the parameters -->
+    <macrodef name="save-parameters">
+        <!-- save for specified suite -->
+        <attribute name="suite" default="[^\.]*"/>
+        <!-- file where parameters will be saved -->
+        <attribute name="file"/>
+        <sequential>
+            <echoproperties destfile="@{file}">
+                <propertyset>
+                    <propertyref regex="@{suite}\.parameters\."/>
+                </propertyset>
+            </echoproperties>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="print-parameters">
+        <attribute name="suite" default="[^\.]*"/>
+        <sequential>
+            <log message="====== Parameters of @{suite} =========="/>
+            <propertyselector 
+                property="tmp.params.list"
+                delimiter=","
+                match="@{suite}\.parameters\..*"
+                override="true"
+            />
+            <sortlist 
+                property="tmp.sorted.list"
+                value="${tmp.params.list}"
+                delimiter=","
+                override="true"
+            />
+            <for list="${tmp.sorted.list}" param="param">
+                <sequential>
+                    <log message="@{param}=${@{param}}"/>
+                </sequential>
+            </for>
+        </sequential>
+    </macrodef>
+
+    <target name="reorder-suites" depends="define-tasks, load-suites-parameters">
+        <tempfile destdir="${temp.files.dir}"
+                  property="tmp.sort.suites.file"/>
+        <!-- create temporary file used for ordering -->
+        <touch file="${tmp.sort.suites.file}"/>
+        <!-- the list to work over -->
+        <var name="tmp.list" value="${test.suites.names.list}"/>
+        <!-- remove the dependencies on unselected suites -->
+        <for list="${tmp.list}" param="suite">
+            <sequential>
+                <remove-unselected 
+                    suite="@{suite}" 
+                    selected.list="${tmp.list}"
+                    depends.list="${@{suite}.parameters.depends}"
+                    property="tmp.@{suite}.depends"
+                />
+                <!-- replace the suite parameter value -->
+                <var name="@{suite}.parameters.depends" 
+                     value="${tmp.@{suite}.depends}"/>
+            </sequential>
+        </for>
+
+        <for list="${tmp.list}" param="tmp">
+            <sequential>
+                <!-- place independent suites to the ordering file 
+                     and remove from dependent suites list (tmp.list) -->
+                <for list="${tmp.list}" param="suite">
+                    <sequential>
+                        <if>
+                            <length string="${tmp.@{suite}.depends}" 
+                                    length="0"/>
+                        <then>
+                            <echo file="${tmp.sort.suites.file}" 
+                                  append="true">
+                                  @{suite}=</echo>
+                            <!-- remove from dependent suites list -->
+                            <propertyregex 
+                                    property="tmp.list"
+                                    override="yes"
+                                    input="${tmp.list}"
+                                    regexp="\b@{suite}\b,*" replace=""
+                                    defaultValue="${tmp.list}"/>
+                        </then>
+                        </if>
+                    </sequential>
+                </for>
+                <!-- Remove non-selected dependencies -->
+                <for list="${tmp.list}" param="suite">
+                    <sequential>
+                        <remove-unselected 
+                            suite="@{suite}" 
+                            selected.list="${tmp.list}"
+                            depends.list="${tmp.@{suite}.depends}"
+                            property="tmp.@{suite}.depends"
+                        />
+                    </sequential>
+                </for>
+            </sequential>
+        </for>
+        <!-- unset temporary properties -->
+        <var name="tmp.list" unset="true"/>
+        <for list="${test.suites.names.list}" param="suite">
+            <sequential>
+                <var name="tmp.@{suite}.depends" unset="true"/>
+            </sequential>
+        </for>
+        <!-- do sort suite names -->
+        <sortlist property="test.suites.names.list" 
+                  override="yes"
+                  value="${test.suites.names.list}"
+                  orderPropertyFile="${tmp.sort.suites.file}">
+        </sortlist>
+        <log message="Sorted List of Test Suites: ${test.suites.names.list}"/>
+        <delete file="${tmp.sort.suites.file}" quiet="true" verbose="false"/>
+    </target>
+
+    <!-- removes temporal properties (starting with tmp. prefix ) -->
+    <target name="-delete-temporal-properties">
+        <propertyselector 
+            property="temp.pack.list"
+            override="true"
+            delimiter=","
+            match="^tmp\..*"
+        />
+        <for list="${temp.pack.list}" param="temp">
+            <sequential>
+                <var name="@{param}" unset="true"/>
+            </sequential>
+        </for>
+    </target>
+
+    <macrodef name="remove-unselected">
+        <attribute name="suite"/>
+        <attribute name="selected.list"/>
+        <attribute name="depends.list"/>
+        <attribute name="property"/>
+        <sequential>
+            <var name="@{property}" value=""/>
+            <for list="@{depends.list}" param="depends">
+                <sequential>
+                    <if>
+                        <contains string=",@{selected.list}," substring=",@{depends},"/>
+                    <then>
+                        <var name="@{property}" value="${@{property}},@{depends}"/>
+                        <!-- echo>    dependency '@{depends}' selected to run</echo-->
+                    </then>
+                    </if>
+                </sequential>
+            </for>
+            <!-- remove leading coma -->
+            <propertyregex 
+                    property="@{property}" 
+                    override="yes"
+                    input="${@{property}}" 
+                    regexp="^,*" replace=""
+                    defaultValue="${@{property}}"/>
+        </sequential>
+    </macrodef>
+
+    <!-- check execution status -->
+    <target name="check-status">
+        <for list="${test.suites.names.list}" param="suite">
+        <sequential>
+            <if>
+                <!-- check for setup failure -->
+                <isset property="@{suite}.parameters.setup.failed"/>
+            <then>
+                <property name="has.failure" value="true"/>
+                <echo>
+------
+ERROR: Setup of Test Suite '@{suite}' FAILED.
+------
+</echo>
+            </then>
+            </if>
+            <if>
+                <!-- check for setup failure -->
+                <isset property="@{suite}.parameters.setup.skipped"/>
+            <then>
+                <property name="has.failure" value="true"/>
+                <echo>
+--------
+WARNING: Setup of Test Suite '@{suite}' SKIPPED.
+--------
+</echo>
+            </then>
+            </if>
+            <if>
+                <!-- check for setup failure -->
+                <isset property="@{suite}.parameters.run.skipped"/>
+            <then>
+                <property name="has.failure" value="true"/>
+                <echo>
+--------
+WARNING: Execution of Test Suite '@{suite}' SKIPPED.
+--------
+</echo>
+            </then>
+            </if>
+            <if>
+                <!-- check for setup failure -->
+                <isset property="@{suite}.parameters.run.failed"/>
+            <then>
+                <property name="has.failure" value="true"/>
+                <echo>
+------
+ERROR: Execution of Test Suite '@{suite}' FAILED.
+------
+</echo>
+            </then>
+            </if>
+        </sequential>
+        </for>
+        <fail message="There are Test Suites failures" if="has.failure"/>
+    </target>
+
+    <!-- removes svn locks leaved after unsuccessful checkout or update-->
+    <macrodef name="svn-cleanup">
+        <attribute name="trunk"/>
+        <sequential>
+            <delete quiet="true" verbose="false">
+                <fileset dir="@{trunk}" defaultexcludes="no" includes="**/.svn/lock"/>
+            </delete>
+        </sequential>
+    </macrodef>
+
+    <!-- does svn checkout -->
+    <macrodef name="svn-co">
+        <attribute name="url"/>
+        <attribute name="trunk"/>
+        <sequential>
+            <svn-cleanup trunk="@{trunk}"/>
+            <exec executable="svn" dir="@{trunk}" failonerror="true">
+                <arg line="co @{url} @{trunk}"/>
+            </exec>
+        </sequential>
+    </macrodef>
+
+    <!-- does svn update of BT workspace -->
+    <macrodef name="svn-update-bt">
+        <attribute name="path"/>
+        <sequential>
+            <!-- svn-cleanup trunk="@{trunk}"/>
+            <exec executable="svn" dir="@{trunk}" failonerror="true">
+                <arg line="up @{url} @{trunk}"/>
+            </exec -->
+        </sequential>
+    </macrodef>
+
+    <!-- macrodefinition checking the property pointing to the file -->
+    <macrodef name="check-file-pointer">
+        <attribute name="property"/>
+        <attribute name="type" default="file"/>
+        <sequential>
+            <echo>Check for @{property} pointing to '${@{property}}' file</echo>
+            <fail>
+                <condition>
+                    <not>
+                        <isset property="@{property}"/>
+                    </not>
+                </condition>
+                &nullFilePointerMessage;
+            </fail>
+            <fail>
+                <condition>
+                    <not>
+                        <available file="${@{property}}" type="@{type}"/>
+                    </not>
+                </condition>
+                &unexistingFilePointerMessage;
+            </fail>
+            <echo message="ok"/>
+        </sequential>
+    </macrodef>
+
+    <macrodef name="log">
+        <attribute name="message"/>
+        <sequential>
+            <if>
+                <istrue value="${framework.parameters.optional.dolog}"/>
+            <then>
+                <echo>[${ant.project.name}]: @{message}</echo>
+            </then>
+            </if>
+        </sequential>
+    </macrodef>
+</project>
+

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/framework.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/local.properties.template
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/local.properties.template?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/local.properties.template (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/local.properties.template Mon Apr 23 22:30:55 2007
@@ -0,0 +1,9 @@
+# Do you want to sent email notifications and to where? and from whom?
+#
+# framework.parameters.usemail=some.smtp.host
+# framework.parameters.usemail.to=some@mail.address.net
+# framework.parameters.usemail.from=me@some.host
+
+# Do you want to see framework execution log?
+framework.parameters.options.dolog=false
+

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/local.properties.template
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/parameters.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/parameters.xml?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/parameters.xml (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/parameters.xml Mon Apr 23 22:30:55 2007
@@ -0,0 +1,31 @@
+<parameters>
+    <required/>
+
+    <!-- optional framework preferences -->
+    <optional>
+        <dolog value="false" description="Do you want to see Framework execution log?"/>
+    </optional>
+    
+    <cc doclean="false" description="Do clean working CC directory before execution?"/>
+    <cc webport="8080" description="The port on which CC will make its web publishing"/>
+    <cc jmxport="8000" description="The port for CC's JMX console."/>
+
+    <external>
+        <ant-contrib
+            jar="ant-contrib-1.0b3.jar"
+            url="http://kent.dl.sourceforge.net/sourceforge/ant-contrib/ant-contrib-1.0b3-bin.zip"
+            md5="c5a75fc28cbc52f09bd43b5506978601"
+        />
+        <junit
+            url="http://mirrors.ibiblio.org/pub/mirrors/maven2/junit/junit/3.8.2/junit-3.8.2.jar"
+            md5="28e7eb9eeefe31a657c68755bfccc541"
+        />
+        <cc
+            url="http://downloads.sourceforge.net/cruisecontrol/cruisecontrol-bin-2.6.1.zip"
+            md5="1ea23663d90cc7d59ce6c6b8fbe79c95"
+            dir="cruisecontrol-bin-2.6.1"
+            inc="*/lib/**,*/webapps/**"
+        />
+    </external>
+</parameters>
+

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/parameters.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-config-template.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-config-template.xml?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-config-template.xml (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-config-template.xml Mon Apr 23 22:30:55 2007
@@ -0,0 +1,10 @@
+<cruisecontrol>
+    <!-- root dir of the BT Infra -->
+    <property name="root.dir" value="@BT.ROOTDIR@"/>
+    <!-- global properties of the BT Infra -->
+    <property name="framework.properties.location" value="@BT.PROPERTIES@"/>
+    <!-- import framework properties -->
+    <property file="${framework.properties.location}"/>
+    
+    <!-- test suites selected for execution -->@PROJECT@
+</cruisecontrol>

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-config-template.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-project-template.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-project-template.xml?view=auto&rev=531732
==============================================================================
--- harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-project-template.xml (added)
+++ harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-project-template.xml Mon Apr 23 22:30:55 2007
@@ -0,0 +1,62 @@
+<cruisecontrol>
+
+    <!-- Keep this tag if you want to see any parameter value accessible 
+         from adaptor.xml here -->
+    <!-- @BT.PARAMETERS.INCLUDE@ -->
+    
+    <!-- Tag resolved to the name of 
+         the test suite this config is related to. -->
+    <project name="@BT.PROJECT@" buildafterfailed="false">
+
+        <listeners>
+            <!-- Resolved to <currentbuildstatuslistener file="${logs.dir}/...">
+                 Should be here if there are any suites depending
+                 on run status of this suite -->
+            <!-- @BT.LISTENER@ -->
+        </listeners>
+
+        <bootstrappers>
+            <!-- Resolved to 
+                    <svnbootstrapper> 
+                 if we use SVN for sources, i.e. 
+                    ${suite.name}.parameters.cc.usesvn="${sources.location}"
+                 is set -->
+            <!-- @BT.BOOTSTRAPPER@ -->
+        </bootstrappers>
+
+        <modificationset quietperiod="60">
+            <!-- Tag Resolution Rules: 
+                - in case of defined SVN (@{suite.name}.parameters.cc.usesvn),
+                  resolved to
+                    <svn LocalWorkingCopy="${path.to.local.svn.repository}"/>
+                - in case of defined trigger (@{suite.name}.parameters.cc.trigger),
+                  resolved to
+                    <filesystem folder="${path.to.trigger.file}"
+                - for any dependency it is resolved to
+                    <buildstatus logdir='${path.to.log.for.some.suite}'/>
+                  if the dependency uses svn, it is aslo resolved to
+                    <svn localWorkingCopy=../>
+                - in any case it is additionally resolved to
+                    <forceonly/>
+            -->
+            <!-- @BT.MODIFICATIONSET@ -->
+        </modificationset>
+
+        <schedule interval="300">
+            <!-- This tag MUST be present!
+                 It makes correct call to adaptor's run target -->
+            <!-- @BT.ADAPTORCALL@ -->
+        </schedule>
+
+        <log>
+            <!-- @BT.TEST.RESULTS@ -->
+        </log>
+
+        <publishers>
+            <!-- Keep it if you want to use custom ant publishers
+                 specified for test suite by cc.publisher parameter -->
+            <!-- @BT.PUBLISHER@ -->
+        </publishers>
+
+    </project>
+</cruisecontrol>

Propchange: harmony/enhanced/buildtest/branches/2.0/scripts/templates/cc-project-template.xml
------------------------------------------------------------------------------
    svn:eol-style = native