Fields diff
This commit is contained in:
parent
15133ced93
commit
6aa876c2a3
14
field.go
14
field.go
|
@ -49,3 +49,17 @@ func extractFields(st interface{}, path string) map[string]field {
|
||||||
|
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func diff(a, b interface{}) map[string][]interface{} {
|
||||||
|
af := extractFields(a, "")
|
||||||
|
bf := extractFields(b, "")
|
||||||
|
|
||||||
|
res := make(map[string][]interface{})
|
||||||
|
for name, f := range af {
|
||||||
|
if bf[name].Val != f.Val {
|
||||||
|
res[name] = []interface{}{f.Val, bf[name].Val}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
|
@ -35,3 +35,51 @@ func TestExtractFields(t *testing.T) {
|
||||||
testField("Database.Host", "string", c.Database.Host)
|
testField("Database.Host", "string", c.Database.Host)
|
||||||
testField("Database.Port", "int", c.Database.Port)
|
testField("Database.Port", "int", c.Database.Port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDiff(t *testing.T) {
|
||||||
|
c1 := testConf{
|
||||||
|
AppName: "Confection",
|
||||||
|
Version: 1.3,
|
||||||
|
Database: testDatabaseConf{
|
||||||
|
Adapter: "mysql",
|
||||||
|
Host: "localhost",
|
||||||
|
Port: 3306,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
c2 := testConf{
|
||||||
|
AppName: "Confection",
|
||||||
|
Version: 2,
|
||||||
|
Database: testDatabaseConf{
|
||||||
|
Adapter: "postgresql",
|
||||||
|
Host: "localhost",
|
||||||
|
Port: 5432,
|
||||||
|
Username: "root",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
d := diff(c1, c2)
|
||||||
|
testField := func(fieldName string, oldVal, newVal interface{}) {
|
||||||
|
if f, ok := d[fieldName]; ok {
|
||||||
|
if f[0] != oldVal {
|
||||||
|
t.Errorf("%s field old value was %q, not %q", oldVal, f[0])
|
||||||
|
}
|
||||||
|
if f[1] != newVal {
|
||||||
|
t.Errorf("%s field new value was %q, not %q", newVal, f[1])
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
t.Errorf("Expected %s field to have different values", fieldName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unchangedFields := []string{"AppName", "Database.Host", "Database.Password"}
|
||||||
|
for _, f := range unchangedFields {
|
||||||
|
if _, ok := d[f]; ok {
|
||||||
|
t.Errorf("Expected %q field to be unchanged", f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testField("Version", c1.Version, c2.Version)
|
||||||
|
testField("Database.Adapter", c1.Database.Adapter, c2.Database.Adapter)
|
||||||
|
testField("Database.Port", c1.Database.Port, c2.Database.Port)
|
||||||
|
testField("Database.Username", c1.Database.Username, c2.Database.Username)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue