From ad8ac5358182e72bb4ede89e9a98e2b23b03523b Mon Sep 17 00:00:00 2001 From: ThiƩbaud Weksteen Date: Wed, 5 Aug 2020 14:27:32 +0200 Subject: 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 --- rust/project_json_test.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'rust/project_json_test.go') 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) +} -- cgit v1.2.3-59-g8ed1b