package gcfg import ( "fmt" "math/big" "strings" "testing" ) type Config1 struct { Section struct { Int int BigInt big.Int } } var testsIssue1 = []struct { cfg string typename string }{ {"[section]\nint=X", "int"}, {"[section]\nint=", "int"}, {"[section]\nint=1A", "int"}, {"[section]\nbigint=X", "big.Int"}, {"[section]\nbigint=", "big.Int"}, {"[section]\nbigint=1A", "big.Int"}, } // Value parse error should: // - include plain type name // - not include reflect internals func TestIssue1(t *testing.T) { for i, tt := range testsIssue1 { var c Config1 err := ReadStringInto(&c, tt.cfg) switch { case err == nil: t.Errorf("%d fail: got ok; wanted error", i) case !strings.Contains(err.Error(), tt.typename): t.Errorf("%d fail: error message doesn't contain type name %q: %v", i, tt.typename, err) case strings.Contains(err.Error(), "reflect"): t.Errorf("%d fail: error message includes reflect internals: %v", i, err) default: t.Logf("%d pass: %v", i, err) } } } type confIssue2 struct{ Main struct{ Foo string } } var testsIssue2 = []readtest{ {"[main]\n;\nfoo = bar\n", &confIssue2{struct{ Foo string }{"bar"}}, true}, {"[main]\r\n;\r\nfoo = bar\r\n", &confIssue2{struct{ Foo string }{"bar"}}, true}, } func TestIssue2(t *testing.T) { for i, tt := range testsIssue2 { id := fmt.Sprintf("issue2:%d", i) testRead(t, id, tt) } }