### Question:
PropertyMergePostProcessor implements SlingPostProcessor { @Override public final void process(final SlingHttpServletRequest request, final List<Modification> modifications) throws Exception { final List<PropertyMerge> propertyMerges = this.getPropertyMerges(request); final Resource resource = request.getResource(); for (final PropertyMerge propertyMerge : propertyMerges) { this.merge(resource, propertyMerge.getDestination(), propertyMerge.getSources(), propertyMerge.getTypeHint(), propertyMerge.isAllowDuplicates()) .ifPresent(modifiedResource -> { modifications.add(Modification.onModified(modifiedResource.getPath())); log.debug("Merged property values from {} into [ {} ]", propertyMerge.getSources(), propertyMerge.getDestination()); }); } }  @Override final void process(final SlingHttpServletRequest request,
            final List<Modification> modifications);  }### Answer:
@Test public void testMergeAllTags() throws Exception { final TagManager mockTagManager = mock(TagManager.class); Tag fakeTag = mock(Tag.class); when(mockTagManager.resolve(any())).thenReturn(fakeTag); context.registerAdapter(ResourceResolver.class, TagManager.class, mockTagManager); ResourceResolver rr = context.resourceResolver(); MockSlingHttpServletRequest request = context.request(); request.setParameterMap(new HashMap<String, Object>() { { put("./asset/jcr:content/metadata/dam:tag1", new String[]{ "tag1:tag1a", "tag1:tag1b" }); put("./asset/jcr:content/metadata/dam:tag2", new String[]{ "tag2:tag2a", "tag2:tag2b" }); put(":" + PropertyMergePostProcessor.OPERATION_ALL_TAGS + "@PropertyMerge", "jcr:content/metadata/dam:combined-tags"); } }); Map<String, Object> emptyProperties = new HashMap<>(); Resource content = rr.create(rr.resolve("/"), "content", emptyProperties); Resource dam = rr.create(content, "dam", emptyProperties); request.setResource(dam); Resource asset = rr.create(dam, "asset", emptyProperties); Resource jcrContent = rr.create(asset, "jcr:content", emptyProperties); Resource metadata = rr.create(jcrContent, "metadata", new HashMap<String, Object>() { { put("dam:tag1", new String[]{"tag1:tag1a", "tag1:tag1b"}); put("dam:tag2", new String[]{"tag2:tag2a", "tag2:tag2b"}); } }); PropertyMergePostProcessor processor = new PropertyMergePostProcessor(); List<Modification> changeLog = new ArrayList<>(); processor.process(request, changeLog); Assert.assertFalse("Should have observed some changes", changeLog.isEmpty()); String[] tags = metadata.getValueMap().get("dam:combined-tags", String[].class); Assert.assertArrayEquals(new String[]{"tag1:tag1a", "tag1:tag1b", "tag2:tag2a", "tag2:tag2b"}, tags); }