package bridge import "testing" // TestPruneControllers_RemovesAbsentDevice 米家已删除设备的控制器必须被剔除, // 否则 AC()/Switch() 等访问器仍会为已删设备返回控制器。 func TestPruneControllers_RemovesAbsentDevice(t *testing.T) { dv := map[string]interface{}{ "did-keep": struct{}{}, "did-gone": struct{}{}, } removed := pruneControllers(dv, map[string]struct{}{"did-keep": {}}) if len(removed) != 1 || removed[0] != "did-gone" { t.Fatalf("removed = %v, want [did-gone]", removed) } if _, ok := dv["did-gone"]; ok { t.Error("已删设备应被剔除") } if _, ok := dv["did-keep"]; !ok { t.Error("云端仍存在的设备不应被剔除") } } // TestPruneControllers_NoChange 全部设备仍存在时不做任何改动。 func TestPruneControllers_NoChange(t *testing.T) { dv := map[string]interface{}{"did1": struct{}{}, "did2": struct{}{}} removed := pruneControllers(dv, map[string]struct{}{"did1": {}, "did2": {}, "did3": {}}) if len(removed) != 0 { t.Errorf("removed = %v, want empty", removed) } if len(dv) != 2 { t.Errorf("dv len = %d, want 2", len(dv)) } } // TestPruneControllers_EmptyAlive RemovedAll:设备列表为空时全部剔除(调用方保证非空列表)。 func TestPruneControllers_EmptyAlive(t *testing.T) { dv := map[string]interface{}{"did1": struct{}{}, "did2": struct{}{}} removed := pruneControllers(dv, nil) if len(removed) != 2 { t.Fatalf("removed = %v, want 2 entries", removed) } if len(dv) != 0 { t.Errorf("dv len = %d, want 0", len(dv)) } }