blob: b7f3f749bb6cd8c30caf2a4a2d708961556b27bc [file] [log] [blame]
#!/usr/bin/env bash
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed 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.
###
### Scan this directory for any testng classes
### Outputs a testng.xml formatted list of classes
###
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
test_property_files="$(find "$DIR" -name TEST.properties)"
function debug_print {
if [[ $DEBUG == "true" ]]; then
echo "DEBUG:" "$@" >& 2
fi
}
function error_print {
echo "ERROR:" "$@" >& 2
exit 1
}
function class_name_from_class_file {
# Reads a list of .java files from stdin, spits out their fully qualified class name.
local file_name
local package_string
local package_name
local class_name
while read file_name; do
package_string="$(grep "package" "$file_name")"
[[ $? -ne 0 ]] && error_print "File $file_name missing package declaration."
debug_print "File: $file_name"
# Parse the package name by looking inside of the file.
package_name=${package_string#package[[:space:]]*} # remove package followed by any spaces
package_name=${package_name%;} # remove semicolon at the end
# Assumes class name == file name. Almost always the case.
class_name="$(basename "$file_name")"
class_name="${class_name%.java}" # remove ".java" from the end
debug_print "Package: <$package_name>"
echo "$package_name.$class_name"
done
}
function list_classes_in_dir {
find "$1" -name "*.java" | class_name_from_class_file
}
function list_all_classes {
local file
for file in $test_property_files; do
debug_print "File: $file"
if ! grep "TestNG.dirs" "$file" > /dev/null; then
continue
fi
debug_print "Has TestNG files"
list_classes_in_dir "$(dirname "$file")"
done
}
function class_name_to_testng_entry {
local class_name
while read class_name; do
echo "<class name=\"$class_name\" />"
done
}
list_all_classes | class_name_to_testng_entry