diff options
author | Sadaf Ebrahimi <sadafebrahimi@google.com> | 2022-11-11 23:35:38 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-11-11 23:35:38 +0000 |
commit | 40214b48188358a80b7478bfff21d4814dd9177c (patch) | |
tree | 77dc031614745bb406dbd90cea9a082a1b5cdd54 /compiler_wrapper/iwyu_flag_test.go | |
parent | a51582ad9cb50ec284f4718765bd5d31fa0069d4 (diff) | |
parent | 584b8e46d146a2bcfeffd64448a2d8e92904168d (diff) | |
download | toolchain-utils-40214b48188358a80b7478bfff21d4814dd9177c.tar.gz |
Upgrade toolchain-utils to 2c474af4f370b143032144aff1ff1985f789e20f am: 8b320f7173 am: d444309511 am: 584b8e46d1android-14.0.0_r45android-14.0.0_r44android-14.0.0_r43android-14.0.0_r42android-14.0.0_r41android-14.0.0_r40android-14.0.0_r39android-14.0.0_r38android-14.0.0_r27android-14.0.0_r26android-14.0.0_r25android-14.0.0_r24android-14.0.0_r23android-14.0.0_r22android-14.0.0_r21android-14.0.0_r20android-14.0.0_r19android-14.0.0_r18android-14.0.0_r17android-14.0.0_r16aml_rkp_341510000aml_rkp_341311000aml_rkp_341114000aml_rkp_341015010aml_rkp_341012000aml_hef_341717050aml_hef_341613000aml_hef_341512030aml_hef_341415040aml_hef_341311010aml_hef_341114030aml_cfg_341510000android14-qpr1-s2-releaseandroid14-qpr1-releaseandroid14-mainline-healthfitness-releaseandroid14-devandroid14-d2-s5-releaseandroid14-d2-s4-releaseandroid14-d2-s3-releaseandroid14-d2-s2-releaseandroid14-d2-s1-releaseandroid14-d2-release
Original change: https://android-review.googlesource.com/c/platform/external/toolchain-utils/+/2292563
Change-Id: Ida212764c332af8ba8ab8aaa62a7d2a007e3314e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'compiler_wrapper/iwyu_flag_test.go')
-rw-r--r-- | compiler_wrapper/iwyu_flag_test.go | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/compiler_wrapper/iwyu_flag_test.go b/compiler_wrapper/iwyu_flag_test.go new file mode 100644 index 00000000..76135944 --- /dev/null +++ b/compiler_wrapper/iwyu_flag_test.go @@ -0,0 +1,135 @@ +// Copyright 2022 The ChromiumOS Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package main + +import ( + "errors" + "io" + "strings" + "testing" +) + +func TestIWYUArgOrder(t *testing.T) { + withIWYUTestContext(t, func(ctx *testContext) { + ctx.cmdMock = func(cmd *command, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { + if ctx.cmdCount == 2 { + if err := verifyArgOrder(cmd, "-checks=.*", mainCc, "--", "-resource-dir=.*", mainCc, "--some_arg"); err != nil { + return err + } + } + return nil + } + ctx.must(callCompiler(ctx, ctx.cfg, + ctx.newCommand(clangX86_64, mainCc, "--some_arg"))) + if ctx.cmdCount < 2 { + t.Error("expected multiple calls.") + } + }) +} + +func TestIgnoreNonZeroExitCodeFromIWYU(t *testing.T) { + withIWYUTestContext(t, func(ctx *testContext) { + ctx.cmdMock = func(cmd *command, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { + if ctx.cmdCount == 2 { + return newExitCodeError(23) + } + return nil + } + ctx.must(callCompiler(ctx, ctx.cfg, + ctx.newCommand(clangX86_64, mainCc))) + stderr := ctx.stderrString() + if err := verifyNonInternalError(stderr, "include-what-you-use failed"); err != nil { + t.Error(err) + } + }) +} + +func TestReportGeneralErrorsFromIWYU(t *testing.T) { + withIWYUTestContext(t, func(ctx *testContext) { + ctx.cmdMock = func(cmd *command, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { + if ctx.cmdCount > 1 { + return errors.New("someerror") + } + return nil + } + stderr := ctx.mustFail(callCompiler(ctx, ctx.cfg, + ctx.newCommand(clangX86_64, mainCc))) + if err := verifyInternalError(stderr); err != nil { + t.Fatal(err) + } + if !strings.Contains(stderr, "someerror") { + t.Errorf("unexpected error. Got: %s", stderr) + } + }) +} + +func TestUseIWYUBasedOnFileExtension(t *testing.T) { + withIWYUTestContext(t, func(ctx *testContext) { + testData := []struct { + args []string + iwyu bool + }{ + {[]string{"main.cc"}, true}, + {[]string{"main.cc"}, true}, + {[]string{"main.C"}, true}, + {[]string{"main.cxx"}, true}, + {[]string{"main.c++"}, true}, + {[]string{"main.xy"}, false}, + {[]string{"-o", "main.cc"}, false}, + {[]string{}, false}, + } + for _, tt := range testData { + ctx.cmdCount = 0 + ctx.must(callCompiler(ctx, ctx.cfg, + ctx.newCommand(clangX86_64, tt.args...))) + if ctx.cmdCount > 1 && !tt.iwyu { + t.Errorf("expected a call to iwyu but got none for args %s", tt.args) + } + if ctx.cmdCount == 1 && tt.iwyu { + t.Errorf("expected no call to iwyu but got one for args %s", tt.args) + } + } + }) +} + +func TestIWYUFiltersIWYUFlags(t *testing.T) { + withIWYUTestContext(t, func(ctx *testContext) { + addedFlag := "--some_iwyu_flag=flag" + ctx.cmdMock = func(cmd *command, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { + switch ctx.cmdCount { + case 1: + if err := verifyPath(cmd, "usr/bin/clang"); err != nil { + t.Error(err) + } else if err := verifyArgCount(cmd, 0, addedFlag); err != nil { + t.Error(err) + } + return nil + case 2: + if err := verifyPath(cmd, "usr/bin/include-what-you-use"); err != nil { + t.Error(err) + } else if verifyArgCount(cmd, 1, addedFlag); err != nil { + t.Error(err) + } + return nil + default: + return nil + } + } + cmd := ctx.must(callCompiler(ctx, ctx.cfg, ctx.newCommand(clangX86_64, mainCc, "-iwyu-flag="+addedFlag))) + if ctx.cmdCount < 2 { + t.Errorf("expected multiple calls.") + } + if err := verifyPath(cmd, "usr/bin/clang"); err != nil { + t.Error(err) + } + }) +} + +func withIWYUTestContext(t *testing.T, work func(ctx *testContext)) { + withTestContext(t, func(ctx *testContext) { + ctx.env = []string{"WITH_IWYU=1"} + work(ctx) + }) +} |