mirror of
https://github.com/plexusorg/toml4j.git
synced 2024-12-29 11:42:15 +00:00
Merge remote-tracking branch 'upstream/wip' into merge
Conflicts: README.md src/main/java/com/moandjiezana/toml/Toml.java
This commit is contained in:
commit
f8f55a6f16
13 changed files with 365 additions and 40 deletions
|
@ -5,4 +5,4 @@ jdk:
|
||||||
- openjdk7
|
- openjdk7
|
||||||
- openjdk6
|
- openjdk6
|
||||||
after_success:
|
after_success:
|
||||||
- mvn clean test jacoco:report coveralls:jacoco
|
- mvn clean test jacoco:report coveralls:report
|
||||||
|
|
|
@ -5,10 +5,12 @@
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
* __BREAKING:__ Toml#getList(String), Toml#getTable(String) and Toml#getTables(String) return null when key is not found
|
* __BREAKING:__ Toml#getList(String), Toml#getTable(String) and Toml#getTables(String) return null when key is not found
|
||||||
|
* Removed trailing newline from error messages
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
* Support for underscores in numbers (the feature branch had accidentally not been merged! :( )
|
* Support for underscores in numbers (the feature branch had accidentally not been merged! :( )
|
||||||
|
* Set<Map.Entry> Toml#entrySet() cf. Reflection section in README
|
||||||
* Overloaded getters that take a default value. Thanks to __[udiabon](https://github.com/udiabon)__.
|
* Overloaded getters that take a default value. Thanks to __[udiabon](https://github.com/udiabon)__.
|
||||||
|
|
||||||
## 0.4.0 / 2015-02-16
|
## 0.4.0 / 2015-02-16
|
||||||
|
|
29
README.md
29
README.md
|
@ -204,6 +204,35 @@ Long tableD = toml.getLong("table.d"); // returns null, not 5, because of shallo
|
||||||
Long arrayD = toml.getLong("array[0].d"); // returns 3
|
Long arrayD = toml.getLong("array[0].d"); // returns 3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Reflection
|
||||||
|
|
||||||
|
`Toml#entrySet()` returns a Set of [Map.Entry](http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html) instances. Modifications to the returned Set are not reflected in the Toml instance. Note that Map.Entry#setValue() will throw an UnsupportedOperationException.
|
||||||
|
|
||||||
|
```java
|
||||||
|
for (Map.Entry<String, Object> entry : myToml.entrySet()) {
|
||||||
|
System.out.println(entry.getKey() + " " + entry.getValue());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also convert a Toml instance to a `Map<String, Object>`:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Toml toml = new Toml().parse("a = 1");
|
||||||
|
Map<String, Object> map = toml.to(Map.class);
|
||||||
|
```
|
||||||
|
|
||||||
|
`Toml#contains(String)` verifies that the instance contains a key of any type (primitive, table or array of tables) of the given name. `Toml#containsKey(String)`, `Toml#containsTable(String)` and `Toml#containsTableArray(String)` return true only if a key exists and is a primitive, table or array of tables, respectively. Compound keys can be used to check existence at any depth.
|
||||||
|
|
||||||
|
|
||||||
|
```java
|
||||||
|
Toml toml = new Toml().parse("a = 1");
|
||||||
|
|
||||||
|
toml.contains("a"); // true
|
||||||
|
toml.conatinsKey("a"); // true
|
||||||
|
toml.containsTable("a"); // false
|
||||||
|
toml.containsTableArray("a"); // false
|
||||||
|
```
|
||||||
|
|
||||||
### Serialization
|
### Serialization
|
||||||
|
|
||||||
You can serialize a `Toml` or any arbitrary object to a TOML string.
|
You can serialize a `Toml` or any arbitrary object to a TOML string.
|
||||||
|
|
14
pom.xml
14
pom.xml
|
@ -56,12 +56,6 @@
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
<version>2.3.1</version>
|
<version>2.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.easytesting</groupId>
|
|
||||||
<artifactId>fest-reflect</artifactId>
|
|
||||||
<version>1.4.1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
<artifactId>hamcrest-library</artifactId>
|
<artifactId>hamcrest-library</artifactId>
|
||||||
|
@ -74,7 +68,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.2</version>
|
<version>3.3</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.6</source>
|
<source>1.6</source>
|
||||||
<target>1.6</target>
|
<target>1.6</target>
|
||||||
|
@ -83,7 +77,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.jacoco</groupId>
|
<groupId>org.jacoco</groupId>
|
||||||
<artifactId>jacoco-maven-plugin</artifactId>
|
<artifactId>jacoco-maven-plugin</artifactId>
|
||||||
<version>0.7.2.201409121644</version>
|
<version>0.7.5.201505241946</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>prepare-agent</id>
|
<id>prepare-agent</id>
|
||||||
|
@ -96,7 +90,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.eluder.coveralls</groupId>
|
<groupId>org.eluder.coveralls</groupId>
|
||||||
<artifactId>coveralls-maven-plugin</artifactId>
|
<artifactId>coveralls-maven-plugin</artifactId>
|
||||||
<version>3.0.1</version>
|
<version>3.1.0</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
@ -114,7 +108,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-gpg-plugin</artifactId>
|
<artifactId>maven-gpg-plugin</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.6</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>sign-artifacts</id>
|
<id>sign-artifacts</id>
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Results {
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(": [")
|
.append(": [")
|
||||||
.append(table)
|
.append(table)
|
||||||
.append("]\n");
|
.append("]");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void tableDuplicatesKey(String table, AtomicInteger line) {
|
public void tableDuplicatesKey(String table, AtomicInteger line) {
|
||||||
|
@ -27,21 +27,19 @@ class Results {
|
||||||
.append(line.get())
|
.append(line.get())
|
||||||
.append(": [")
|
.append(": [")
|
||||||
.append(table)
|
.append(table)
|
||||||
.append("]\n");
|
.append("]");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void keyDuplicatesTable(String key, AtomicInteger line) {
|
public void keyDuplicatesTable(String key, AtomicInteger line) {
|
||||||
sb.append("Table already exists for key defined on line ")
|
sb.append("Table already exists for key defined on line ")
|
||||||
.append(line.get())
|
.append(line.get())
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(key)
|
.append(key);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void emptyImplicitTable(String table, int line) {
|
void emptyImplicitTable(String table, int line) {
|
||||||
sb.append("Invalid table definition due to empty implicit table name: ")
|
sb.append("Invalid table definition due to empty implicit table name: ")
|
||||||
.append(table)
|
.append(table);
|
||||||
.append("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidTable(String table, int line) {
|
void invalidTable(String table, int line) {
|
||||||
|
@ -49,7 +47,7 @@ class Results {
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(table)
|
.append(table)
|
||||||
.append("]\n");
|
.append("]");
|
||||||
}
|
}
|
||||||
|
|
||||||
void duplicateKey(String key, int line) {
|
void duplicateKey(String key, int line) {
|
||||||
|
@ -59,8 +57,7 @@ class Results {
|
||||||
.append(line);
|
.append(line);
|
||||||
}
|
}
|
||||||
sb.append(": ")
|
sb.append(": ")
|
||||||
.append(key)
|
.append(key);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidTextAfterIdentifier(Identifier identifier, char text, int line) {
|
void invalidTextAfterIdentifier(Identifier identifier, char text, int line) {
|
||||||
|
@ -68,24 +65,21 @@ class Results {
|
||||||
.append(identifier.getName())
|
.append(identifier.getName())
|
||||||
.append(" on line ")
|
.append(" on line ")
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(". Make sure to terminate the value or add a comment (#).")
|
.append(". Make sure to terminate the value or add a comment (#).");
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidKey(String key, int line) {
|
void invalidKey(String key, int line) {
|
||||||
sb.append("Invalid key on line ")
|
sb.append("Invalid key on line ")
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(key)
|
.append(key);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidTableArray(String tableArray, int line) {
|
void invalidTableArray(String tableArray, int line) {
|
||||||
sb.append("Invalid table array definition on line ")
|
sb.append("Invalid table array definition on line ")
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(tableArray)
|
.append(tableArray);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void invalidValue(String key, String value, int line) {
|
void invalidValue(String key, String value, int line) {
|
||||||
|
@ -94,16 +88,14 @@ class Results {
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(key)
|
.append(key)
|
||||||
.append(" = ")
|
.append(" = ")
|
||||||
.append(value)
|
.append(value);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void unterminatedKey(String key, int line) {
|
void unterminatedKey(String key, int line) {
|
||||||
sb.append("Key is not followed by an equals sign on line ")
|
sb.append("Key is not followed by an equals sign on line ")
|
||||||
.append(line)
|
.append(line)
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(key)
|
.append(key);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void unterminated(String key, String value, int line) {
|
void unterminated(String key, String value, int line) {
|
||||||
|
@ -112,15 +104,13 @@ class Results {
|
||||||
.append(": ")
|
.append(": ")
|
||||||
.append(key)
|
.append(key)
|
||||||
.append(" = ")
|
.append(" = ")
|
||||||
.append(value.trim())
|
.append(value.trim());
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void heterogenous(String key, int line) {
|
public void heterogenous(String key, int line) {
|
||||||
sb.append(key)
|
sb.append(key)
|
||||||
.append(" becomes a heterogeneous array on line ")
|
.append(" becomes a heterogeneous array on line ")
|
||||||
.append(line)
|
.append(line);
|
||||||
.append('\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasErrors() {
|
boolean hasErrors() {
|
||||||
|
|
|
@ -1,11 +1,24 @@
|
||||||
package com.moandjiezana.toml;
|
package com.moandjiezana.toml;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Provides access to the keys and tables in a TOML data source.</p>
|
* <p>Provides access to the keys and tables in a TOML data source.</p>
|
||||||
*
|
*
|
||||||
|
@ -26,7 +39,7 @@ import java.util.*;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Toml {
|
public class Toml {
|
||||||
|
|
||||||
private static final Gson DEFAULT_GSON = new Gson();
|
private static final Gson DEFAULT_GSON = new Gson();
|
||||||
|
|
||||||
private Map<String, Object> values = new HashMap<String, Object>();
|
private Map<String, Object> values = new HashMap<String, Object>();
|
||||||
|
@ -220,6 +233,44 @@ public class Toml {
|
||||||
return tables;
|
return tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key a key name, can be compound (eg. a.b.c)
|
||||||
|
* @return true if key is present
|
||||||
|
*/
|
||||||
|
public boolean contains(String key) {
|
||||||
|
return get(key) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key a key name, can be compound (eg. a.b.c)
|
||||||
|
* @return true if key is present and is a primitive
|
||||||
|
*/
|
||||||
|
public boolean containsKey(String key) {
|
||||||
|
Object object = get(key);
|
||||||
|
|
||||||
|
return object != null && !(object instanceof Map) && !(object instanceof List);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key a key name, can be compound (eg. a.b.c)
|
||||||
|
* @return true if key is present and is a table
|
||||||
|
*/
|
||||||
|
public boolean containsTable(String key) {
|
||||||
|
Object object = get(key);
|
||||||
|
|
||||||
|
return object != null && (object instanceof Map);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key a key name, can be compound (eg. a.b.c)
|
||||||
|
* @return true if key is present and is a table array
|
||||||
|
*/
|
||||||
|
public boolean containsTableArray(String key) {
|
||||||
|
Object object = get(key);
|
||||||
|
|
||||||
|
return object != null && (object instanceof List);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return values.isEmpty();
|
return values.isEmpty();
|
||||||
}
|
}
|
||||||
|
@ -268,6 +319,58 @@ public class Toml {
|
||||||
|
|
||||||
return DEFAULT_GSON.fromJson(json, targetClass);
|
return DEFAULT_GSON.fromJson(json, targetClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a {@link Set} of Map.Entry instances. Modifications to the {@link Set} are not reflected in this Toml instance. Entries are immutable, so {@link Map.Entry#setValue(Object)} throws an UnsupportedOperationException.
|
||||||
|
*/
|
||||||
|
public Set<Map.Entry<String,Object>> entrySet() {
|
||||||
|
Set<Map.Entry<String, Object>> entries = new LinkedHashSet<Map.Entry<String, Object>>();
|
||||||
|
|
||||||
|
for (Map.Entry<String, Object> entry : values.entrySet()) {
|
||||||
|
Class<? extends Object> entryClass = entry.getValue().getClass();
|
||||||
|
|
||||||
|
if (Map.class.isAssignableFrom(entryClass)) {
|
||||||
|
entries.add(new Toml.Entry(entry.getKey(), getTable(entry.getKey())));
|
||||||
|
} else if (List.class.isAssignableFrom(entryClass)) {
|
||||||
|
List<?> value = (List<?>) entry.getValue();
|
||||||
|
if (!value.isEmpty() && value.get(0) instanceof Map) {
|
||||||
|
entries.add(new Toml.Entry(entry.getKey(), getTables(entry.getKey())));
|
||||||
|
} else {
|
||||||
|
entries.add(new Toml.Entry(entry.getKey(), value));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
entries.add(new Toml.Entry(entry.getKey(), entry.getValue()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Entry implements Map.Entry<String, Object> {
|
||||||
|
|
||||||
|
private final String key;
|
||||||
|
private final Object value;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object setValue(Object value) {
|
||||||
|
throw new UnsupportedOperationException("TOML entry values cannot be changed.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Entry(String key, Object value) {
|
||||||
|
this.key = key;
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializes the values of this Toml instance into TOML.
|
* Serializes the values of this Toml instance into TOML.
|
||||||
|
@ -324,9 +427,9 @@ public class Toml {
|
||||||
|
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Toml(Toml defaults, Map<String, Object> values) {
|
private Toml(Toml defaults, Map<String, Object> values) {
|
||||||
this.values = values != null ? values : Collections.<String, Object>emptyMap();
|
this.values = values;
|
||||||
this.defaults = defaults;
|
this.defaults = defaults;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
79
src/test/java/com/moandjiezana/toml/ContainsTest.java
Normal file
79
src/test/java/com/moandjiezana/toml/ContainsTest.java
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
package com.moandjiezana.toml;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ContainsTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_contain_top_level_of_any_type() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("a = 1 \n [b] \n b1 = 1 \n [[c]] \n c1 = 1");
|
||||||
|
|
||||||
|
assertTrue(toml.contains("a"));
|
||||||
|
assertTrue(toml.contains("b"));
|
||||||
|
assertTrue(toml.contains("c"));
|
||||||
|
assertFalse(toml.contains("d"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_contain_nested_of_any_type() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("[a] \n a1 = 1 \n [[b]] \n b1 = 1 \n [[b]] \n b1 = 2 \n b2 = 3");
|
||||||
|
|
||||||
|
assertTrue(toml.contains("a.a1"));
|
||||||
|
assertTrue(toml.contains("b[0].b1"));
|
||||||
|
assertTrue(toml.contains("b[1].b1"));
|
||||||
|
assertFalse(toml.contains("b[2].b1"));
|
||||||
|
assertFalse(toml.contains("c.d"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_contain_key() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("a = 1 \n [b] \n b1 = 1 \n [[c]] \n c1 = 1");
|
||||||
|
|
||||||
|
assertTrue(toml.containsKey("a"));
|
||||||
|
assertTrue(toml.containsKey("b.b1"));
|
||||||
|
assertTrue(toml.containsKey("c[0].c1"));
|
||||||
|
assertFalse(toml.containsKey("b"));
|
||||||
|
assertFalse(toml.containsKey("c"));
|
||||||
|
assertFalse(toml.containsKey("d"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_contain_table() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("a = 1 \n [b] \n b1 = 1 \n [b.b2] \n [[c]] \n c1 = 1 \n [c.c2]");
|
||||||
|
|
||||||
|
assertTrue(toml.containsTable("b"));
|
||||||
|
assertTrue(toml.containsTable("b.b2"));
|
||||||
|
assertTrue(toml.containsTable("c[0].c2"));
|
||||||
|
assertFalse(toml.containsTable("a"));
|
||||||
|
assertFalse(toml.containsTable("b.b1"));
|
||||||
|
assertFalse(toml.containsTable("c"));
|
||||||
|
assertFalse(toml.containsTable("c[0].c1"));
|
||||||
|
assertFalse(toml.containsTable("d"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_contain_table_array() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("a = 1 \n [b] \n b1 = 1 \n [[c]] \n c1 = 1 \n [c.c2] \n [[c]] \n [[c.c3]] \n c4 = 4");
|
||||||
|
|
||||||
|
assertTrue(toml.containsTableArray("c"));
|
||||||
|
assertTrue(toml.containsTableArray("c[1].c3"));
|
||||||
|
assertFalse(toml.containsTableArray("a"));
|
||||||
|
assertFalse(toml.containsTableArray("b"));
|
||||||
|
assertFalse(toml.containsTableArray("b.b1"));
|
||||||
|
assertFalse(toml.containsTableArray("c[1].c3[0].c4"));
|
||||||
|
assertFalse(toml.containsTableArray("d"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_not_contain_when_parent_table_is_missing() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("a = \"1\"");
|
||||||
|
|
||||||
|
assertFalse(toml.contains("b.b1"));
|
||||||
|
assertFalse(toml.containsKey("b.b1"));
|
||||||
|
assertFalse(toml.containsTable("b.b1"));
|
||||||
|
assertFalse(toml.containsTableArray("b.b1"));
|
||||||
|
}
|
||||||
|
}
|
115
src/test/java/com/moandjiezana/toml/IterationTest.java
Normal file
115
src/test/java/com/moandjiezana/toml/IterationTest.java
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
package com.moandjiezana.toml;
|
||||||
|
|
||||||
|
import static java.util.Arrays.asList;
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
|
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||||
|
import static org.hamcrest.Matchers.empty;
|
||||||
|
import static org.hamcrest.Matchers.hasEntry;
|
||||||
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
|
import static org.hamcrest.Matchers.instanceOf;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.rules.ExpectedException;
|
||||||
|
|
||||||
|
import com.moandjiezana.toml.testutils.Utils;
|
||||||
|
|
||||||
|
public class IterationTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final ExpectedException expectedException = ExpectedException.none();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_iterate_over_primitive() throws Exception {
|
||||||
|
Toml toml = new Toml().parse(file("long"));
|
||||||
|
Map.Entry<String, Object> entry = toml.entrySet().iterator().next();
|
||||||
|
|
||||||
|
assertEquals("long", entry.getKey());
|
||||||
|
assertEquals(2L, entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void should_iterate_over_list() throws Exception {
|
||||||
|
Toml toml = new Toml().parse(file("list"));
|
||||||
|
Map.Entry<String, Object> entry = toml.entrySet().iterator().next();
|
||||||
|
|
||||||
|
assertEquals("list", entry.getKey());
|
||||||
|
assertThat((List<String>) entry.getValue(), contains("a", "b", "c"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void should_iterate_over_empty_list() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("list = []");
|
||||||
|
Map.Entry<String, Object> entry = toml.entrySet().iterator().next();
|
||||||
|
|
||||||
|
assertEquals("list", entry.getKey());
|
||||||
|
assertThat((List<String>) entry.getValue(), empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_iterate_over_table() throws Exception {
|
||||||
|
Toml toml = new Toml().parse(file("table"));
|
||||||
|
Map.Entry<String, Object> entry = toml.entrySet().iterator().next();
|
||||||
|
|
||||||
|
assertEquals("table", entry.getKey());
|
||||||
|
assertEquals("a", ((Toml) entry.getValue()).getString("a"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void should_iterate_over_table_array() throws Exception {
|
||||||
|
Toml toml = new Toml().parse(file("table_array"));
|
||||||
|
|
||||||
|
Map.Entry<String, Object> entry = toml.entrySet().iterator().next();
|
||||||
|
List<Toml> tableArray = (List<Toml>) entry.getValue();
|
||||||
|
|
||||||
|
assertEquals("table_array", entry.getKey());
|
||||||
|
assertThat(tableArray, contains(instanceOf(Toml.class), instanceOf(Toml.class)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void should_iterate_over_multiple_entries() throws Exception {
|
||||||
|
Toml toml = new Toml().parse(file("multiple"));
|
||||||
|
|
||||||
|
Map<String, Object> entries = new HashMap<String, Object>();
|
||||||
|
for (Map.Entry<String, Object> entry : toml.entrySet()) {
|
||||||
|
entries.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
assertThat(entries.keySet(), containsInAnyOrder("a", "b", "c", "e"));
|
||||||
|
assertThat(entries, hasEntry("a", (Object) "a"));
|
||||||
|
assertThat(entries, hasEntry("b", (Object) asList(1L, 2L, 3L)));
|
||||||
|
assertTrue(((Toml) entries.get("c")).getBoolean("d"));
|
||||||
|
assertThat(((List<Toml>) entries.get("e")), hasSize(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_not_support_setValue_method() throws Exception {
|
||||||
|
Map.Entry<String, Object> entry = new Toml().parse("a = 1").entrySet().iterator().next();
|
||||||
|
|
||||||
|
expectedException.expect(UnsupportedOperationException.class);
|
||||||
|
entry.setValue(2L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_not_iterate_over_empty_toml() throws Exception {
|
||||||
|
Toml toml = new Toml().parse("");
|
||||||
|
|
||||||
|
assertThat(toml.entrySet(), empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
private File file(String name) {
|
||||||
|
return Utils.file(getClass(), "/IteratorTest/" + name);
|
||||||
|
}
|
||||||
|
}
|
1
src/test/resources/IteratorTest/list.toml
Normal file
1
src/test/resources/IteratorTest/list.toml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
list = ["a", "b", "c"]
|
1
src/test/resources/IteratorTest/long.toml
Normal file
1
src/test/resources/IteratorTest/long.toml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
long = 2
|
7
src/test/resources/IteratorTest/multiple.toml
Normal file
7
src/test/resources/IteratorTest/multiple.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
a = "a"
|
||||||
|
b = [1, 2, 3]
|
||||||
|
|
||||||
|
[c]
|
||||||
|
d = true
|
||||||
|
|
||||||
|
[[e]]
|
1
src/test/resources/IteratorTest/table.toml
Normal file
1
src/test/resources/IteratorTest/table.toml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
table = { a = "a" }
|
3
src/test/resources/IteratorTest/table_array.toml
Normal file
3
src/test/resources/IteratorTest/table_array.toml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[[table_array]]
|
||||||
|
|
||||||
|
[[table_array]]
|
Loading…
Reference in a new issue