| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.tinkerpop.gremlin.util.config; |
| |
| import org.apache.commons.configuration.ConfigurationException; |
| import org.junit.Test; |
| import org.yaml.snakeyaml.DumperOptions; |
| import org.yaml.snakeyaml.Yaml; |
| |
| import java.io.Reader; |
| import java.io.StringReader; |
| import java.io.StringWriter; |
| import java.io.Writer; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| import java.util.LinkedHashMap; |
| import java.util.Map; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| /** |
| * @author Stephen Mallette (http://stephen.genoprime.com) |
| */ |
| public class YamlConfigurationTest { |
| |
| @Test(expected = ConfigurationException.class) |
| public void shouldThrowConfigurationExceptionIfLoadFails() throws Exception { |
| final YamlConfiguration config = new YamlConfiguration(); |
| config.load((Reader) null); |
| } |
| |
| @Test(expected = ConfigurationException.class) |
| public void shouldThrowConfigurationExceptionIfSaveFails() throws Exception { |
| final YamlConfiguration config = new YamlConfiguration(); |
| config.save((Writer) null); |
| } |
| |
| @Test |
| public void shouldLoadSaveConfiguration() throws Exception { |
| final YamlConfiguration config = new YamlConfiguration(); |
| final String testData = this.getTestInputData(); |
| final StringWriter writer = new StringWriter(); |
| config.load(new StringReader(testData)); |
| config.save(writer); |
| |
| assertEquals(testData, writer.getBuffer().toString()); |
| } |
| |
| @Test |
| public void shouldNavigationConfiguration() throws Exception { |
| final Map<Object, Object> testData = this.getTestData(); |
| final YamlConfiguration config = new YamlConfiguration(); |
| config.load(new StringReader(this.getTestInputData())); |
| |
| assertEquals(testData.get("integer"), config.getInt("integer")); |
| assertEquals(testData.get("string"), config.getString("string")); |
| assertEquals(testData.get("long"), config.getLong("long")); |
| assertEquals(testData.get("true-boolean"), config.getBoolean("true-boolean")); |
| assertEquals(testData.get("false-boolean"), config.getBoolean("false-boolean")); |
| assertEquals(testData.get("list"), config.getList("list.item")); |
| assertEquals(testData.get("42"), config.getString("42")); |
| |
| final Map<Object, Object> subData = this.getSubMap(); |
| assertEquals(subData.get("sub-string"), config.getString("map.sub-string")); |
| assertEquals("String1", config.getString("map.sub-list.item(1).item(0)")); |
| } |
| |
| @Test |
| public void shouldSupportXMLCompatibility() throws Exception { |
| final YamlConfiguration config = new YamlConfiguration(); |
| config.setXmlCompatibility(true); |
| config.load(new StringReader(this.getTestInputData())); |
| assertEquals(Arrays.asList("testUser1-Data", "testUser2-Data"), config.getList("users.user.item")); |
| } |
| |
| private String getTestInputData() { |
| final DumperOptions yamlOptions = new DumperOptions(); |
| Yaml yaml = new Yaml(yamlOptions); |
| |
| yamlOptions.setIndent(YamlConfiguration.DEFAULT_IDENT); |
| yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); |
| |
| return yaml.dump(this.getTestData()); |
| } |
| |
| private Map<Object, Object> getTestData() { |
| final HashMap<Object, Object> result = new LinkedHashMap<>(); |
| |
| result.put("integer", Integer.MIN_VALUE); |
| result.put("string", "String Value"); |
| result.put("long", Long.MAX_VALUE); |
| result.put("true-boolean", true); |
| result.put("false-boolean", false); |
| result.put("list", Arrays.asList(1, 2, 3, 4, 5)); |
| result.put("42", "The Answer"); |
| result.put("map", getSubMap()); |
| |
| final Map<Object, Object> users = new LinkedHashMap<>(); |
| users.put("testUser1", Arrays.asList("testUser1-Data")); |
| users.put("testUser2", Arrays.asList("testUser2-Data")); |
| result.put("users", users); |
| |
| //result.put("tricky-list", Arrays.asList(Arrays.asList(Arrays.asList(leafMap.keySet()), leafMap.values()))); |
| |
| return result; |
| } |
| |
| private Map<Object, Object> getSubMap() { |
| final Map<Object, Object> subMap = new LinkedHashMap<>(); |
| subMap.put("sub-string", "The String!"); |
| |
| final Map<Object, Object> leafMap = new LinkedHashMap<>(); |
| leafMap.put("test", "value"); |
| leafMap.put("long", Long.MIN_VALUE); |
| |
| subMap.put("sub-list", Arrays.asList(Integer.MIN_VALUE, Arrays.asList("String1", "String2"), Boolean.TRUE, leafMap)); |
| return subMap; |
| } |
| } |