Add JsonConfiguration support to bungeecord-config
Thanks @FelixKlauke for the idea in #2364, however this implementation was designed to mirror as much of the existing YamlConfiguration as possible and have Gson as an optional depend.
This commit is contained in:
parent
cdacc0b1be
commit
9e8ab747e4
@ -49,5 +49,11 @@
|
|||||||
<version>${netty.version}</version>
|
<version>${netty.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.yaml</groupId>
|
||||||
|
<artifactId>snakeyaml</artifactId>
|
||||||
|
<version>1.25</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -19,11 +19,19 @@
|
|||||||
<description>Generic java configuration API intended for use with BungeeCord</description>
|
<description>Generic java configuration API intended for use with BungeeCord</description>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.8.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.yaml</groupId>
|
<groupId>org.yaml</groupId>
|
||||||
<artifactId>snakeyaml</artifactId>
|
<artifactId>snakeyaml</artifactId>
|
||||||
<version>1.25</version>
|
<version>1.25</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -15,7 +15,21 @@ public abstract class ConfigurationProvider
|
|||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
providers.put( YamlConfiguration.class, new YamlConfiguration() );
|
try
|
||||||
|
{
|
||||||
|
providers.put( YamlConfiguration.class, new YamlConfiguration() );
|
||||||
|
} catch ( NoClassDefFoundError ex )
|
||||||
|
{
|
||||||
|
// Ignore, no SnakeYAML
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
providers.put( JsonConfiguration.class, new JsonConfiguration() );
|
||||||
|
} catch ( NoClassDefFoundError ex )
|
||||||
|
{
|
||||||
|
// Ignore, no Gson
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ConfigurationProvider getProvider(Class<? extends ConfigurationProvider> provider)
|
public static ConfigurationProvider getProvider(Class<? extends ConfigurationProvider> provider)
|
||||||
|
@ -0,0 +1,114 @@
|
|||||||
|
package net.md_5.bungee.config;
|
||||||
|
|
||||||
|
import com.google.common.base.Charsets;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.io.Reader;
|
||||||
|
import java.io.Writer;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@NoArgsConstructor(access = AccessLevel.PACKAGE)
|
||||||
|
public class JsonConfiguration extends ConfigurationProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
private final Gson json = new GsonBuilder().serializeNulls().setPrettyPrinting().registerTypeAdapter( Configuration.class, new JsonSerializer<Configuration>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Configuration src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
return context.serialize( ( (Configuration) src ).self );
|
||||||
|
}
|
||||||
|
} ).create();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(Configuration config, File file) throws IOException
|
||||||
|
{
|
||||||
|
try ( Writer writer = new OutputStreamWriter( new FileOutputStream( file ), Charsets.UTF_8 ) )
|
||||||
|
{
|
||||||
|
save( config, writer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(Configuration config, Writer writer)
|
||||||
|
{
|
||||||
|
json.toJson( config.self, writer );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(File file) throws IOException
|
||||||
|
{
|
||||||
|
return load( file, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(File file, Configuration defaults) throws IOException
|
||||||
|
{
|
||||||
|
try ( FileInputStream is = new FileInputStream( file ) )
|
||||||
|
{
|
||||||
|
return load( is, defaults );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(Reader reader)
|
||||||
|
{
|
||||||
|
return load( reader, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Configuration load(Reader reader, Configuration defaults)
|
||||||
|
{
|
||||||
|
Map<String, Object> map = json.fromJson( reader, LinkedHashMap.class );
|
||||||
|
if ( map == null )
|
||||||
|
{
|
||||||
|
map = new LinkedHashMap<>();
|
||||||
|
}
|
||||||
|
return new Configuration( map, defaults );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(InputStream is)
|
||||||
|
{
|
||||||
|
return load( is, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(InputStream is, Configuration defaults)
|
||||||
|
{
|
||||||
|
return load( new InputStreamReader( is, Charsets.UTF_8 ), defaults );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Configuration load(String string)
|
||||||
|
{
|
||||||
|
return load( string, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Configuration load(String string, Configuration defaults)
|
||||||
|
{
|
||||||
|
Map<String, Object> map = json.fromJson( string, LinkedHashMap.class );
|
||||||
|
if ( map == null )
|
||||||
|
{
|
||||||
|
map = new LinkedHashMap<>();
|
||||||
|
}
|
||||||
|
return new Configuration( map, defaults );
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,229 @@
|
|||||||
|
package net.md_5.bungee.config;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.Parameterized;
|
||||||
|
import org.junit.runners.Parameterized.Parameters;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RunWith(Parameterized.class)
|
||||||
|
public class CompoundConfigurationTest
|
||||||
|
{
|
||||||
|
|
||||||
|
@Parameters(name = "{0}")
|
||||||
|
public static Iterable<Object[]> data()
|
||||||
|
{
|
||||||
|
// CHECKSTYLE:OFF
|
||||||
|
return Arrays.asList( new Object[][]
|
||||||
|
{
|
||||||
|
{
|
||||||
|
// provider
|
||||||
|
YamlConfiguration.class,
|
||||||
|
// testDocument
|
||||||
|
""
|
||||||
|
+ "receipt: Oz-Ware Purchase Invoice\n"
|
||||||
|
+ "date: 2012-08-06\n"
|
||||||
|
+ "customer:\n"
|
||||||
|
+ " given: Dorothy\n"
|
||||||
|
+ " family: Gale\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "items:\n"
|
||||||
|
+ " - part_no: A4786\n"
|
||||||
|
+ " descrip: Water Bucket (Filled)\n"
|
||||||
|
+ " price: 1.47\n"
|
||||||
|
+ " quantity: 4\n"
|
||||||
|
+ "\n"
|
||||||
|
+ " - part_no: E1628\n"
|
||||||
|
+ " descrip: High Heeled \"Ruby\" Slippers\n"
|
||||||
|
+ " size: 8\n"
|
||||||
|
+ " price: 100.27\n"
|
||||||
|
+ " quantity: 1\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "bill-to: &id001\n"
|
||||||
|
+ " street: |\n"
|
||||||
|
+ " 123 Tornado Alley\n"
|
||||||
|
+ " Suite 16\n"
|
||||||
|
+ " city: East Centerville\n"
|
||||||
|
+ " state: KS\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "ship-to: *id001\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "specialDelivery: >\n"
|
||||||
|
+ " Follow the Yellow Brick\n"
|
||||||
|
+ " Road to the Emerald City.\n"
|
||||||
|
+ " Pay no attention to the\n"
|
||||||
|
+ " man behind the curtain.",
|
||||||
|
// numberTest
|
||||||
|
""
|
||||||
|
+ "someKey:\n"
|
||||||
|
+ " 1: 1\n"
|
||||||
|
+ " 2: 2\n"
|
||||||
|
+ " 3: 3\n"
|
||||||
|
+ " 4: 4",
|
||||||
|
// nullTest
|
||||||
|
""
|
||||||
|
+ "null:\n"
|
||||||
|
+ " null: object\n"
|
||||||
|
+ " object: null\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// provider
|
||||||
|
JsonConfiguration.class,
|
||||||
|
// testDocument
|
||||||
|
""
|
||||||
|
+ "{\n"
|
||||||
|
+ " \"customer\": {\n"
|
||||||
|
+ " \"given\": \"Dorothy\", \n"
|
||||||
|
+ " \"family\": \"Gale\"\n"
|
||||||
|
+ " }, \n"
|
||||||
|
+ " \"ship-to\": {\n"
|
||||||
|
+ " \"city\": \"East Centerville\", \n"
|
||||||
|
+ " \"state\": \"KS\", \n"
|
||||||
|
+ " \"street\": \"123 Tornado Alley\\nSuite 16\\n\"\n"
|
||||||
|
+ " }, \n"
|
||||||
|
+ " \"bill-to\": {\n"
|
||||||
|
+ " \"city\": \"East Centerville\", \n"
|
||||||
|
+ " \"state\": \"KS\", \n"
|
||||||
|
+ " \"street\": \"123 Tornado Alley\\nSuite 16\\n\"\n"
|
||||||
|
+ " }, \n"
|
||||||
|
+ " \"date\": \"2012-08-06\", \n"
|
||||||
|
+ " \"items\": [\n"
|
||||||
|
+ " {\n"
|
||||||
|
+ " \"part_no\": \"A4786\", \n"
|
||||||
|
+ " \"price\": 1.47, \n"
|
||||||
|
+ " \"descrip\": \"Water Bucket (Filled)\", \n"
|
||||||
|
+ " \"quantity\": 4\n"
|
||||||
|
+ " }, \n"
|
||||||
|
+ " {\n"
|
||||||
|
+ " \"part_no\": \"E1628\", \n"
|
||||||
|
+ " \"descrip\": \"High Heeled \\\"Ruby\\\" Slippers\", \n"
|
||||||
|
+ " \"price\": 100.27, \n"
|
||||||
|
+ " \"quantity\": 1, \n"
|
||||||
|
+ " \"size\": 8\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ " ], \n"
|
||||||
|
+ " \"receipt\": \"Oz-Ware Purchase Invoice\", \n"
|
||||||
|
+ " \"specialDelivery\": \"Follow the Yellow Brick Road to the Emerald City. Pay no attention to the man behind the curtain.\"\n"
|
||||||
|
+ "}",
|
||||||
|
// numberTest
|
||||||
|
""
|
||||||
|
+ "{\n"
|
||||||
|
+ " \"someKey\": {\n"
|
||||||
|
+ " \"1\": 1, \n"
|
||||||
|
+ " \"2\": 2, \n"
|
||||||
|
+ " \"3\": 3, \n"
|
||||||
|
+ " \"4\": 4\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ "}",
|
||||||
|
// nullTest
|
||||||
|
""
|
||||||
|
+ "{\n"
|
||||||
|
+ " \"null\": {\n"
|
||||||
|
+ " \"null\": \"object\", \n"
|
||||||
|
+ " \"object\": null\n"
|
||||||
|
+ " }\n"
|
||||||
|
+ "}"
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
// CHECKSTYLE:ON
|
||||||
|
}
|
||||||
|
//
|
||||||
|
private final Class<? extends ConfigurationProvider> provider;
|
||||||
|
private final String testDocument;
|
||||||
|
private final String numberTest;
|
||||||
|
private final String nullTest;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConfig() throws Exception
|
||||||
|
{
|
||||||
|
Configuration conf = ConfigurationProvider.getProvider( provider ).load( testDocument );
|
||||||
|
testSection( conf );
|
||||||
|
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
ConfigurationProvider.getProvider( provider ).save( conf, sw );
|
||||||
|
|
||||||
|
// Check nulls were saved, see #1094
|
||||||
|
Assert.assertFalse( "Config contains null", sw.toString().contains( "null" ) );
|
||||||
|
|
||||||
|
conf = ConfigurationProvider.getProvider( provider ).load( new StringReader( sw.toString() ) );
|
||||||
|
conf.set( "receipt", "Oz-Ware Purchase Invoice" ); // Add it back
|
||||||
|
testSection( conf );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void testSection(Configuration conf)
|
||||||
|
{
|
||||||
|
Assert.assertEquals( "receipt", "Oz-Ware Purchase Invoice", conf.getString( "receipt" ) );
|
||||||
|
// Assert.assertEquals( "date", "2012-08-06", conf.get( "date" ).toString() );
|
||||||
|
|
||||||
|
Configuration customer = conf.getSection( "customer" );
|
||||||
|
Assert.assertEquals( "customer.given", "Dorothy", customer.getString( "given" ) );
|
||||||
|
Assert.assertEquals( "customer.given", "Dorothy", conf.getString( "customer.given" ) );
|
||||||
|
|
||||||
|
List items = conf.getList( "items" );
|
||||||
|
Map item = (Map) items.get( 0 );
|
||||||
|
Assert.assertEquals( "items[0].part_no", "A4786", item.get( "part_no" ) );
|
||||||
|
|
||||||
|
conf.set( "receipt", null );
|
||||||
|
Assert.assertEquals( null, conf.get( "receipt" ) );
|
||||||
|
Assert.assertEquals( "foo", conf.get( "receipt", "foo" ) );
|
||||||
|
|
||||||
|
Configuration newSection = conf.getSection( "new.section" );
|
||||||
|
newSection.set( "value", "foo" );
|
||||||
|
Assert.assertEquals( "foo", conf.get( "new.section.value" ) );
|
||||||
|
|
||||||
|
conf.set( "other.new.section", "bar" );
|
||||||
|
Assert.assertEquals( "bar", conf.get( "other.new.section" ) );
|
||||||
|
|
||||||
|
Assert.assertTrue( conf.contains( "customer.given" ) );
|
||||||
|
Assert.assertTrue( customer.contains( "given" ) );
|
||||||
|
|
||||||
|
Assert.assertFalse( conf.contains( "customer.foo" ) );
|
||||||
|
Assert.assertFalse( customer.contains( "foo" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNumberedKeys()
|
||||||
|
{
|
||||||
|
Configuration conf = ConfigurationProvider.getProvider( provider ).load( numberTest );
|
||||||
|
|
||||||
|
Configuration section = conf.getSection( "someKey" );
|
||||||
|
for ( String key : section.getKeys() )
|
||||||
|
{
|
||||||
|
// empty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNull()
|
||||||
|
{
|
||||||
|
Configuration conf = ConfigurationProvider.getProvider( provider ).load( nullTest );
|
||||||
|
|
||||||
|
Assert.assertEquals( "object", conf.get( "null.null" ) );
|
||||||
|
Assert.assertEquals( "object", conf.getSection( "null" ).get( "null" ) );
|
||||||
|
|
||||||
|
Assert.assertEquals( null, conf.get( "null.object" ) );
|
||||||
|
Assert.assertEquals( "", conf.getString( "null.object" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMapAddition()
|
||||||
|
{
|
||||||
|
Configuration conf = ConfigurationProvider.getProvider( provider ).load( testDocument );
|
||||||
|
|
||||||
|
conf.set( "addition", Collections.singletonMap( "foo", "bar" ) );
|
||||||
|
|
||||||
|
// Order matters
|
||||||
|
Assert.assertEquals( "bar", conf.getSection( "addition" ).getString( "foo" ) );
|
||||||
|
Assert.assertEquals( "bar", conf.getString( "addition.foo" ) );
|
||||||
|
|
||||||
|
Assert.assertTrue( conf.get( "addition" ) instanceof Configuration );
|
||||||
|
}
|
||||||
|
}
|
@ -1,143 +0,0 @@
|
|||||||
package net.md_5.bungee.config;
|
|
||||||
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class YamlConfigurationTest
|
|
||||||
{
|
|
||||||
|
|
||||||
private static final String TEST_DOCUMENT = ""
|
|
||||||
+ "receipt: Oz-Ware Purchase Invoice\n"
|
|
||||||
+ "date: 2012-08-06\n"
|
|
||||||
+ "customer:\n"
|
|
||||||
+ " given: Dorothy\n"
|
|
||||||
+ " family: Gale\n"
|
|
||||||
+ "\n"
|
|
||||||
+ "items:\n"
|
|
||||||
+ " - part_no: A4786\n"
|
|
||||||
+ " descrip: Water Bucket (Filled)\n"
|
|
||||||
+ " price: 1.47\n"
|
|
||||||
+ " quantity: 4\n"
|
|
||||||
+ "\n"
|
|
||||||
+ " - part_no: E1628\n"
|
|
||||||
+ " descrip: High Heeled \"Ruby\" Slippers\n"
|
|
||||||
+ " size: 8\n"
|
|
||||||
+ " price: 100.27\n"
|
|
||||||
+ " quantity: 1\n"
|
|
||||||
+ "\n"
|
|
||||||
+ "bill-to: &id001\n"
|
|
||||||
+ " street: |\n"
|
|
||||||
+ " 123 Tornado Alley\n"
|
|
||||||
+ " Suite 16\n"
|
|
||||||
+ " city: East Centerville\n"
|
|
||||||
+ " state: KS\n"
|
|
||||||
+ "\n"
|
|
||||||
+ "ship-to: *id001\n"
|
|
||||||
+ "\n"
|
|
||||||
+ "specialDelivery: >\n"
|
|
||||||
+ " Follow the Yellow Brick\n"
|
|
||||||
+ " Road to the Emerald City.\n"
|
|
||||||
+ " Pay no attention to the\n"
|
|
||||||
+ " man behind the curtain.";
|
|
||||||
private static final String NUMBER_TEST = ""
|
|
||||||
+ "someKey:\n"
|
|
||||||
+ " 1: 1\n"
|
|
||||||
+ " 2: 2\n"
|
|
||||||
+ " 3: 3\n"
|
|
||||||
+ " 4: 4";
|
|
||||||
private static final String NULL_TEST = ""
|
|
||||||
+ "null:\n"
|
|
||||||
+ " null: object\n"
|
|
||||||
+ " object: null\n";
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testConfig() throws Exception
|
|
||||||
{
|
|
||||||
Configuration conf = ConfigurationProvider.getProvider( YamlConfiguration.class ).load( TEST_DOCUMENT );
|
|
||||||
testSection( conf );
|
|
||||||
|
|
||||||
StringWriter sw = new StringWriter();
|
|
||||||
ConfigurationProvider.getProvider( YamlConfiguration.class ).save( conf, sw );
|
|
||||||
|
|
||||||
// Check nulls were saved, see #1094
|
|
||||||
Assert.assertFalse( "Config contains null", sw.toString().contains( "null" ) );
|
|
||||||
|
|
||||||
conf = ConfigurationProvider.getProvider( YamlConfiguration.class ).load( new StringReader( sw.toString() ) );
|
|
||||||
conf.set( "receipt", "Oz-Ware Purchase Invoice" ); // Add it back
|
|
||||||
testSection( conf );
|
|
||||||
}
|
|
||||||
|
|
||||||
private void testSection(Configuration conf)
|
|
||||||
{
|
|
||||||
Assert.assertEquals( "receipt", "Oz-Ware Purchase Invoice", conf.getString( "receipt" ) );
|
|
||||||
// Assert.assertEquals( "date", "2012-08-06", conf.get( "date" ).toString() );
|
|
||||||
|
|
||||||
Configuration customer = conf.getSection( "customer" );
|
|
||||||
Assert.assertEquals( "customer.given", "Dorothy", customer.getString( "given" ) );
|
|
||||||
Assert.assertEquals( "customer.given", "Dorothy", conf.getString( "customer.given" ) );
|
|
||||||
|
|
||||||
List items = conf.getList( "items" );
|
|
||||||
Map item = (Map) items.get( 0 );
|
|
||||||
Assert.assertEquals( "items[0].part_no", "A4786", item.get( "part_no" ) );
|
|
||||||
|
|
||||||
conf.set( "receipt", null );
|
|
||||||
Assert.assertEquals( null, conf.get( "receipt" ) );
|
|
||||||
Assert.assertEquals( "foo", conf.get( "receipt", "foo" ) );
|
|
||||||
|
|
||||||
Configuration newSection = conf.getSection( "new.section" );
|
|
||||||
newSection.set( "value", "foo" );
|
|
||||||
Assert.assertEquals( "foo", conf.get( "new.section.value" ) );
|
|
||||||
|
|
||||||
conf.set( "other.new.section", "bar" );
|
|
||||||
Assert.assertEquals( "bar", conf.get( "other.new.section" ) );
|
|
||||||
|
|
||||||
Assert.assertTrue( conf.contains( "customer.given" ) );
|
|
||||||
Assert.assertTrue( customer.contains( "given" ) );
|
|
||||||
|
|
||||||
Assert.assertFalse( conf.contains( "customer.foo" ) );
|
|
||||||
Assert.assertFalse( customer.contains( "foo" ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNumberedKeys()
|
|
||||||
{
|
|
||||||
Configuration conf = ConfigurationProvider.getProvider( YamlConfiguration.class ).load( NUMBER_TEST );
|
|
||||||
|
|
||||||
Configuration section = conf.getSection( "someKey" );
|
|
||||||
for ( String key : section.getKeys() )
|
|
||||||
{
|
|
||||||
// empty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testNull()
|
|
||||||
{
|
|
||||||
Configuration conf = ConfigurationProvider.getProvider( YamlConfiguration.class ).load( NULL_TEST );
|
|
||||||
|
|
||||||
Assert.assertEquals( "object", conf.get( "null.null" ) );
|
|
||||||
Assert.assertEquals( "object", conf.getSection( "null" ).get( "null" ) );
|
|
||||||
|
|
||||||
Assert.assertEquals( null, conf.get( "null.object" ) );
|
|
||||||
Assert.assertEquals( "", conf.getString( "null.object" ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testMapAddition()
|
|
||||||
{
|
|
||||||
Configuration conf = ConfigurationProvider.getProvider( YamlConfiguration.class ).load( TEST_DOCUMENT );
|
|
||||||
|
|
||||||
conf.set( "addition", Collections.singletonMap( "foo", "bar" ) );
|
|
||||||
|
|
||||||
// Order matters
|
|
||||||
Assert.assertEquals( "bar", conf.getSection( "addition" ).getString( "foo" ) );
|
|
||||||
Assert.assertEquals( "bar", conf.getString( "addition.foo" ) );
|
|
||||||
|
|
||||||
Assert.assertTrue( conf.get( "addition" ) instanceof Configuration );
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user