package nl.hsac.fitnesse.fixture.util; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; /** * Tests MapHelper. */ public class MapHelperTest { private MapHelper helper = new MapHelper(); @Test public void testGetValue() { Map<String, Object> map = new HashMap<>(); Map<String, Object> nestedMap = new HashMap<>(); Map<String, Object> nestedNestedMap = new HashMap<>(); map.put("list", Arrays.asList(nestedMap)); nestedMap.put("nestedList", Arrays.asList("", nestedNestedMap)); nestedNestedMap.put("node", 12); assertEquals(Arrays.asList(nestedMap), helper.getValue(map, "list")); assertEquals(nestedMap, helper.getValue(map, "list[0]")); assertEquals(nestedNestedMap, helper.getValue(map, "list[0].nestedList[1]")); assertEquals(12, helper.getValue(map, "list[0].nestedList[1].node")); } @Test public void testSetValue() { Map<String, Object> map = new HashMap<>(); Map<String, Object> nestedMap = new HashMap<>(); Map<String, Object> nestedNestedMap = new HashMap<>(); map.put("list", new ArrayList<Object>(Arrays.asList(nestedMap))); nestedMap.put("nestedList", Arrays.asList("", nestedNestedMap)); nestedNestedMap.put("node", 12); helper.setValueForIn(11, "intNode", map); assertEquals(11, map.get("intNode")); helper.setValueForIn("13", "node", map); assertEquals("13", map.get("node")); helper.setValueForIn("13", "list[0].nestedList[1].node", map); assertEquals("13", nestedNestedMap.get("node")); helper.setValueForIn("15", "list[0].newnode", map); assertEquals("15", nestedMap.get("newnode")); helper.setValueForIn("14", "list[0]", map); assertEquals("14", ((List) map.get("list")).get(0)); helper.setValueForIn("11", "list[1]", map); assertEquals("11", ((List) map.get("list")).get(1)); helper.setValueForIn("16", "list[2][0]", map); assertEquals("16", ((List) ((List) map.get("list")).get(2)).get(0)); Map<String, Object> nested2 = new HashMap<>(); List<String> aliases = new ArrayList<>(); aliases.add("Pete"); aliases.add("John"); nested2.put("aliases", aliases); map.put("map", nested2); helper.setValueForIn("Joe", "map.aliases[1]", map); assertEquals("Joe", aliases.get(1)); } @Test public void testSetValueCreatesNestedMaps() { Map<String, Object> map = new HashMap<>(); helper.setValueForIn("NewNestedMapKey", "nested3.a", map); Object nested3 = map.get("nested3"); assertNotNull(nested3); assertEquals("NewNestedMapKey", ((Map<String, Object>)nested3).get("a")); // multiple levels of nesting helper.setValueForIn("2LevelDeep", "nested4.b.c", map); Object nested4 = map.get("nested4"); assertNotNull(nested4); Object nested4b = ((Map<String, Object>)nested4).get("b"); assertNotNull(nested4b); assertEquals("2LevelDeep", ((Map<String, Object>)nested4b).get("c")); } }