|
89 | 89 | cat $(rlocation io_bazel/src/test/shell/bazel/testdata/jdk_http_archives) >> WORKSPACE
|
90 | 90 | }
|
91 | 91 |
|
| 92 | +# Returns 0 if gcov is not installed or if a version before 7.0 was found. |
| 93 | +# Returns 1 otherwise. |
| 94 | +function is_gcov_missing_or_wrong_version() { |
| 95 | + local -r gcov_location=$(which gcov) |
| 96 | + if [[ ! -x ${gcov_location:-/usr/bin/gcov} ]]; then |
| 97 | + echo "gcov not installed." |
| 98 | + return 0 |
| 99 | + fi |
| 100 | + |
| 101 | + "$gcov_location" -version | grep "LLVM" && \ |
| 102 | + echo "gcov LLVM version not supported." && return 0 |
| 103 | + # gcov -v | grep "gcov" outputs a line that looks like this: |
| 104 | + # gcov (Debian 7.3.0-5) 7.3.0 |
| 105 | + local gcov_version="$(gcov -v | grep "gcov" | cut -d " " -f 4 | cut -d "." -f 1)" |
| 106 | + [ "$gcov_version" -lt 7 ] \ |
| 107 | + && echo "gcov versions before 7.0 is not supported." && return 0 |
| 108 | + return 1 |
| 109 | +} |
| 110 | + |
92 | 111 | # Asserts if the given expected coverage result is included in the given output
|
93 | 112 | # file.
|
94 | 113 | #
|
@@ -990,4 +1009,138 @@ BRH:5"
|
990 | 1009 | assert_coverage_result "$expected_result" "$coverage_file_path"
|
991 | 1010 | }
|
992 | 1011 |
|
| 1012 | +function test_java_test_coverage_cc_binary() { |
| 1013 | + if is_gcov_missing_or_wrong_version; then |
| 1014 | + echo "Skipping test." && return |
| 1015 | + fi |
| 1016 | + |
| 1017 | + ########### Setup source files and BUILD file ########### |
| 1018 | + cat <<EOF > BUILD |
| 1019 | +java_test( |
| 1020 | + name = "NumJava", |
| 1021 | + srcs = ["NumJava.java"], |
| 1022 | + data = ["//examples/cpp:num-world"], |
| 1023 | + main_class = "main.NumJava", |
| 1024 | + use_testrunner = False, |
| 1025 | +) |
| 1026 | +EOF |
| 1027 | + cat <<EOF > NumJava.java |
| 1028 | +package main; |
| 1029 | +
|
| 1030 | +public class NumJava { |
| 1031 | + public static void main(String[] args) throws java.io.IOException { |
| 1032 | + Runtime.getRuntime().exec("examples/cpp/num-world"); |
| 1033 | + } |
| 1034 | +} |
| 1035 | +EOF |
| 1036 | + |
| 1037 | + mkdir -p examples/cpp |
| 1038 | + |
| 1039 | + cat <<EOF > examples/cpp/BUILD |
| 1040 | +package(default_visibility = ["//visibility:public"]) |
| 1041 | +
|
| 1042 | +cc_binary( |
| 1043 | + name = "num-world", |
| 1044 | + srcs = ["num-world.cc"], |
| 1045 | + deps = [":num-lib"], |
| 1046 | +) |
| 1047 | +
|
| 1048 | +cc_library( |
| 1049 | + name = "num-lib", |
| 1050 | + srcs = ["num-lib.cc"], |
| 1051 | + hdrs = ["num-lib.h"] |
| 1052 | +) |
| 1053 | +EOF |
| 1054 | + |
| 1055 | + cat <<EOF > examples/cpp/num-world.cc |
| 1056 | +#include "examples/cpp/num-lib.h" |
| 1057 | +
|
| 1058 | +using num::NumLib; |
| 1059 | +
|
| 1060 | +int main(int argc, char** argv) { |
| 1061 | + NumLib lib(30); |
| 1062 | + int value = 42; |
| 1063 | + if (argc > 1) { |
| 1064 | + value = 43; |
| 1065 | + } |
| 1066 | + lib.add_number(value); |
| 1067 | + return 0; |
| 1068 | +} |
| 1069 | +EOF |
| 1070 | + |
| 1071 | + cat <<EOF > examples/cpp/num-lib.h |
| 1072 | +#ifndef EXAMPLES_CPP_NUM_LIB_H_ |
| 1073 | +#define EXAMPLES_CPP_NUM_LIB_H_ |
| 1074 | +
|
| 1075 | +namespace num { |
| 1076 | +
|
| 1077 | +class NumLib { |
| 1078 | + public: |
| 1079 | + explicit NumLib(int number); |
| 1080 | +
|
| 1081 | + int add_number(int value); |
| 1082 | +
|
| 1083 | + private: |
| 1084 | + int number_; |
| 1085 | +}; |
| 1086 | +
|
| 1087 | +} // namespace num |
| 1088 | +
|
| 1089 | +#endif // EXAMPLES_CPP_NUM_LIB_H_ |
| 1090 | +EOF |
| 1091 | + |
| 1092 | + cat <<EOF > examples/cpp/num-lib.cc |
| 1093 | +#include "examples/cpp/num-lib.h" |
| 1094 | +
|
| 1095 | +namespace num { |
| 1096 | +
|
| 1097 | +NumLib::NumLib(int number) : number_(number) { |
| 1098 | +} |
| 1099 | +
|
| 1100 | +int NumLib::add_number(int value) { |
| 1101 | + return number_ + value; |
| 1102 | +} |
| 1103 | +
|
| 1104 | +} // namespace num |
| 1105 | +EOF |
| 1106 | + |
| 1107 | + ########### Run bazel coverage ########### |
| 1108 | + bazel coverage --test_output=all \ |
| 1109 | + //:NumJava &>$TEST_log || fail "Coverage for //:NumJava failed" |
| 1110 | + |
| 1111 | + ########### Assert coverage results. ########### |
| 1112 | + local coverage_file_path="$( get_coverage_file_path_from_test_log )" |
| 1113 | + local expected_result_num_lib="SF:examples/cpp/num-lib.cc |
| 1114 | +FN:8,_ZN3num6NumLib10add_numberEi |
| 1115 | +FN:5,_ZN3num6NumLibC2Ei |
| 1116 | +FNDA:1,_ZN3num6NumLib10add_numberEi |
| 1117 | +FNDA:1,_ZN3num6NumLibC2Ei |
| 1118 | +FNF:2 |
| 1119 | +FNH:2 |
| 1120 | +DA:5,1 |
| 1121 | +DA:6,1 |
| 1122 | +DA:8,1 |
| 1123 | +DA:9,1 |
| 1124 | +LH:4 |
| 1125 | +LF:4 |
| 1126 | +end_of_record" |
| 1127 | + assert_coverage_result "$expected_result_num_lib" "$coverage_file_path" |
| 1128 | + local coverage_result_num_lib_header="SF:examples/cpp/num-world.cc |
| 1129 | +FN:5,main |
| 1130 | +FNDA:1,main |
| 1131 | +FNF:1 |
| 1132 | +FNH:1 |
| 1133 | +DA:5,1 |
| 1134 | +DA:6,1 |
| 1135 | +DA:7,1 |
| 1136 | +DA:8,1 |
| 1137 | +DA:9,0 |
| 1138 | +DA:11,1 |
| 1139 | +DA:12,1 |
| 1140 | +LH:6 |
| 1141 | +LF:7 |
| 1142 | +end_of_record" |
| 1143 | + assert_coverage_result "$coverage_result_num_lib_header" "$coverage_file_path" |
| 1144 | +} |
| 1145 | + |
993 | 1146 | run_suite "test tests"
|
0 commit comments