/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.config.spring.parsers.processors; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.mule.runtime.config.spring.parsers.PreProcessor; import org.mule.runtime.config.spring.parsers.assembly.configuration.PropertyConfiguration; import org.junit.Test; import org.w3c.dom.Element; public class CheckExclusiveAttributesTestCase extends AbstractPreProcessorTestCase { @Test public void testDisjointSingleAttributeGroups() throws Exception { String[][] groups = new String[][] {new String[] {"a"}, new String[] {"b"}}; assertOk(groups, "a"); assertOk(groups, "b"); assertOk(groups, "x"); } @Test public void testDisjointMultipleAttributes() throws Exception { String[][] groups = new String[][] {new String[] {"a1"}, new String[] {"b1", "b2"}}; String text = "do not match the exclusive groups"; assertOk(groups, ""); // optional attribute assertOk(groups, "x"); // all attributes from first group assertOk(groups, "a1"); // attribute from second group assertOk(groups, "b1"); assertOk(groups, "b2"); // attribute from first group and optional attribute assertOk(groups, "a1 x"); // attribute from second group and optional attribute assertOk(groups, "x b1"); assertOk(groups, "x b2"); // all attributes from second group assertOk(groups, "b1 b2"); assertBad(groups, "a1 b1", text); assertBad(groups, "b1 a1", text); assertBad(groups, "a1 b2", text); assertBad(groups, "b2 a1", text); assertBad(groups, "a1 b1 b2", text); assertBad(groups, "a1 b2 x", text); } @Test public void testSecondGroupEmpty() throws Exception { String[][] groups = new String[][] {new String[] {"a1"}, new String[] {}}; assertOk(groups, ""); // optional attribute assertOk(groups, "x"); // only attribute from first group assertOk(groups, "a1"); // attribute from first group plus optional attribute assertOk(groups, "a1 x"); } @Test public void testGroupsWithOverlappingAttributes() throws Exception { String[][] groups = new String[][] {new String[] {"a1", "b1"}, new String[] {"a1", "b2"}}; // attribute from first group (can be in either group) assertBad(groups, "a1", "do not satisfy"); // attribute from first group assertOk(groups, "b1"); // attribute from second group assertOk(groups, "b2"); // optional attribute assertOk(groups, "a1 b1 x"); assertOk(groups, "a1 b2 x"); // complete first group assertOk(groups, "a1 b1"); // complete second group assertOk(groups, "a1 b2"); } @Test public void testRealWorld() throws Exception { String[][] groups = new String[][] {new String[] {"type", "recipient"}, new String[] {"type", "from"}}; assertOk(groups, "id name recipient subject type"); } @Test public void testDocumentationAllowed() throws Exception { PropertyConfiguration config = mock(PropertyConfiguration.class); when(config.isIgnored(anyString())).thenReturn(false); Element element = createElement("value"); element.setAttributeNS("http://www.some.namespace", "namespace", "namespace"); CheckExclusiveAttribute check = new CheckExclusiveAttribute("value"); check.preProcess(config, element); } @Override protected PreProcessor createCheck(String[][] constraint, String elementName, String elementNamespaceUrl) { return new CheckExclusiveAttributes(constraint); } }