/* * 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 org.mule.runtime.config.spring.parsers.PreProcessor; import javax.xml.parsers.ParserConfigurationException; import org.junit.Test; public class CheckRequiredAttributesTestCase extends AbstractPreProcessorTestCase { @Test public void testSingleSetSingleAttribute() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"a1"}}; String text = "must have all attributes for one of the sets: [a1]"; // no attributes assertBad(groups, "", text); // optional attribute assertBad(groups, "x", text); // required attribute assertOk(groups, "a1"); assertOk(groups, "a1 x"); assertOk(groups, "x a1"); } @Test public void testSingleSetMultipleAttributes() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"b1", "b2"}}; String text = "must have all attributes for one of the sets: [b1, b2]"; // no attributes assertBad(groups, "", text); // optional attribute assertBad(groups, "x", text); // one of the required attributes assertBad(groups, "b1", text); assertBad(groups, "b2", text); // one of the required attributes and an optional attribute assertBad(groups, "x b1", text); assertBad(groups, "x b2", text); // both required attributes assertOk(groups, "b1 b2"); // both required attributes and an optional attribute assertOk(groups, "x b1 b2"); } @Test public void testTwoSetsSingleAttribute() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"a1"}, new String[] {"b1"}}; String text = "must have all attributes for one of the sets: [a1] [b1]"; // empty set assertBad(groups, "", text); // only optional attributes assertBad(groups, "x", text); assertBad(groups, "x y", text); // one attribute from a required set assertOk(groups, "a1"); assertOk(groups, "b1"); // one attribute from a required set and optional attributes assertOk(groups, "a1 x"); assertOk(groups, "x a1"); assertOk(groups, "b1 x"); assertOk(groups, "x b1"); // attributes from both sets, assuming this is OK, too as both groups are fully satisfied assertOk(groups, "a1 b1"); } @Test public void testTwoSetsEmptySecondSet() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"a1"}, new String[] {}}; String text = "must have all attributes for one of the sets: [a1]"; // no attributes assertBad(groups, "", text); // only optional attributes assertBad(groups, "x", text); assertBad(groups, "x b1", text); // required attribute assertOk(groups, "a1"); assertOk(groups, "a1 x"); assertOk(groups, "x a1"); } @Test public void testTwoSetsMultipleAttributes() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"a1", "a2"}, new String[] {"b1", "b2"}}; String text = "must have all attributes for one of the sets: [a1, a2] [b1, b2]"; // no attributes assertBad(groups, "", text); // only optional attributes assertBad(groups, "x", text); // only one attribute from the required set assertBad(groups, "a1", text); assertBad(groups, "a2", text); assertBad(groups, "b1", text); assertBad(groups, "b2", text); assertBad(groups, "a1 x", text); assertBad(groups, "a2 x", text); assertBad(groups, "b1 x", text); assertBad(groups, "b2 x", text); assertBad(groups, "x a1", text); assertBad(groups, "x a2", text); assertBad(groups, "x b1", text); assertBad(groups, "x b2", text); assertBad(groups, "a1 b1", text); // attributes from one required set assertOk(groups, "a1 a2"); assertOk(groups, "x a1 a2"); assertOk(groups, "a1 x a2"); assertOk(groups, "a1 a2 x"); assertOk(groups, "b1 b2"); assertOk(groups, "x b1 b2"); assertOk(groups, "b1 x b2"); assertOk(groups, "b1 b2 x"); // attributes from both required sets assertOk(groups, "a1 a2 b1"); assertOk(groups, "x a1 a2 b1"); assertOk(groups, "a1 x a2 b1"); assertOk(groups, "a1 a2 x b1"); assertOk(groups, "a1 a2 b1 x"); assertOk(groups, "a1 a2 b2"); assertOk(groups, "x a1 a2 b2"); assertOk(groups, "a1 x a2 b2"); assertOk(groups, "a1 a2 x b2"); assertOk(groups, "a1 a2 b2 x"); assertOk(groups, "b1 b2 a1"); assertOk(groups, "x b1 b2 a1"); assertOk(groups, "b1 x b2 a1"); assertOk(groups, "b1 b2 x a1"); assertOk(groups, "b1 b2 a1 x"); assertOk(groups, "b1 b2 a2"); assertOk(groups, "x b1 b2 a2"); assertOk(groups, "b1 x b2 a2"); assertOk(groups, "b1 b2 x a2"); assertOk(groups, "b1 b2 a2 x"); } @Test public void testTwoSetsOverlappingAttributes() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"a1", "a2"}, new String[] {"a1", "b1"}}; String text = "must have all attributes for one of the sets: [a1, a2] [a1, b1]"; // no attributes assertBad(groups, "", text); // only optional attributes assertBad(groups, "x", text); // attributes from first group assertOk(groups, "a1 a2"); assertOk(groups, "x a1 a2"); assertOk(groups, "a1 x a2"); assertOk(groups, "a1 a2 x"); // attributes from second group assertOk(groups, "a1 b1"); assertOk(groups, "x a1 b1"); assertOk(groups, "a1 x b1"); assertOk(groups, "a1 b1 x"); // attributes from both groups assertOk(groups, "a1 a2 b1"); } @Test public void testRealWorld() throws ParserConfigurationException { String[][] groups = new String[][] {new String[] {"address"}, new String[] {"ref"}, new String[] {"type", "from"}, new String[] {"type", "recipient"}}; assertOk(groups, "from id name type"); } @Override protected PreProcessor createCheck(String[][] constraint, String elementName, String elementNamespaceUrl) { return new CheckRequiredAttributes(constraint); } }