1*333d2b36SAndroid Build Coastguard Workerpackage sh 2*333d2b36SAndroid Build Coastguard Worker 3*333d2b36SAndroid Build Coastguard Workerimport ( 4*333d2b36SAndroid Build Coastguard Worker "os" 5*333d2b36SAndroid Build Coastguard Worker "path/filepath" 6*333d2b36SAndroid Build Coastguard Worker "strconv" 7*333d2b36SAndroid Build Coastguard Worker "strings" 8*333d2b36SAndroid Build Coastguard Worker "testing" 9*333d2b36SAndroid Build Coastguard Worker 10*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 11*333d2b36SAndroid Build Coastguard Worker "android/soong/cc" 12*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 13*333d2b36SAndroid Build Coastguard Worker) 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) { 16*333d2b36SAndroid Build Coastguard Worker os.Exit(m.Run()) 17*333d2b36SAndroid Build Coastguard Worker} 18*333d2b36SAndroid Build Coastguard Worker 19*333d2b36SAndroid Build Coastguard Workervar prepareForShTest = android.GroupFixturePreparers( 20*333d2b36SAndroid Build Coastguard Worker cc.PrepareForTestWithCcBuildComponents, 21*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaDefaultModules, 22*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithShBuildComponents, 23*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 24*333d2b36SAndroid Build Coastguard Worker "test.sh": nil, 25*333d2b36SAndroid Build Coastguard Worker "testdata/data1": nil, 26*333d2b36SAndroid Build Coastguard Worker "testdata/sub/data2": nil, 27*333d2b36SAndroid Build Coastguard Worker }), 28*333d2b36SAndroid Build Coastguard Worker) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Worker// testShBinary runs tests using the prepareForShTest 31*333d2b36SAndroid Build Coastguard Worker// 32*333d2b36SAndroid Build Coastguard Worker// Do not add any new usages of this, instead use the prepareForShTest directly as it makes it much 33*333d2b36SAndroid Build Coastguard Worker// easier to customize the test behavior. 34*333d2b36SAndroid Build Coastguard Worker// 35*333d2b36SAndroid Build Coastguard Worker// If it is necessary to customize the behavior of an existing test that uses this then please first 36*333d2b36SAndroid Build Coastguard Worker// convert the test to using prepareForShTest first and then in a following change add the 37*333d2b36SAndroid Build Coastguard Worker// appropriate fixture preparers. Keeping the conversion change separate makes it easy to verify 38*333d2b36SAndroid Build Coastguard Worker// that it did not change the test behavior unexpectedly. 39*333d2b36SAndroid Build Coastguard Worker// 40*333d2b36SAndroid Build Coastguard Worker// deprecated 41*333d2b36SAndroid Build Coastguard Workerfunc testShBinary(t *testing.T, bp string) (*android.TestContext, android.Config) { 42*333d2b36SAndroid Build Coastguard Worker bp = bp + cc.GatherRequiredDepsForTest(android.Android) 43*333d2b36SAndroid Build Coastguard Worker 44*333d2b36SAndroid Build Coastguard Worker result := prepareForShTest.RunTestWithBp(t, bp) 45*333d2b36SAndroid Build Coastguard Worker 46*333d2b36SAndroid Build Coastguard Worker return result.TestContext, result.Config 47*333d2b36SAndroid Build Coastguard Worker} 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Workerfunc TestShTestSubDir(t *testing.T) { 50*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 51*333d2b36SAndroid Build Coastguard Worker prepareForShTest, 52*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(android.SetKatiEnabledForTests), 53*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 54*333d2b36SAndroid Build Coastguard Worker sh_test { 55*333d2b36SAndroid Build Coastguard Worker name: "foo", 56*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 57*333d2b36SAndroid Build Coastguard Worker sub_dir: "foo_test" 58*333d2b36SAndroid Build Coastguard Worker } 59*333d2b36SAndroid Build Coastguard Worker `) 60*333d2b36SAndroid Build Coastguard Worker 61*333d2b36SAndroid Build Coastguard Worker mod := result.ModuleForTests("foo", "android_arm64_armv8-a").Module().(*ShTest) 62*333d2b36SAndroid Build Coastguard Worker 63*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, mod)[0] 64*333d2b36SAndroid Build Coastguard Worker 65*333d2b36SAndroid Build Coastguard Worker expectedPath := "out/target/product/test_device/data/nativetest64/foo_test" 66*333d2b36SAndroid Build Coastguard Worker actualPath := entries.EntryMap["LOCAL_MODULE_PATH"][0] 67*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathRelativeToTopEquals(t, "LOCAL_MODULE_PATH[0]", result.Config, expectedPath, actualPath) 68*333d2b36SAndroid Build Coastguard Worker} 69*333d2b36SAndroid Build Coastguard Worker 70*333d2b36SAndroid Build Coastguard Workerfunc TestShTest(t *testing.T) { 71*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 72*333d2b36SAndroid Build Coastguard Worker prepareForShTest, 73*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(android.SetKatiEnabledForTests), 74*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 75*333d2b36SAndroid Build Coastguard Worker sh_test { 76*333d2b36SAndroid Build Coastguard Worker name: "foo", 77*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 78*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 79*333d2b36SAndroid Build Coastguard Worker data: [ 80*333d2b36SAndroid Build Coastguard Worker "testdata/data1", 81*333d2b36SAndroid Build Coastguard Worker "testdata/sub/data2", 82*333d2b36SAndroid Build Coastguard Worker ], 83*333d2b36SAndroid Build Coastguard Worker } 84*333d2b36SAndroid Build Coastguard Worker `) 85*333d2b36SAndroid Build Coastguard Worker 86*333d2b36SAndroid Build Coastguard Worker mod := result.ModuleForTests("foo", "android_arm64_armv8-a").Module().(*ShTest) 87*333d2b36SAndroid Build Coastguard Worker 88*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result.TestContext, mod)[0] 89*333d2b36SAndroid Build Coastguard Worker 90*333d2b36SAndroid Build Coastguard Worker expectedPath := "out/target/product/test_device/data/nativetest64/foo" 91*333d2b36SAndroid Build Coastguard Worker actualPath := entries.EntryMap["LOCAL_MODULE_PATH"][0] 92*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathRelativeToTopEquals(t, "LOCAL_MODULE_PATH[0]", result.Config, expectedPath, actualPath) 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Worker expectedData := []string{":testdata/data1", ":testdata/sub/data2"} 95*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_TEST_DATA"] 96*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "LOCAL_TEST_DATA", expectedData, actualData) 97*333d2b36SAndroid Build Coastguard Worker} 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Workerfunc TestShTest_dataModules(t *testing.T) { 100*333d2b36SAndroid Build Coastguard Worker ctx, config := testShBinary(t, ` 101*333d2b36SAndroid Build Coastguard Worker sh_test { 102*333d2b36SAndroid Build Coastguard Worker name: "foo", 103*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 104*333d2b36SAndroid Build Coastguard Worker host_supported: true, 105*333d2b36SAndroid Build Coastguard Worker data_bins: ["bar"], 106*333d2b36SAndroid Build Coastguard Worker data_libs: ["libbar"], 107*333d2b36SAndroid Build Coastguard Worker } 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker cc_binary { 110*333d2b36SAndroid Build Coastguard Worker name: "bar", 111*333d2b36SAndroid Build Coastguard Worker host_supported: true, 112*333d2b36SAndroid Build Coastguard Worker shared_libs: ["libbar"], 113*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 114*333d2b36SAndroid Build Coastguard Worker nocrt: true, 115*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 116*333d2b36SAndroid Build Coastguard Worker stl: "none", 117*333d2b36SAndroid Build Coastguard Worker } 118*333d2b36SAndroid Build Coastguard Worker 119*333d2b36SAndroid Build Coastguard Worker cc_library { 120*333d2b36SAndroid Build Coastguard Worker name: "libbar", 121*333d2b36SAndroid Build Coastguard Worker host_supported: true, 122*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 123*333d2b36SAndroid Build Coastguard Worker nocrt: true, 124*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 125*333d2b36SAndroid Build Coastguard Worker stl: "none", 126*333d2b36SAndroid Build Coastguard Worker } 127*333d2b36SAndroid Build Coastguard Worker `) 128*333d2b36SAndroid Build Coastguard Worker 129*333d2b36SAndroid Build Coastguard Worker buildOS := config.BuildOS.String() 130*333d2b36SAndroid Build Coastguard Worker arches := []string{"android_arm64_armv8-a", buildOS + "_x86_64"} 131*333d2b36SAndroid Build Coastguard Worker for _, arch := range arches { 132*333d2b36SAndroid Build Coastguard Worker variant := ctx.ModuleForTests("foo", arch) 133*333d2b36SAndroid Build Coastguard Worker 134*333d2b36SAndroid Build Coastguard Worker libExt := ".so" 135*333d2b36SAndroid Build Coastguard Worker if arch == "darwin_x86_64" { 136*333d2b36SAndroid Build Coastguard Worker libExt = ".dylib" 137*333d2b36SAndroid Build Coastguard Worker } 138*333d2b36SAndroid Build Coastguard Worker relocated := variant.Output(filepath.Join("out/soong/.intermediates/foo", arch, "relocated/lib64/libbar"+libExt)) 139*333d2b36SAndroid Build Coastguard Worker expectedInput := "out/soong/.intermediates/libbar/" + arch + "_shared/libbar" + libExt 140*333d2b36SAndroid Build Coastguard Worker android.AssertPathRelativeToTopEquals(t, "relocation input", expectedInput, relocated.Input) 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Worker mod := variant.Module().(*ShTest) 143*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0] 144*333d2b36SAndroid Build Coastguard Worker expectedData := []string{ 145*333d2b36SAndroid Build Coastguard Worker filepath.Join("out/soong/.intermediates/bar", arch, ":bar"), 146*333d2b36SAndroid Build Coastguard Worker filepath.Join("out/soong/.intermediates/foo", arch, "relocated/:lib64/libbar"+libExt), 147*333d2b36SAndroid Build Coastguard Worker } 148*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_TEST_DATA"] 149*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", config, expectedData, actualData) 150*333d2b36SAndroid Build Coastguard Worker } 151*333d2b36SAndroid Build Coastguard Worker} 152*333d2b36SAndroid Build Coastguard Worker 153*333d2b36SAndroid Build Coastguard Workerfunc TestShTestHost(t *testing.T) { 154*333d2b36SAndroid Build Coastguard Worker ctx, _ := testShBinary(t, ` 155*333d2b36SAndroid Build Coastguard Worker sh_test_host { 156*333d2b36SAndroid Build Coastguard Worker name: "foo", 157*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 158*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 159*333d2b36SAndroid Build Coastguard Worker data: [ 160*333d2b36SAndroid Build Coastguard Worker "testdata/data1", 161*333d2b36SAndroid Build Coastguard Worker "testdata/sub/data2", 162*333d2b36SAndroid Build Coastguard Worker ], 163*333d2b36SAndroid Build Coastguard Worker test_options: { 164*333d2b36SAndroid Build Coastguard Worker unit_test: true, 165*333d2b36SAndroid Build Coastguard Worker }, 166*333d2b36SAndroid Build Coastguard Worker } 167*333d2b36SAndroid Build Coastguard Worker `) 168*333d2b36SAndroid Build Coastguard Worker 169*333d2b36SAndroid Build Coastguard Worker buildOS := ctx.Config().BuildOS.String() 170*333d2b36SAndroid Build Coastguard Worker mod := ctx.ModuleForTests("foo", buildOS+"_x86_64").Module().(*ShTest) 171*333d2b36SAndroid Build Coastguard Worker if !mod.Host() { 172*333d2b36SAndroid Build Coastguard Worker t.Errorf("host bit is not set for a sh_test_host module.") 173*333d2b36SAndroid Build Coastguard Worker } 174*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0] 175*333d2b36SAndroid Build Coastguard Worker actualData, _ := strconv.ParseBool(entries.EntryMap["LOCAL_IS_UNIT_TEST"][0]) 176*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "LOCAL_IS_UNIT_TEST", true, actualData) 177*333d2b36SAndroid Build Coastguard Worker} 178*333d2b36SAndroid Build Coastguard Worker 179*333d2b36SAndroid Build Coastguard Workerfunc TestShTestExtraTestConfig(t *testing.T) { 180*333d2b36SAndroid Build Coastguard Worker result, _ := testShBinary(t, ` 181*333d2b36SAndroid Build Coastguard Worker sh_test { 182*333d2b36SAndroid Build Coastguard Worker name: "foo", 183*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 184*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 185*333d2b36SAndroid Build Coastguard Worker extra_test_configs: ["config1.xml", "config2.xml"], 186*333d2b36SAndroid Build Coastguard Worker } 187*333d2b36SAndroid Build Coastguard Worker `) 188*333d2b36SAndroid Build Coastguard Worker 189*333d2b36SAndroid Build Coastguard Worker mod := result.ModuleForTests("foo", "android_arm64_armv8-a").Module().(*ShTest) 190*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, result, mod)[0] 191*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_EXTRA_FULL_TEST_CONFIGS"] 192*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "extra_configs", result.Config(), []string{"config1.xml", "config2.xml"}, actualData) 193*333d2b36SAndroid Build Coastguard Worker} 194*333d2b36SAndroid Build Coastguard Worker 195*333d2b36SAndroid Build Coastguard Workerfunc TestShTestHost_dataDeviceModules(t *testing.T) { 196*333d2b36SAndroid Build Coastguard Worker ctx, config := testShBinary(t, ` 197*333d2b36SAndroid Build Coastguard Worker sh_test_host { 198*333d2b36SAndroid Build Coastguard Worker name: "foo", 199*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 200*333d2b36SAndroid Build Coastguard Worker data_device_bins: ["bar"], 201*333d2b36SAndroid Build Coastguard Worker data_device_libs: ["libbar"], 202*333d2b36SAndroid Build Coastguard Worker } 203*333d2b36SAndroid Build Coastguard Worker 204*333d2b36SAndroid Build Coastguard Worker cc_binary { 205*333d2b36SAndroid Build Coastguard Worker name: "bar", 206*333d2b36SAndroid Build Coastguard Worker shared_libs: ["libbar"], 207*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 208*333d2b36SAndroid Build Coastguard Worker nocrt: true, 209*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 210*333d2b36SAndroid Build Coastguard Worker stl: "none", 211*333d2b36SAndroid Build Coastguard Worker } 212*333d2b36SAndroid Build Coastguard Worker 213*333d2b36SAndroid Build Coastguard Worker cc_library { 214*333d2b36SAndroid Build Coastguard Worker name: "libbar", 215*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 216*333d2b36SAndroid Build Coastguard Worker nocrt: true, 217*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 218*333d2b36SAndroid Build Coastguard Worker stl: "none", 219*333d2b36SAndroid Build Coastguard Worker } 220*333d2b36SAndroid Build Coastguard Worker `) 221*333d2b36SAndroid Build Coastguard Worker 222*333d2b36SAndroid Build Coastguard Worker buildOS := config.BuildOS.String() 223*333d2b36SAndroid Build Coastguard Worker variant := buildOS + "_x86_64" 224*333d2b36SAndroid Build Coastguard Worker foo := ctx.ModuleForTests("foo", variant) 225*333d2b36SAndroid Build Coastguard Worker 226*333d2b36SAndroid Build Coastguard Worker relocated := foo.Output(filepath.Join("out/soong/.intermediates/foo", variant, "relocated/lib64/libbar.so")) 227*333d2b36SAndroid Build Coastguard Worker expectedInput := "out/soong/.intermediates/libbar/android_arm64_armv8-a_shared/libbar.so" 228*333d2b36SAndroid Build Coastguard Worker android.AssertPathRelativeToTopEquals(t, "relocation input", expectedInput, relocated.Input) 229*333d2b36SAndroid Build Coastguard Worker 230*333d2b36SAndroid Build Coastguard Worker mod := foo.Module().(*ShTest) 231*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0] 232*333d2b36SAndroid Build Coastguard Worker expectedData := []string{ 233*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/bar/android_arm64_armv8-a/:bar", 234*333d2b36SAndroid Build Coastguard Worker // libbar has been relocated, and so has a variant that matches the host arch. 235*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/foo/" + variant + "/relocated/:lib64/libbar.so", 236*333d2b36SAndroid Build Coastguard Worker } 237*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_TEST_DATA"] 238*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", config, expectedData, actualData) 239*333d2b36SAndroid Build Coastguard Worker} 240*333d2b36SAndroid Build Coastguard Worker 241*333d2b36SAndroid Build Coastguard Workerfunc TestShTestHost_dataDeviceModulesAutogenTradefedConfig(t *testing.T) { 242*333d2b36SAndroid Build Coastguard Worker ctx, config := testShBinary(t, ` 243*333d2b36SAndroid Build Coastguard Worker sh_test_host { 244*333d2b36SAndroid Build Coastguard Worker name: "foo", 245*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 246*333d2b36SAndroid Build Coastguard Worker data_device_bins: ["bar"], 247*333d2b36SAndroid Build Coastguard Worker data_device_libs: ["libbar"], 248*333d2b36SAndroid Build Coastguard Worker } 249*333d2b36SAndroid Build Coastguard Worker 250*333d2b36SAndroid Build Coastguard Worker cc_binary { 251*333d2b36SAndroid Build Coastguard Worker name: "bar", 252*333d2b36SAndroid Build Coastguard Worker shared_libs: ["libbar"], 253*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 254*333d2b36SAndroid Build Coastguard Worker nocrt: true, 255*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 256*333d2b36SAndroid Build Coastguard Worker stl: "none", 257*333d2b36SAndroid Build Coastguard Worker } 258*333d2b36SAndroid Build Coastguard Worker 259*333d2b36SAndroid Build Coastguard Worker cc_library { 260*333d2b36SAndroid Build Coastguard Worker name: "libbar", 261*333d2b36SAndroid Build Coastguard Worker no_libcrt: true, 262*333d2b36SAndroid Build Coastguard Worker nocrt: true, 263*333d2b36SAndroid Build Coastguard Worker system_shared_libs: [], 264*333d2b36SAndroid Build Coastguard Worker stl: "none", 265*333d2b36SAndroid Build Coastguard Worker } 266*333d2b36SAndroid Build Coastguard Worker `) 267*333d2b36SAndroid Build Coastguard Worker 268*333d2b36SAndroid Build Coastguard Worker buildOS := config.BuildOS.String() 269*333d2b36SAndroid Build Coastguard Worker fooModule := ctx.ModuleForTests("foo", buildOS+"_x86_64") 270*333d2b36SAndroid Build Coastguard Worker 271*333d2b36SAndroid Build Coastguard Worker expectedBinAutogenConfig := `<option name="push-file" key="bar" value="/data/local/tests/unrestricted/foo/bar" />` 272*333d2b36SAndroid Build Coastguard Worker autogen := fooModule.Rule("autogen") 273*333d2b36SAndroid Build Coastguard Worker if !strings.Contains(autogen.Args["extraConfigs"], expectedBinAutogenConfig) { 274*333d2b36SAndroid Build Coastguard Worker t.Errorf("foo extraConfings %v does not contain %q", autogen.Args["extraConfigs"], expectedBinAutogenConfig) 275*333d2b36SAndroid Build Coastguard Worker } 276*333d2b36SAndroid Build Coastguard Worker} 277*333d2b36SAndroid Build Coastguard Worker 278*333d2b36SAndroid Build Coastguard Workerfunc TestShTestHost_javaData(t *testing.T) { 279*333d2b36SAndroid Build Coastguard Worker ctx, config := testShBinary(t, ` 280*333d2b36SAndroid Build Coastguard Worker sh_test_host { 281*333d2b36SAndroid Build Coastguard Worker name: "foo", 282*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 283*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 284*333d2b36SAndroid Build Coastguard Worker data: [ 285*333d2b36SAndroid Build Coastguard Worker "testdata/data1", 286*333d2b36SAndroid Build Coastguard Worker "testdata/sub/data2", 287*333d2b36SAndroid Build Coastguard Worker ], 288*333d2b36SAndroid Build Coastguard Worker java_data: [ 289*333d2b36SAndroid Build Coastguard Worker "javalib", 290*333d2b36SAndroid Build Coastguard Worker ], 291*333d2b36SAndroid Build Coastguard Worker } 292*333d2b36SAndroid Build Coastguard Worker 293*333d2b36SAndroid Build Coastguard Worker java_library_host { 294*333d2b36SAndroid Build Coastguard Worker name: "javalib", 295*333d2b36SAndroid Build Coastguard Worker srcs: [], 296*333d2b36SAndroid Build Coastguard Worker } 297*333d2b36SAndroid Build Coastguard Worker `) 298*333d2b36SAndroid Build Coastguard Worker buildOS := ctx.Config().BuildOS.String() 299*333d2b36SAndroid Build Coastguard Worker mod := ctx.ModuleForTests("foo", buildOS+"_x86_64").Module().(*ShTest) 300*333d2b36SAndroid Build Coastguard Worker if !mod.Host() { 301*333d2b36SAndroid Build Coastguard Worker t.Errorf("host bit is not set for a sh_test_host module.") 302*333d2b36SAndroid Build Coastguard Worker } 303*333d2b36SAndroid Build Coastguard Worker expectedData := []string{ 304*333d2b36SAndroid Build Coastguard Worker ":testdata/data1", 305*333d2b36SAndroid Build Coastguard Worker ":testdata/sub/data2", 306*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/javalib/" + buildOS + "_common/combined/:javalib.jar", 307*333d2b36SAndroid Build Coastguard Worker } 308*333d2b36SAndroid Build Coastguard Worker 309*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0] 310*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_TEST_DATA"] 311*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", config, expectedData, actualData) 312*333d2b36SAndroid Build Coastguard Worker} 313*333d2b36SAndroid Build Coastguard Worker 314*333d2b36SAndroid Build Coastguard Workerfunc TestDefaultsForTests(t *testing.T) { 315*333d2b36SAndroid Build Coastguard Worker ctx, config := testShBinary(t, ` 316*333d2b36SAndroid Build Coastguard Worker sh_defaults { 317*333d2b36SAndroid Build Coastguard Worker name: "defaults", 318*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 319*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 320*333d2b36SAndroid Build Coastguard Worker data: [ 321*333d2b36SAndroid Build Coastguard Worker "testdata/data1", 322*333d2b36SAndroid Build Coastguard Worker "testdata/sub/data2", 323*333d2b36SAndroid Build Coastguard Worker ], 324*333d2b36SAndroid Build Coastguard Worker } 325*333d2b36SAndroid Build Coastguard Worker sh_test_host { 326*333d2b36SAndroid Build Coastguard Worker name: "foo", 327*333d2b36SAndroid Build Coastguard Worker defaults: ["defaults"], 328*333d2b36SAndroid Build Coastguard Worker data: [ 329*333d2b36SAndroid Build Coastguard Worker "testdata/more_data", 330*333d2b36SAndroid Build Coastguard Worker ], 331*333d2b36SAndroid Build Coastguard Worker java_data: [ 332*333d2b36SAndroid Build Coastguard Worker "javalib", 333*333d2b36SAndroid Build Coastguard Worker ], 334*333d2b36SAndroid Build Coastguard Worker } 335*333d2b36SAndroid Build Coastguard Worker 336*333d2b36SAndroid Build Coastguard Worker java_library_host { 337*333d2b36SAndroid Build Coastguard Worker name: "javalib", 338*333d2b36SAndroid Build Coastguard Worker srcs: [], 339*333d2b36SAndroid Build Coastguard Worker } 340*333d2b36SAndroid Build Coastguard Worker 341*333d2b36SAndroid Build Coastguard Worker sh_test { 342*333d2b36SAndroid Build Coastguard Worker name: "sh-test", 343*333d2b36SAndroid Build Coastguard Worker defaults: ["defaults"], 344*333d2b36SAndroid Build Coastguard Worker } 345*333d2b36SAndroid Build Coastguard Worker 346*333d2b36SAndroid Build Coastguard Worker `) 347*333d2b36SAndroid Build Coastguard Worker buildOS := ctx.Config().BuildOS.String() 348*333d2b36SAndroid Build Coastguard Worker mod := ctx.ModuleForTests("foo", buildOS+"_x86_64").Module().(*ShTest) 349*333d2b36SAndroid Build Coastguard Worker if !mod.Host() { 350*333d2b36SAndroid Build Coastguard Worker t.Errorf("host bit is not set for a sh_test_host module.") 351*333d2b36SAndroid Build Coastguard Worker } 352*333d2b36SAndroid Build Coastguard Worker expectedData := []string{ 353*333d2b36SAndroid Build Coastguard Worker ":testdata/data1", 354*333d2b36SAndroid Build Coastguard Worker ":testdata/sub/data2", 355*333d2b36SAndroid Build Coastguard Worker ":testdata/more_data", 356*333d2b36SAndroid Build Coastguard Worker "out/soong/.intermediates/javalib/" + buildOS + "_common/combined/:javalib.jar", 357*333d2b36SAndroid Build Coastguard Worker } 358*333d2b36SAndroid Build Coastguard Worker 359*333d2b36SAndroid Build Coastguard Worker entries := android.AndroidMkEntriesForTest(t, ctx, mod)[0] 360*333d2b36SAndroid Build Coastguard Worker actualData := entries.EntryMap["LOCAL_TEST_DATA"] 361*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", config, expectedData, actualData) 362*333d2b36SAndroid Build Coastguard Worker 363*333d2b36SAndroid Build Coastguard Worker // Just the defaults 364*333d2b36SAndroid Build Coastguard Worker expectedData = []string{ 365*333d2b36SAndroid Build Coastguard Worker ":testdata/data1", 366*333d2b36SAndroid Build Coastguard Worker ":testdata/sub/data2", 367*333d2b36SAndroid Build Coastguard Worker } 368*333d2b36SAndroid Build Coastguard Worker mod = ctx.ModuleForTests("sh-test", "android_arm64_armv8-a").Module().(*ShTest) 369*333d2b36SAndroid Build Coastguard Worker entries = android.AndroidMkEntriesForTest(t, ctx, mod)[0] 370*333d2b36SAndroid Build Coastguard Worker actualData = entries.EntryMap["LOCAL_TEST_DATA"] 371*333d2b36SAndroid Build Coastguard Worker android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", config, expectedData, actualData) 372*333d2b36SAndroid Build Coastguard Worker} 373*333d2b36SAndroid Build Coastguard Worker 374*333d2b36SAndroid Build Coastguard Workerfunc TestDefaultsForBinaries(t *testing.T) { 375*333d2b36SAndroid Build Coastguard Worker ctx, _ := testShBinary(t, ` 376*333d2b36SAndroid Build Coastguard Worker sh_defaults { 377*333d2b36SAndroid Build Coastguard Worker name: "defaults", 378*333d2b36SAndroid Build Coastguard Worker src: "test.sh", 379*333d2b36SAndroid Build Coastguard Worker filename: "test.sh", 380*333d2b36SAndroid Build Coastguard Worker } 381*333d2b36SAndroid Build Coastguard Worker sh_binary_host { 382*333d2b36SAndroid Build Coastguard Worker name: "the-host-binary", 383*333d2b36SAndroid Build Coastguard Worker defaults: ["defaults"], 384*333d2b36SAndroid Build Coastguard Worker } 385*333d2b36SAndroid Build Coastguard Worker sh_binary{ 386*333d2b36SAndroid Build Coastguard Worker name: "the-binary", 387*333d2b36SAndroid Build Coastguard Worker defaults: ["defaults"], 388*333d2b36SAndroid Build Coastguard Worker } 389*333d2b36SAndroid Build Coastguard Worker `) 390*333d2b36SAndroid Build Coastguard Worker buildOS := ctx.Config().BuildOS.String() 391*333d2b36SAndroid Build Coastguard Worker mod := ctx.ModuleForTests("the-host-binary", buildOS+"_x86_64").Module().(*ShBinary) 392*333d2b36SAndroid Build Coastguard Worker if !mod.Host() { 393*333d2b36SAndroid Build Coastguard Worker t.Errorf("host bit is not set for a sh_binary_host module.") 394*333d2b36SAndroid Build Coastguard Worker } 395*333d2b36SAndroid Build Coastguard Worker 396*333d2b36SAndroid Build Coastguard Worker expectedFilename := "test.sh" 397*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "Filename", expectedFilename, *mod.properties.Filename) 398*333d2b36SAndroid Build Coastguard Worker 399*333d2b36SAndroid Build Coastguard Worker mod = ctx.ModuleForTests("the-binary", "android_arm64_armv8-a").Module().(*ShBinary) 400*333d2b36SAndroid Build Coastguard Worker android.AssertStringEquals(t, "Filename", expectedFilename, *mod.properties.Filename) 401*333d2b36SAndroid Build Coastguard Worker} 402