diff options
author | ThiƩbaud Weksteen <tweek@google.com> | 2020-08-05 14:27:32 +0200 |
---|---|---|
committer | ThiƩbaud Weksteen <tweek@google.com> | 2020-08-06 15:17:42 +0200 |
commit | 2f628baeaeb5e4c353df53040cc161b398a2ce1d (patch) | |
tree | 2dbbbcff984bb4d63fa689f648fae750dc2f2aec /rust/project_json_test.go | |
parent | c8105108980fce1c0bf56c30630b84205aa57746 (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: I8af9115b106fda2bed5b9fe96059cc29a33ac247
Diffstat (limited to 'rust/project_json_test.go')
-rw-r--r-- | rust/project_json_test.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/rust/project_json_test.go b/rust/project_json_test.go index 6786e72c7..259a42fdb 100644 --- a/rust/project_json_test.go +++ b/rust/project_json_test.go @@ -53,3 +53,55 @@ func TestProjectJson(t *testing.T) { t.Errorf("rust-project.json has not been generated") } } + +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) +} |