| #!/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. |
| # |
| # Tests the proper checking of BUILD and BUILD.bazel files. |
| |
| # 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 write_rule { |
| name=$1 |
| shift |
| srcs="" |
| for src in "$@"; do |
| srcs="\"$src\", $srcs" |
| done |
| |
| cat <<EOF |
| genrule( |
| name = "$name", |
| srcs = [ |
| $srcs |
| ], |
| outs = ["$name.out"], |
| cmd = "echo $name > \$@", |
| visibility = ["//visibility:public"], |
| ) |
| EOF |
| } |
| |
| # Only a BUILD file is present: sees rules in BUILD. |
| function test_build_only { |
| create_new_workspace |
| write_rule build_only >> BUILD |
| |
| bazel build //:build_only >& $TEST_log || fail "build should succeed" |
| } |
| |
| # Only a BUILD.bazel file is present: sees rules in BUILD.bazel. |
| function test_build_bazel_only { |
| create_new_workspace |
| write_rule build_bazel_only >> BUILD.bazel |
| |
| bazel build //:build_bazel_only >& $TEST_log || fail "build should succeed" |
| } |
| |
| # BUILD and BUILD.bazel file is present: sees rules in BUILD.bazel. |
| function test_build_and_build_bazel { |
| create_new_workspace |
| write_rule build_only >> BUILD |
| write_rule build_bazel_only >> BUILD.bazel |
| |
| bazel build //:build_bazel_only >& $TEST_log || fail "build should succeed" |
| # This rule doesn't actually exist. |
| bazel build //:build_only >& $TEST_log && fail "build shouldn't succeed" |
| expect_log "no such target '//:build_only'" |
| } |
| |
| function test_multiple_package_roots { |
| # Create a main workspace with a BUILD.bazel file. |
| create_new_workspace |
| write_rule build_bazel_only > BUILD.bazel |
| |
| # Create an alternate package path with a BUILD file. |
| local other_root=$TEST_TMPDIR/other_root/${WORKSPACE_NAME} |
| mkdir -p $other_root |
| write_rule build_only > $other_root/BUILD |
| |
| add_to_bazelrc "build --package_path $other_root:." |
| bazel build //:build_only >& $TEST_log || fail "build should succeed" |
| # This rule doesn't actually exist. |
| bazel build //:build_bazel_only >& $TEST_log && fail "build shouldn't succeed" |
| expect_log "no such target '//:build_bazel_only'" |
| } |
| |
| run_suite "build files tests" |
| |