#!/bin/bash # # Copyright 2016 The Bazel Authors. All rights reserved. # # 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. # # output_filter_test.sh: a couple of end to end tests for the warning # filter functionality. # Load the test setup defined in the parent directory CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${CURRENT_DIR}/../integration_test_setup.sh" \ || { echo "integration_test_setup.sh not found!" >&2; exit 1; } function test_output_filter_cc() { # "test warning filter for C compilation" mkdir -p cc/main cat > cc/main/BUILD <cc/main/main.c < int main(void) { #warning("Through me you pass into the city of woe:") #warning("Through me you pass into eternal pain:") #warning("Through me among the people lost for aye.") printf("%s", "Hello, World!\n"); } EOF bazel clean bazel build cc/main:cc 2> stderr.txt cat stderr.txt grep "into eternal pain" stderr.txt || \ fail "No warning from C compilation" bazel clean bazel build --output_filter="dummy" cc/main:cc &> stderr.txt grep "into eternal pain" stderr.txt && \ fail "Warning given by C compilation although they are disabled" true } function test_output_filter_java() { # "test warning filter for Java compilation" mkdir -p java/main cat >java/main/BUILD <java/main/Main.java <java/hello_library/BUILD <java/hello_library/HelloLibrary.java <stderr.txt || fail "build failed" grep -q "has been deprecated" stderr.txt || fail "no deprecation warning" # check that we do get a deprecation warning if we select the target bazel clean bazel build --output_filter=java/main //java/main:main 2>stderr.txt || fail "build failed" grep -q "has been deprecated" stderr.txt || fail "no deprecation warning" # check that we do not get a deprecation warning if we select another target bazel clean bazel build --output_filter=java/hello_library //java/main:main 2>stderr.txt || fail "build failed" grep -q "has been deprecated" stderr.txt && fail "deprecation warning" true } function test_test_output_printed() { # "test that test output is printed if warnings are disabled" mkdir -p foo/bar cat >foo/bar/BUILD <foo/bar/test.sh < stderr.txt grep "PASS: //foo/bar:test" stderr.txt || fail "no PASSED message" } function test_output_filter_build() { # "test output filter for BUILD files" mkdir -p foo/bar cat >foo/bar/BUILD <stderr.txt || fail "build failed" grep -q "is unexpected here" stderr.txt \ || fail "no warning" # check that we do get a deprecation warning if we select the target bazel clean bazel build --output_filter=foo/bar:tomato //foo/bar:tomato 2>stderr.txt \ || fail "build failed" grep -q "is unexpected here" stderr.txt \ || fail "no warning" # check that we do not get a deprecation warning if we select another target bazel clean bazel build --output_filter=foo/bar/:red //foo/bar:tomato 2>stderr.txt \ || fail "build failed" grep -q "is unexpected here" stderr.txt \ && fail "warning" true } function test_output_filter_build_hostattribute() { # "test that output filter also applies to host attributes" # What do you get in bars? mkdir -p bar cat >bar/BUILD < bar/vodka # Check that we do get a deprecation warning bazel clean bazel build //bar:bloody_mary 2>stderr1.txt || fail "build failed" grep -q "is unexpected here" stderr1.txt \ || fail "no warning" # Check that the warning is disabled if we do not want to see it bazel clean bazel build //bar:bloody_mary --output_filter='nothing' 2>stderr2.txt \ || fail "build failed" grep -q "is unexpected here" stderr2.txt \ && fail "warning is not disabled" true } function test_output_filter_does_not_apply_to_test_output() { mkdir -p geflugel cat >geflugel/BUILD <geflugel/mockingbird.sh <geflugel/hummingbird.sh < $TEST_log \ && fail "expected tests to fail" expect_log "To kill -9 a mockingbird" expect_log "To kill -9 a hummingbird" } # TODO(mstaib): enable test after deprecation warnings work in bazel function disabled_test_filters_deprecated_targets() { init_test "test that deprecated target warnings are filtered" mkdir -p relativity ether cat > relativity/BUILD < ether/BUILD < $TEST_log || fail "Expected success" expect_log_once "WARNING:.*target '//relativity:relativity' depends on \ deprecated target '//ether:ether': Disproven." bazel build --nobuild --output_filter="^//pizza" \ //relativity &> $TEST_log || fail "Expected success" expect_not_log "WARNING:.*target '//relativity:relativity' depends on \ deprecated target '//ether:ether': Disproven." } run_suite "Warning Filter tests"