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