|  | // Copyright 2023 Google Inc. All rights reserved. | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | package bp2build | 
|  |  | 
|  | import ( | 
|  | "android/soong/android" | 
|  | "android/soong/java" | 
|  |  | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func runAndroidTestTestCase(t *testing.T, tc Bp2buildTestCase) { | 
|  | t.Helper() | 
|  | RunBp2BuildTestCase(t, registerAndroidTestModuleTypes, tc) | 
|  | } | 
|  |  | 
|  | func registerAndroidTestModuleTypes(ctx android.RegistrationContext) { | 
|  | ctx.RegisterModuleType("filegroup", android.FileGroupFactory) | 
|  | ctx.RegisterModuleType("java_library", java.LibraryFactory) | 
|  | } | 
|  |  | 
|  | func TestMinimalAndroidTest(t *testing.T) { | 
|  | runAndroidAppTestCase(t, Bp2buildTestCase{ | 
|  | Description:                "Android test - simple example", | 
|  | ModuleTypeUnderTest:        "android_test", | 
|  | ModuleTypeUnderTestFactory: java.AndroidTestFactory, | 
|  | Filesystem: map[string]string{ | 
|  | "app.java":            "", | 
|  | "res/res.png":         "", | 
|  | "AndroidManifest.xml": "", | 
|  | "assets/asset.png":    "", | 
|  | }, | 
|  | Blueprint: ` | 
|  | android_test { | 
|  | name: "TestApp", | 
|  | srcs: ["app.java"], | 
|  | sdk_version: "current", | 
|  | } | 
|  | `, | 
|  | ExpectedBazelTargets: []string{ | 
|  | MakeBazelTarget("android_test", "TestApp", AttrNameToString{ | 
|  | "srcs":           `["app.java"]`, | 
|  | "manifest":       `"AndroidManifest.xml"`, | 
|  | "resource_files": `["res/res.png"]`, | 
|  | "sdk_version":    `"current"`, | 
|  | "assets":         `["assets/asset.png"]`, | 
|  | "assets_dir":     `"assets"`, | 
|  | // no need for optimize = False because it's false for | 
|  | // android_test by default | 
|  | }), | 
|  | }}) | 
|  | } | 
|  |  | 
|  | func TestAndroidTest_OptimizationEnabled(t *testing.T) { | 
|  | runAndroidAppTestCase(t, Bp2buildTestCase{ | 
|  | Description:                "Android test - simple example", | 
|  | ModuleTypeUnderTest:        "android_test", | 
|  | ModuleTypeUnderTestFactory: java.AndroidTestFactory, | 
|  | Filesystem: map[string]string{ | 
|  | "app.java":            "", | 
|  | "res/res.png":         "", | 
|  | "AndroidManifest.xml": "", | 
|  | "assets/asset.png":    "", | 
|  | }, | 
|  | Blueprint: ` | 
|  | android_test { | 
|  | name: "TestApp", | 
|  | srcs: ["app.java"], | 
|  | sdk_version: "current", | 
|  | optimize: { | 
|  | enabled: true, | 
|  | shrink: true, | 
|  | optimize: true, | 
|  | obfuscate: true, | 
|  | }, | 
|  | } | 
|  | `, | 
|  | ExpectedBazelTargets: []string{ | 
|  | MakeBazelTarget("android_test", "TestApp", AttrNameToString{ | 
|  | "srcs":           `["app.java"]`, | 
|  | "manifest":       `"AndroidManifest.xml"`, | 
|  | "resource_files": `["res/res.png"]`, | 
|  | "sdk_version":    `"current"`, | 
|  | "assets":         `["assets/asset.png"]`, | 
|  | "assets_dir":     `"assets"`, | 
|  | // optimize = True because it's false for android_test by | 
|  | // default | 
|  | "optimize": `True`, | 
|  | }), | 
|  | }}) | 
|  | } | 
|  |  | 
|  | func TestMinimalAndroidTestHelperApp(t *testing.T) { | 
|  | runAndroidAppTestCase(t, Bp2buildTestCase{ | 
|  | Description:                "Android test helper app - simple example", | 
|  | ModuleTypeUnderTest:        "android_test_helper_app", | 
|  | ModuleTypeUnderTestFactory: java.AndroidTestHelperAppFactory, | 
|  | Filesystem: map[string]string{ | 
|  | "app.java":            "", | 
|  | "res/res.png":         "", | 
|  | "AndroidManifest.xml": "", | 
|  | "assets/asset.png":    "", | 
|  | }, | 
|  | Blueprint: ` | 
|  | android_test_helper_app { | 
|  | name: "TestApp", | 
|  | srcs: ["app.java"], | 
|  | sdk_version: "current", | 
|  | optimize: { | 
|  | shrink: true, | 
|  | optimize: true, | 
|  | obfuscate: true, | 
|  | }, | 
|  | } | 
|  | `, | 
|  | ExpectedBazelTargets: []string{ | 
|  | MakeBazelTarget("android_binary", "TestApp", AttrNameToString{ | 
|  | "srcs":           `["app.java"]`, | 
|  | "manifest":       `"AndroidManifest.xml"`, | 
|  | "resource_files": `["res/res.png"]`, | 
|  | "sdk_version":    `"current"`, | 
|  | "assets":         `["assets/asset.png"]`, | 
|  | "assets_dir":     `"assets"`, | 
|  | "testonly":       `True`, | 
|  | // no need for optimize = True because it's true for | 
|  | // android_test_helper_app by default | 
|  | }), | 
|  | }}) | 
|  | } | 
|  |  | 
|  | func TestAndroidTestHelperApp_OptimizationDisabled(t *testing.T) { | 
|  | runAndroidAppTestCase(t, Bp2buildTestCase{ | 
|  | Description:                "Android test helper app - simple example", | 
|  | ModuleTypeUnderTest:        "android_test_helper_app", | 
|  | ModuleTypeUnderTestFactory: java.AndroidTestHelperAppFactory, | 
|  | Filesystem: map[string]string{ | 
|  | "app.java":            "", | 
|  | "res/res.png":         "", | 
|  | "AndroidManifest.xml": "", | 
|  | "assets/asset.png":    "", | 
|  | }, | 
|  | Blueprint: ` | 
|  | android_test_helper_app { | 
|  | name: "TestApp", | 
|  | srcs: ["app.java"], | 
|  | sdk_version: "current", | 
|  | optimize: { | 
|  | enabled: false, | 
|  | }, | 
|  | } | 
|  | `, | 
|  | ExpectedBazelTargets: []string{ | 
|  | MakeBazelTarget("android_binary", "TestApp", AttrNameToString{ | 
|  | "srcs":           `["app.java"]`, | 
|  | "manifest":       `"AndroidManifest.xml"`, | 
|  | "resource_files": `["res/res.png"]`, | 
|  | "sdk_version":    `"current"`, | 
|  | "assets":         `["assets/asset.png"]`, | 
|  | "assets_dir":     `"assets"`, | 
|  | "testonly":       `True`, | 
|  | // optimize = False because it's true for | 
|  | // android_test_helper_app by default | 
|  | "optimize": `False`, | 
|  | }), | 
|  | }}) | 
|  | } |