1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 The Android Open Source Project 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage rust 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "testing" 19*333d2b36SAndroid Build Coastguard Worker 20*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 21*333d2b36SAndroid Build Coastguard Worker) 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Workerfunc TestClippy(t *testing.T) { 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Worker bp := ` 26*333d2b36SAndroid Build Coastguard Worker // foo uses the default value of clippy_lints 27*333d2b36SAndroid Build Coastguard Worker rust_library { 28*333d2b36SAndroid Build Coastguard Worker name: "libfoo", 29*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.rs"], 30*333d2b36SAndroid Build Coastguard Worker crate_name: "foo", 31*333d2b36SAndroid Build Coastguard Worker } 32*333d2b36SAndroid Build Coastguard Worker // bar forces the use of the "android" lint set 33*333d2b36SAndroid Build Coastguard Worker rust_library { 34*333d2b36SAndroid Build Coastguard Worker name: "libbar", 35*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.rs"], 36*333d2b36SAndroid Build Coastguard Worker crate_name: "bar", 37*333d2b36SAndroid Build Coastguard Worker clippy_lints: "android", 38*333d2b36SAndroid Build Coastguard Worker } 39*333d2b36SAndroid Build Coastguard Worker // foobar explicitly disable clippy 40*333d2b36SAndroid Build Coastguard Worker rust_library { 41*333d2b36SAndroid Build Coastguard Worker name: "libfoobar", 42*333d2b36SAndroid Build Coastguard Worker srcs: ["foo.rs"], 43*333d2b36SAndroid Build Coastguard Worker crate_name: "foobar", 44*333d2b36SAndroid Build Coastguard Worker clippy_lints: "none", 45*333d2b36SAndroid Build Coastguard Worker }` 46*333d2b36SAndroid Build Coastguard Worker 47*333d2b36SAndroid Build Coastguard Worker var clippyLintTests = []struct { 48*333d2b36SAndroid Build Coastguard Worker modulePath string 49*333d2b36SAndroid Build Coastguard Worker fooFlags string 50*333d2b36SAndroid Build Coastguard Worker }{ 51*333d2b36SAndroid Build Coastguard Worker {"", "${config.ClippyDefaultLints}"}, 52*333d2b36SAndroid Build Coastguard Worker {"external/", ""}, 53*333d2b36SAndroid Build Coastguard Worker {"hardware/", "${config.ClippyVendorLints}"}, 54*333d2b36SAndroid Build Coastguard Worker } 55*333d2b36SAndroid Build Coastguard Worker 56*333d2b36SAndroid Build Coastguard Worker for _, tc := range clippyLintTests { 57*333d2b36SAndroid Build Coastguard Worker t.Run("path="+tc.modulePath, func(t *testing.T) { 58*333d2b36SAndroid Build Coastguard Worker 59*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 60*333d2b36SAndroid Build Coastguard Worker prepareForRustTest, 61*333d2b36SAndroid Build Coastguard Worker // Test with the blueprint file in different directories. 62*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile(tc.modulePath+"Android.bp", bp), 63*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 64*333d2b36SAndroid Build Coastguard Worker 65*333d2b36SAndroid Build Coastguard Worker r := result.ModuleForTests("libfoo", "android_arm64_armv8-a_dylib").MaybeRule("clippy") 66*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "libfoo flags", tc.fooFlags, r.Args["clippyFlags"]) 67*333d2b36SAndroid Build Coastguard Worker 68*333d2b36SAndroid Build Coastguard Worker r = result.ModuleForTests("libbar", "android_arm64_armv8-a_dylib").MaybeRule("clippy") 69*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "libbar flags", "${config.ClippyDefaultLints}", r.Args["clippyFlags"]) 70*333d2b36SAndroid Build Coastguard Worker 71*333d2b36SAndroid Build Coastguard Worker r = result.ModuleForTests("libfoobar", "android_arm64_armv8-a_dylib").MaybeRule("clippy") 72*333d2b36SAndroid Build Coastguard Worker if r.Rule != nil { 73*333d2b36SAndroid Build Coastguard Worker t.Errorf("libfoobar is setup to use clippy when explicitly disabled: clippyFlags=%q", r.Args["clippyFlags"]) 74*333d2b36SAndroid Build Coastguard Worker } 75*333d2b36SAndroid Build Coastguard Worker }) 76*333d2b36SAndroid Build Coastguard Worker } 77*333d2b36SAndroid Build Coastguard Worker} 78