| Ivan Lozano | 10735d9 | 2020-07-22 09:14:47 -0400 | [diff] [blame] | 1 | // Copyright 2020 The Android Open Source Project | 
|  | 2 | // | 
|  | 3 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 4 | // you may not use this file except in compliance with the License. | 
|  | 5 | // You may obtain a copy of the License at | 
|  | 6 | // | 
|  | 7 | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 8 | // | 
|  | 9 | // Unless required by applicable law or agreed to in writing, software | 
|  | 10 | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 12 | // See the License for the specific language governing permissions and | 
|  | 13 | // limitations under the License. | 
|  | 14 |  | 
|  | 15 | package rust | 
|  | 16 |  | 
| Sam Delmerico | 079a97c | 2023-09-27 09:29:32 +0000 | [diff] [blame] | 17 | import ( | 
|  | 18 | "android/soong/android" | 
|  | 19 | "sort" | 
|  | 20 | "testing" | 
|  | 21 | ) | 
| Ivan Lozano | 10735d9 | 2020-07-22 09:14:47 -0400 | [diff] [blame] | 22 |  | 
|  | 23 | func TestSourceProviderCollision(t *testing.T) { | 
|  | 24 | testRustError(t, "multiple source providers generate the same filename output: bindings.rs", ` | 
|  | 25 | rust_binary { | 
|  | 26 | name: "source_collider", | 
|  | 27 | srcs: [ | 
|  | 28 | "foo.rs", | 
|  | 29 | ":libbindings1", | 
|  | 30 | ":libbindings2", | 
|  | 31 | ], | 
|  | 32 | } | 
|  | 33 | rust_bindgen { | 
|  | 34 | name: "libbindings1", | 
| Ivan Lozano | 26ecd6c | 2020-07-31 13:40:31 -0400 | [diff] [blame] | 35 | source_stem: "bindings", | 
|  | 36 | crate_name: "bindings1", | 
| Ivan Lozano | 10735d9 | 2020-07-22 09:14:47 -0400 | [diff] [blame] | 37 | wrapper_src: "src/any.h", | 
|  | 38 | } | 
|  | 39 | rust_bindgen { | 
|  | 40 | name: "libbindings2", | 
| Ivan Lozano | 26ecd6c | 2020-07-31 13:40:31 -0400 | [diff] [blame] | 41 | source_stem: "bindings", | 
|  | 42 | crate_name: "bindings2", | 
| Ivan Lozano | 10735d9 | 2020-07-22 09:14:47 -0400 | [diff] [blame] | 43 | wrapper_src: "src/any.h", | 
|  | 44 | } | 
|  | 45 | `) | 
|  | 46 | } | 
| Sam Delmerico | 079a97c | 2023-09-27 09:29:32 +0000 | [diff] [blame] | 47 |  | 
|  | 48 | func TestCompilationOutputFiles(t *testing.T) { | 
|  | 49 | ctx := testRust(t, ` | 
|  | 50 | rust_library { | 
|  | 51 | name: "libfizz_buzz", | 
|  | 52 | crate_name:"fizz_buzz", | 
|  | 53 | srcs: ["lib.rs"], | 
|  | 54 | } | 
|  | 55 | rust_binary { | 
|  | 56 | name: "fizz_buzz", | 
|  | 57 | crate_name:"fizz_buzz", | 
|  | 58 | srcs: ["lib.rs"], | 
|  | 59 | } | 
|  | 60 | rust_ffi { | 
|  | 61 | name: "librust_ffi", | 
|  | 62 | crate_name: "rust_ffi", | 
|  | 63 | srcs: ["lib.rs"], | 
|  | 64 | } | 
|  | 65 | `) | 
|  | 66 | testcases := []struct { | 
|  | 67 | testName      string | 
|  | 68 | moduleName    string | 
|  | 69 | variant       string | 
|  | 70 | expectedFiles []string | 
|  | 71 | }{ | 
|  | 72 | { | 
|  | 73 | testName:   "dylib", | 
|  | 74 | moduleName: "libfizz_buzz", | 
|  | 75 | variant:    "android_arm64_armv8-a_dylib", | 
|  | 76 | expectedFiles: []string{ | 
|  | 77 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so", | 
|  | 78 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.clippy", | 
| Sam Delmerico | 079a97c | 2023-09-27 09:29:32 +0000 | [diff] [blame] | 79 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/unstripped/libfizz_buzz.dylib.so", | 
|  | 80 | "out/soong/target/product/test_device/system/lib64/libfizz_buzz.dylib.so", | 
|  | 81 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/meta_lic", | 
|  | 82 | }, | 
|  | 83 | }, | 
|  | 84 | { | 
|  | 85 | testName:   "rlib dylib-std", | 
|  | 86 | moduleName: "libfizz_buzz", | 
|  | 87 | variant:    "android_arm64_armv8-a_rlib_dylib-std", | 
|  | 88 | expectedFiles: []string{ | 
|  | 89 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib", | 
|  | 90 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib.clippy", | 
|  | 91 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/meta_lic", | 
|  | 92 | }, | 
|  | 93 | }, | 
|  | 94 | { | 
|  | 95 | testName:   "rlib rlib-std", | 
|  | 96 | moduleName: "libfizz_buzz", | 
|  | 97 | variant:    "android_arm64_armv8-a_rlib_rlib-std", | 
|  | 98 | expectedFiles: []string{ | 
|  | 99 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib", | 
|  | 100 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib.clippy", | 
|  | 101 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/meta_lic", | 
|  | 102 | "out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/rustdoc.timestamp", | 
|  | 103 | }, | 
|  | 104 | }, | 
|  | 105 | { | 
|  | 106 | testName:   "rust_binary", | 
|  | 107 | moduleName: "fizz_buzz", | 
|  | 108 | variant:    "android_arm64_armv8-a", | 
|  | 109 | expectedFiles: []string{ | 
|  | 110 | "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz", | 
|  | 111 | "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.clippy", | 
| Sam Delmerico | 079a97c | 2023-09-27 09:29:32 +0000 | [diff] [blame] | 112 | "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/unstripped/fizz_buzz", | 
|  | 113 | "out/soong/target/product/test_device/system/bin/fizz_buzz", | 
|  | 114 | "out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/meta_lic", | 
|  | 115 | }, | 
|  | 116 | }, | 
|  | 117 | { | 
|  | 118 | testName:   "rust_ffi static", | 
|  | 119 | moduleName: "librust_ffi", | 
|  | 120 | variant:    "android_arm64_armv8-a_static", | 
|  | 121 | expectedFiles: []string{ | 
|  | 122 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a", | 
|  | 123 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a.clippy", | 
|  | 124 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/meta_lic", | 
|  | 125 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/rustdoc.timestamp", | 
|  | 126 | }, | 
|  | 127 | }, | 
|  | 128 | { | 
|  | 129 | testName:   "rust_ffi shared", | 
|  | 130 | moduleName: "librust_ffi", | 
|  | 131 | variant:    "android_arm64_armv8-a_shared", | 
|  | 132 | expectedFiles: []string{ | 
|  | 133 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so", | 
|  | 134 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.clippy", | 
| Sam Delmerico | 079a97c | 2023-09-27 09:29:32 +0000 | [diff] [blame] | 135 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so", | 
|  | 136 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so.toc", | 
|  | 137 | "out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/meta_lic", | 
|  | 138 | "out/soong/target/product/test_device/system/lib64/librust_ffi.so", | 
|  | 139 | }, | 
|  | 140 | }, | 
|  | 141 | } | 
|  | 142 | for _, tc := range testcases { | 
|  | 143 | t.Run(tc.testName, func(t *testing.T) { | 
|  | 144 | modOutputs := ctx.ModuleForTests(tc.moduleName, tc.variant).AllOutputs() | 
|  | 145 | sort.Strings(tc.expectedFiles) | 
|  | 146 | sort.Strings(modOutputs) | 
|  | 147 | android.AssertStringPathsRelativeToTopEquals( | 
|  | 148 | t, | 
|  | 149 | "incorrect outputs from rust module", | 
|  | 150 | ctx.Config(), | 
|  | 151 | tc.expectedFiles, | 
|  | 152 | modOutputs, | 
|  | 153 | ) | 
|  | 154 | }) | 
|  | 155 | } | 
|  | 156 | } |