@Test public void testMergeMapsDefaultsToOverridingSubLists() { Map<?, ?> val1 = ImmutableMap.of("key1", ImmutableList.of("val1a")); Map<?, ?> val2 = ImmutableMap.of("key1", ImmutableList.of("val1b")); Map<?, ?> resultDepth1 = CollectionMerger.builder().depth(1).build().merge(val1, val2); Map<?, ?> resultDepth2 = CollectionMerger.builder().depth(2).build().merge(val1, val2); assertEquals(resultDepth1, ImmutableMap.of("key1", ImmutableList.of("val1a"))); assertEquals(resultDepth2, resultDepth1); }
@Test public void testMergeMapsWithNullOverridesOther() { // Expect "key2:" to have a null value (rather than just empty). String yaml1 = Joiner.on("\n").join( "key1: val1", "key2:"); String yaml2 = Joiner.on("\n").join( "key1: override-ignored", "key1b: val1b", "key2:", " key2.1b: val2.1b"); Map<?, ?> val1 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml1)); Map<?, ?> val2 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml2)); Map<?, ?> resultDepth1 = CollectionMerger.builder().depth(1).build().merge(val1, val2); Map<?, ?> resultDepth2 = CollectionMerger.builder().depth(2).build().merge(val1, val2); assertEquals(resultDepth1, Iterables.getOnlyElement(parseYaml(Joiner.on("\n").join( "key1: val1", "key1b: val1b", "key2:")))); assertEquals(resultDepth2, resultDepth1); }
@Test public void testMergeMapsWithEmptyIsMerged() { // Expect "key2:" to have a null value (rather than just empty). String yaml1 = Joiner.on("\n").join( "key1: val1", "key2: {}"); String yaml2 = Joiner.on("\n").join( "key1: override-ignored", "key1b: val1b", "key2:", " key2.1b: val2.1b"); Map<?, ?> val1 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml1)); Map<?, ?> val2 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml2)); Map<?, ?> resultDepth1 = CollectionMerger.builder().depth(1).build().merge(val1, val2); Map<?, ?> resultDepth2 = CollectionMerger.builder().depth(2).build().merge(val1, val2); assertEquals(resultDepth1, Iterables.getOnlyElement(parseYaml(Joiner.on("\n").join( "key1: val1", "key1b: val1b", "key2: {}")))); assertEquals(resultDepth2, Iterables.getOnlyElement(parseYaml(Joiner.on("\n").join( "key1: val1", "key1b: val1b", "key2:", " key2.1b: val2.1b")))); }
Map<?, ?> val2 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml2)); Map<?, ?> resultDepth1 = CollectionMerger.builder().mergeNestedLists(true).depth(1).build().merge(val1, val2); Map<?, ?> resultDepth2 = CollectionMerger.builder().mergeNestedLists(true).depth(2).build().merge(val1, val2); Map<?, ?> resultDepth3 = CollectionMerger.builder().mergeNestedLists(true).depth(3).build().merge(val1, val2); Map<?, ?> resultDepth4 = CollectionMerger.builder().mergeNestedLists(true).depth(4).build().merge(val1, val2); Map<?, ?> resultDepth5 = CollectionMerger.builder().mergeNestedLists(true).depth(5).build().merge(val1, val2); Map<?, ?> resultShallow = CollectionMerger.builder().mergeNestedLists(true).deep(false).build().merge(val1, val2); Map<?, ?> resultDeep = CollectionMerger.builder().mergeNestedLists(true).build().merge(val1, val2);
Map<?, ?> val2 = (Map<?, ?>) Iterables.getOnlyElement(parseYaml(yaml2)); Map<?, ?> resultDepth1 = CollectionMerger.builder().depth(1).build().merge(val1, val2); Map<?, ?> resultDepth2 = CollectionMerger.builder().depth(2).build().merge(val1, val2); Map<?, ?> resultDepth3 = CollectionMerger.builder().depth(3).build().merge(val1, val2); Map<?, ?> resultDepth4 = CollectionMerger.builder().depth(4).build().merge(val1, val2); Map<?, ?> resultDepth5 = CollectionMerger.builder().depth(5).build().merge(val1, val2); Map<?, ?> resultShallow = CollectionMerger.builder().deep(false).build().merge(val1, val2); Map<?, ?> resultDeep = CollectionMerger.builder().build().merge(val1, val2);
public Builder deep(boolean val) { return depth(val ? Integer.MAX_VALUE : 1); } /**