| """Tests for bad dependencies between C++ libraries.""" |
| |
| load("@rules_testing//lib:analysis_test.bzl", "test_suite") |
| load("@rules_testing//lib:truth.bzl", "matching") |
| load("@rules_testing//lib:util.bzl", "util") |
| load("//cc:cc_library.bzl", "cc_library") |
| load("//tests/cc/testutil:cc_analysis_test.bzl", "cc_analysis_test") |
| |
| def test_reject_unknown_source_file(name, **kwargs): |
| util.helper_target( |
| rule = cc_library, |
| name = name + "/foo", |
| srcs = ["unknown.oops"], |
| ) |
| |
| cc_analysis_test( |
| name = name, |
| impl = test_reject_unknown_source_file_impl, |
| target = name + "/foo", |
| expect_failure = True, |
| **kwargs |
| ) |
| |
| def test_reject_unknown_source_file_impl(env, target): |
| env.expect.that_target(target).failures().contains_predicate( |
| matching.str_matches("source file '*:unknown.oops' is misplaced here"), |
| ) |
| |
| def test_reject_bad_generated_file(name, **kwargs): |
| util.helper_target( |
| rule = native.genrule, |
| name = name + "/gen", |
| outs = [name + "/bad.oops"], |
| cmd = "touch $@", |
| ) |
| |
| util.helper_target( |
| rule = cc_library, |
| name = name + "/foo", |
| srcs = [name + "/gen"], |
| ) |
| |
| cc_analysis_test( |
| name = name, |
| impl = test_reject_bad_generated_file_impl, |
| target = name + "/foo", |
| expect_failure = True, |
| **kwargs |
| ) |
| |
| def test_reject_bad_generated_file_impl(env, target): |
| env.expect.that_target(target).failures().contains_predicate( |
| matching.str_matches("attribute srcs: '*/gen' does not produce any cc_library srcs files"), |
| ) |
| |
| def test_accept_mixed_generated_files(name, **kwargs): |
| util.helper_target( |
| rule = native.genrule, |
| name = name + "/gen", |
| outs = [ |
| name + "/bad.oops", |
| name + "/good.cc", |
| ], |
| cmd = "touch $(OUTS)", |
| ) |
| |
| util.helper_target( |
| rule = cc_library, |
| name = name + "/foo", |
| srcs = [name + "/gen"], |
| ) |
| |
| cc_analysis_test( |
| name = name, |
| impl = test_accept_mixed_generated_files_impl, |
| target = name + "/foo", |
| **kwargs |
| ) |
| |
| def test_accept_mixed_generated_files_impl(env, target): |
| env.expect.that_target(target).action_named("CppCompile").inputs().contains( |
| "{package}/{test_name}/good.cc", |
| ) |
| env.expect.that_target(target).action_named("CppCompile").inputs().not_contains( |
| "{package}/{test_name}/bad.oops", |
| ) |
| |
| def cc_bad_dependencies_tests(name): |
| test_suite( |
| name = name, |
| tests = [ |
| test_reject_unknown_source_file, |
| test_reject_bad_generated_file, |
| test_accept_mixed_generated_files, |
| ], |
| ) |