summaryrefslogtreecommitdiff
path: root/rust/project_json_test.go
diff options
context:
space:
mode:
authorThiƩbaud Weksteen <tweek@google.com>2020-08-05 14:27:32 +0200
committerThiƩbaud Weksteen <tweek@google.com>2020-08-05 16:34:38 +0200
commitad8ac5358182e72bb4ede89e9a98e2b23b03523b (patch)
treee28dcba3dc8c57276581778be1e06645a680c2b8 /rust/project_json_test.go
parent891cd578c70911416775511654ad396fc95be054 (diff)
rust: handle modules with same crate_name
crate_name do not need to be unique. A library may depend on two different versions of the same crate. Use the module name instead of the crate name when indexing the modules for rust-project.json. Test: SOONG_GEN_RUST_PROJECT=1 m nothing Bug: 162896400 Change-Id: I275f04639ef05f2b649c30168046e13b2efcacb9
Diffstat (limited to 'rust/project_json_test.go')
-rw-r--r--rust/project_json_test.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/rust/project_json_test.go b/rust/project_json_test.go
index 89ba8d352..85219404a 100644
--- a/rust/project_json_test.go
+++ b/rust/project_json_test.go
@@ -117,3 +117,55 @@ func TestProjectJsonBindGen(t *testing.T) {
jsonContent := testProjectJson(t, bp, fs)
validateJsonCrates(t, jsonContent)
}
+
+func TestProjectJsonMultiVersion(t *testing.T) {
+ bp := `
+ rust_library {
+ name: "liba1",
+ srcs: ["a1/src/lib.rs"],
+ crate_name: "a"
+ }
+ rust_library {
+ name: "liba2",
+ srcs: ["a2/src/lib.rs"],
+ crate_name: "a",
+ }
+ rust_library {
+ name: "libb",
+ srcs: ["b/src/lib.rs"],
+ crate_name: "b",
+ rustlibs: ["liba1", "liba2"],
+ }
+ ` + GatherRequiredDepsForTest()
+ fs := map[string][]byte{
+ "a1/src/lib.rs": nil,
+ "a2/src/lib.rs": nil,
+ "b/src/lib.rs": nil,
+ }
+ jsonContent := testProjectJson(t, bp, fs)
+ crates := validateJsonCrates(t, jsonContent)
+ for _, crate := range crates {
+ c := crate.(map[string]interface{})
+ if c["root_module"] == "b/src/lib.rs" {
+ deps, ok := c["deps"].([]interface{})
+ if !ok {
+ t.Errorf("Unexpected format for deps: %v", c["deps"])
+ }
+ aCount := 0
+ for _, dep := range deps {
+ d, ok := dep.(map[string]interface{})
+ if !ok {
+ t.Errorf("Unexpected format for dep: %v", dep)
+ }
+ if d["name"] == "a" {
+ aCount++
+ }
+ }
+ if aCount != 2 {
+ t.Errorf("Unexpected number of liba dependencies want %v, got %v: %v", 2, aCount, deps)
+ }
+ return
+ }
+ }
+ t.Errorf("libb crate has not been found: %v", crates)
+}