/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.core.domain.util; import static org.testng.Assert.assertEquals; import static org.rhq.core.domain.resource.composite.DisambiguationReport.*; import java.util.ArrayList; import java.util.Collections; import org.testng.annotations.Test; import org.rhq.core.domain.resource.composite.DisambiguationReport; /** * * * @author Lukas Krejci */ public class DisambiguationReportRendererTest { private static final String RESOURCE_NAME = "testResource"; private static final String RESOURCE_TYPE_NAME = "testResourceType"; private static final String RESOURCE_TYPE_PLUGIN_NAME = "testPlugin"; private static final int RESOURCE_ID = 0; private static final String PARENT_RESOURCE_NAME = "testResourceParent"; private static final String PARENT_RESOURCE_TYPE_NAME = "testResourceTypeParent"; private static final String PARENT_RESOURCE_TYPE_PLUGIN_NAME = "testPluginParent"; private static final String TEST_NO_PARENTS_TEMPLATE = "seeing %[a resource called ]name[ ]%[with an id of ]id%[ in a type ]type.name%[ in a plugin ]type.plugin[]."; private static final String EXPECTED_NO_PARENTS_RENDERING_FULL = "seeing a resource called " + RESOURCE_NAME + " with an id of " + RESOURCE_ID + " in a type " + RESOURCE_TYPE_NAME + " in a plugin " + RESOURCE_TYPE_PLUGIN_NAME + "."; private static final String EXPECTED_NO_PARENTS_RENDERING_NO_PLUGIN = "seeing a resource called " + RESOURCE_NAME + " with an id of " + RESOURCE_ID + " in a type " + RESOURCE_TYPE_NAME + "."; private static final String EXPECTED_NO_PARENTS_RENDERING_NO_TYPE = "seeing a resource called " + RESOURCE_NAME + " with an id of " + RESOURCE_ID + "."; private static final String TEST_PARENTS_TEMPLATE = "%type.name[ ]%[(]type.plugin[) ]%name"; private static final String TEST_PARENTS_SINGLETON_TEMPLATE = "%name (\\%singleton)"; private static final String ASCENDING_SEPARATOR = " -> "; private static final String DESCENDING_SEPARATOR = " <- "; private static final int NOF_PARENTS = 2; private static final String EXPECTED_PARENTS_RENDERING_FULL_NO_SINGLETON_ASCENDING = RESOURCE_TYPE_NAME + " (" + RESOURCE_TYPE_PLUGIN_NAME + ") " + RESOURCE_NAME + ASCENDING_SEPARATOR + PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "1" + ASCENDING_SEPARATOR + PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "2"; private static final String EXPECTED_PARENTS_RENDERING_FULL_WITH_SINGLETON_ASCENDING = RESOURCE_TYPE_NAME + " (" + RESOURCE_TYPE_PLUGIN_NAME + ") " + RESOURCE_NAME + ASCENDING_SEPARATOR + PARENT_RESOURCE_NAME + "1 (%singleton)" + ASCENDING_SEPARATOR + PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "2"; private static final String EXPECTED_PARENTS_RENDERING_FULL_NO_SINGLETON_DESCENDING = PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "2" + DESCENDING_SEPARATOR + PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "1" + DESCENDING_SEPARATOR + RESOURCE_TYPE_NAME + " (" + RESOURCE_TYPE_PLUGIN_NAME + ") " + RESOURCE_NAME; private static final String EXPECTED_PARENTS_RENDERING_FULL_WITH_SINGLETON_DESCENDING = PARENT_RESOURCE_TYPE_NAME + " (" + PARENT_RESOURCE_TYPE_PLUGIN_NAME + ") " + PARENT_RESOURCE_NAME + "2" + DESCENDING_SEPARATOR + PARENT_RESOURCE_NAME + "1 (%singleton)" + DESCENDING_SEPARATOR + RESOURCE_TYPE_NAME + " (" + RESOURCE_TYPE_PLUGIN_NAME + ") " + RESOURCE_NAME; private static final String EXPECTED_PARENTS_RENDERING_MINIMAL_WITH_SINGLETON_ASCENDING = RESOURCE_NAME + ASCENDING_SEPARATOR + PARENT_RESOURCE_NAME + "1 (%singleton)" + ASCENDING_SEPARATOR + PARENT_RESOURCE_NAME + "2"; @Test public void testNoParents() { DisambiguationReport<?> report = getNoParentsTestReport(true, true); DisambiguationReportRenderer renderer = new DisambiguationReportRenderer(); renderer.setIncludeParents(false); renderer.setSegmentTemplate(TEST_NO_PARENTS_TEMPLATE); renderer.setSingletonSegmentTemplate(TEST_NO_PARENTS_TEMPLATE); String rendering = renderer.render(report); assertEquals(rendering, EXPECTED_NO_PARENTS_RENDERING_FULL); report = getNoParentsTestReport(true, false); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_NO_PARENTS_RENDERING_NO_PLUGIN); report = getNoParentsTestReport(false, false); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_NO_PARENTS_RENDERING_NO_TYPE); } @Test public void testParents() { DisambiguationReport<?> report = getParentsTestReport(true, true, true, true, false); DisambiguationReportRenderer renderer = new DisambiguationReportRenderer(); renderer.setSegmentTemplate(TEST_PARENTS_TEMPLATE); renderer.setSingletonSegmentTemplate(TEST_PARENTS_SINGLETON_TEMPLATE); renderer.setSegmentSeparator(ASCENDING_SEPARATOR); String rendering = renderer.render(report); assertEquals(rendering, EXPECTED_PARENTS_RENDERING_FULL_NO_SINGLETON_ASCENDING); renderer.setSegmentSeparator(DESCENDING_SEPARATOR); renderer.setRenderingOrder(DisambiguationReportRenderer.RenderingOrder.DESCENDING); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_PARENTS_RENDERING_FULL_NO_SINGLETON_DESCENDING); report = getParentsTestReport(true, true, true, true, true); renderer.setSegmentSeparator(ASCENDING_SEPARATOR); renderer.setRenderingOrder(DisambiguationReportRenderer.RenderingOrder.ASCENDING); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_PARENTS_RENDERING_FULL_WITH_SINGLETON_ASCENDING); renderer.setSegmentSeparator(DESCENDING_SEPARATOR); renderer.setRenderingOrder(DisambiguationReportRenderer.RenderingOrder.DESCENDING); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_PARENTS_RENDERING_FULL_WITH_SINGLETON_DESCENDING); report = getParentsTestReport(false, false, false, false, true); renderer.setSegmentSeparator(ASCENDING_SEPARATOR); renderer.setRenderingOrder(DisambiguationReportRenderer.RenderingOrder.ASCENDING); rendering = renderer.render(report); assertEquals(rendering, EXPECTED_PARENTS_RENDERING_MINIMAL_WITH_SINGLETON_ASCENDING); } private <T> DisambiguationReport<T> getNoParentsTestReport(boolean includeType, boolean includePlugin) { return new DisambiguationReport<T>(null, Collections.<Resource> emptyList(), createResource(0, includeType, includePlugin, false)); } private <T> DisambiguationReport<T> getParentsTestReport(boolean includeType, boolean includePlugin, boolean includeParentsType, boolean includeParentsPlugin, boolean firstParentSingleton) { Resource resource = createResource(0, includeType, includePlugin, false); Resource firstParent = createResource(1, includeParentsType, includeParentsPlugin, firstParentSingleton); ArrayList<Resource> parents = new ArrayList<Resource>(); parents.add(firstParent); for(int i = 2; i <= NOF_PARENTS; ++i) { Resource parent = createResource(i, includeParentsType, includeParentsPlugin, false); parents.add(parent); } return new DisambiguationReport<T>(null, parents, resource); } private static Resource createResource(int parentage, boolean includeType, boolean includePlugin, boolean singleton) { ResourceType type = null; String resourceTypeName = parentage > 0 ? PARENT_RESOURCE_TYPE_NAME : RESOURCE_TYPE_NAME; String pluginName = parentage > 0 ? PARENT_RESOURCE_TYPE_PLUGIN_NAME : RESOURCE_TYPE_PLUGIN_NAME; if (includeType || singleton) { type = new ResourceType(resourceTypeName, includePlugin ? pluginName : null, singleton); } String name; if (parentage == 0) { name = RESOURCE_NAME; } else { name = PARENT_RESOURCE_NAME + parentage; } return new Resource(parentage, name, type); } }