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-06 15:17:42 +0200
commit2f628baeaeb5e4c353df53040cc161b398a2ce1d (patch)
tree2dbbbcff984bb4d63fa689f648fae750dc2f2aec /rust/project_json_test.go
parentc8105108980fce1c0bf56c30630b84205aa57746 (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.go52
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)
+}