|  | package toml | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "testing" | 
|  | ) | 
|  |  | 
|  | func testResult(t *testing.T, key string, expected []string) { | 
|  | parsed, err := parseKey(key) | 
|  | t.Logf("key=%s expected=%s parsed=%s", key, expected, parsed) | 
|  | if err != nil { | 
|  | t.Fatal("Unexpected error:", err) | 
|  | } | 
|  | if len(expected) != len(parsed) { | 
|  | t.Fatal("Expected length", len(expected), "but", len(parsed), "parsed") | 
|  | } | 
|  | for index, expectedKey := range expected { | 
|  | if expectedKey != parsed[index] { | 
|  | t.Fatal("Expected", expectedKey, "at index", index, "but found", parsed[index]) | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | func testError(t *testing.T, key string, expectedError string) { | 
|  | _, err := parseKey(key) | 
|  | if fmt.Sprintf("%s", err) != expectedError { | 
|  | t.Fatalf("Expected error \"%s\", but got \"%s\".", expectedError, err) | 
|  | } | 
|  | } | 
|  |  | 
|  | func TestBareKeyBasic(t *testing.T) { | 
|  | testResult(t, "test", []string{"test"}) | 
|  | } | 
|  |  | 
|  | func TestBareKeyDotted(t *testing.T) { | 
|  | testResult(t, "this.is.a.key", []string{"this", "is", "a", "key"}) | 
|  | } | 
|  |  | 
|  | func TestDottedKeyBasic(t *testing.T) { | 
|  | testResult(t, "\"a.dotted.key\"", []string{"a.dotted.key"}) | 
|  | } | 
|  |  | 
|  | func TestBaseKeyPound(t *testing.T) { | 
|  | testError(t, "hello#world", "invalid bare character: #") | 
|  | } | 
|  |  | 
|  | func TestQuotedKeys(t *testing.T) { | 
|  | testResult(t, `hello."foo".bar`, []string{"hello", "foo", "bar"}) | 
|  | testResult(t, `"hello!"`, []string{"hello!"}) | 
|  | } | 
|  |  | 
|  | func TestEmptyKey(t *testing.T) { | 
|  | testError(t, "", "empty key") | 
|  | testError(t, " ", "empty key") | 
|  | testResult(t, `""`, []string{""}) | 
|  | } |