diff --git a/src/main/java/com/moandjiezana/toml/Results.java b/src/main/java/com/moandjiezana/toml/Results.java index ec5e577..4a9dd7e 100644 --- a/src/main/java/com/moandjiezana/toml/Results.java +++ b/src/main/java/com/moandjiezana/toml/Results.java @@ -21,6 +21,14 @@ class Results { .append(table) .append("]\n"); } + + public void tableDuplicatesKey(String table, AtomicInteger line) { + sb.append("Key already exists for table definition on line ") + .append(line.get()) + .append(": [") + .append(table) + .append("]\n"); + } void emptyImplicitTable(String table, int line) { sb.append("Invalid table definition due to empty implicit table name: ") @@ -216,7 +224,11 @@ class Results { } else if (currentContainer.accepts(tablePart)) { startTable(tablePart, line); } else { - errors.duplicateTable(tableName, -1); + if (currentContainer.get(tablePart) instanceof Container) { + errors.duplicateTable(tableName, line.get()); + } else { + errors.tableDuplicatesKey(tablePart, line); + } break; } } diff --git a/src/test/java/com/moandjiezana/toml/ErrorMessagesTest.java b/src/test/java/com/moandjiezana/toml/ErrorMessagesTest.java index 87170d3..6736e80 100644 --- a/src/test/java/com/moandjiezana/toml/ErrorMessagesTest.java +++ b/src/test/java/com/moandjiezana/toml/ErrorMessagesTest.java @@ -120,4 +120,11 @@ public class ErrorMessagesTest { new Toml().parse("k = [ 1,\n 1.1 ]"); } + + @Test + public void should_fail_when_key_itn_root_is_overwritten_by_table() throws Exception { + e.expectMessage("Key already exists for table definition on line 2: [a]"); + + new Toml().parse("a=1\n [a]"); + } }