Skip to content

Commit

Permalink
Add integration tests for processing defines
Browse files Browse the repository at this point in the history
Note for now we only analyze each file for itself. Defines specified in
header A which is then included in header B do not yet influence the
defines processing in header B.
  • Loading branch information
martis42 committed Apr 16, 2023
1 parent 5103138 commit 4316900
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 0 deletions.
17 changes: 17 additions & 0 deletions test/aspect/defines/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,20 @@ cc_library(
deps = ["//test/aspect/defines/lib:a"],
)

cc_library(
name = "defines_from_bazel_target",
hdrs = ["defines_from_bazel_target.h"],
copts = ["-DSOME_COPT 42"],
defines = ["SOME_DEFINE"],
local_defines = ["LOCAL_DEFINE"],
deps = ["//test/aspect/defines/lib:a"],
)

cc_library(
name = "transitive_defines_from_bazel_target",
hdrs = ["transitive_defines_from_bazel_target.h"],
deps = [
"//test/aspect/defines/lib:a",
"//test/aspect/defines/support:transitive_define",
],
)
11 changes: 11 additions & 0 deletions test/aspect/defines/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Defines can influence which include statements are relevant.

These tests concentrate on parsing single files based on defines:

- specified in the parsed file itself
- coming from the C/C++ toolchain
- defined by the Bazel target attributes `defines`, `local_defines` or `cops`

Defines can also be imported into a file via an included header which specifies a define.
This use case is not yet supported.
We might add it at a later stage.
17 changes: 17 additions & 0 deletions test/aspect/defines/defines_from_bazel_target.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#ifdef SOME_DEFINE
#include "test/aspect/defines/lib/a.h"
#else
#include "test/aspect/defines/lib/b.h"
#endif

#ifdef LOCAL_DEFINE
#include "test/aspect/defines/lib/a.h"
#else
#include "test/aspect/defines/lib/b.h"
#endif

#if SOME_COPT > 40
#include "test/aspect/defines/lib/a.h"
#else
#include "test/aspect/defines/lib/b.h"
#endif
7 changes: 7 additions & 0 deletions test/aspect/defines/support/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
cc_library(
name = "transitive_define",
copts = ["-DLOCAL_COPT"], # should not influence other targets
defines = ["TRANSITIVE_DEFINE"],
local_defines = ["LOCAL_DEFINE"], # should not influence other targets
visibility = ["//test/aspect/defines:__pkg__"],
)
18 changes: 18 additions & 0 deletions test/aspect/defines/transitive_defines_from_bazel_target.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Define introduced through target on which we depend. The target uses the attribute 'defines' which is propagated to
// all users of the target.
#ifdef TRANSITIVE_DEFINE
#include "test/aspect/defines/lib/a.h"
#else
#include "test/aspect/defines/lib/b.h"
#endif

// The following defines shall never be active as they are set though Bazel target attributes 'copts' and
// 'local_defines' which should not leak to users of the target

#ifdef LOCAL_DEFINE
#include "test/aspect/defines/lib/b.h"
#endif

#ifdef LOCAL_COPT
#include "test/aspect/defines/lib/b.h"
#endif
16 changes: 16 additions & 0 deletions test/aspect/execute_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,22 @@
),
expected=ExpectedResult(success=True),
),
TestCase(
name="defines_from_bazel_target",
cmd=TestCmd(
target="//test/aspect/defines:defines_from_bazel_target",
aspect=DEFAULT_ASPECT,
),
expected=ExpectedResult(success=True),
),
TestCase(
name="transitive_defines_from_bazel_target",
cmd=TestCmd(
target="//test/aspect/defines:transitive_defines_from_bazel_target",
aspect=DEFAULT_ASPECT,
),
expected=ExpectedResult(success=True),
),
]

if __name__ == "__main__":
Expand Down

0 comments on commit 4316900

Please sign in to comment.