| 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{""}) |
| } |