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
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user