/** * Copyright (c) 2000-2017 Liferay, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.liferay.faces.util.xml; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.Map; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Assert; import org.junit.Test; import com.liferay.faces.util.config.internal.FacesConfigDescriptor; import com.liferay.faces.util.config.internal.FacesConfigDescriptorParser; import com.liferay.faces.util.config.internal.FacesConfigDescriptorParserImpl; import com.liferay.faces.util.config.internal.Ordering; import com.liferay.faces.util.config.internal.OrderingBeforeAndAfterException; import com.liferay.faces.util.config.internal.OrderingCircularDependencyException; import com.liferay.faces.util.config.internal.OrderingUtil; import com.liferay.faces.util.logging.Logger; import com.liferay.faces.util.logging.LoggerFactory; /** * @author Vernon Singleton */ public class OrderingTest { // Logger private static final Logger logger = LoggerFactory.getLogger(OrderingTest.class); // Private Constants private static final String META_INF_FACES_CONFIG_XML = "META-INF/faces-config.xml"; private static final String WEB_INF_FACES_CONFIG_XML = "WEB-INF/faces-config.xml"; public static void parseConfigurationResources(String testCase, List<FacesConfigDescriptor> facesConfigDescriptors, String configPath) { try { SAXParserFactory saxParserFactory = ConcurrentSAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); FacesConfigDescriptorParser facesConfigDescriptorParser = new FacesConfigDescriptorParserImpl(saxParser, false); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Enumeration<URL> orderingUrls = classLoader.getResources(testCase); if (orderingUrls.hasMoreElements()) { URL orderingUrl = orderingUrls.nextElement(); File orderingDirectory = new File(orderingUrl.toURI()); File[] configurationDirectories = orderingDirectory.listFiles(); if (configurationDirectories != null) { for (File directory : configurationDirectories) { // config path should be either META_INF_FACES_CONFIG_XML or WEB_INF_FACES_CONFIG_XML String resourcePath = testCase + "/" + directory.getName() + "/" + configPath; Enumeration<URL> facesConfigUrls = classLoader.getResources(resourcePath); while (facesConfigUrls.hasMoreElements()) { URL facesConfigURL = facesConfigUrls.nextElement(); logger.trace("parseConfigurationResources: " + facesConfigURL.toString()); InputStream inputStream = facesConfigURL.openStream(); FacesConfigDescriptor facesConfigDescriptor = facesConfigDescriptorParser.parse(inputStream, facesConfigURL); logger.trace("parseConfigurationResources: >" + facesConfigDescriptor.getName() + "<"); facesConfigDescriptors.add(facesConfigDescriptor); inputStream.close(); } } } } } catch (Exception e) { throw new AssertionError("An unexpected exception was thrown: ", e); } } public static List<List<String>> permute(List<String> list) { if (list.size() == 0) { List<List<String>> newLols = new ArrayList<List<String>>(); newLols.add(new ArrayList<String>()); return newLols; } List<List<String>> lols = new ArrayList<List<String>>(); String first = list.remove(0); List<List<String>> resultingLols = permute(list); for (List<String> resultingList : resultingLols) { for (int index = 0; index <= resultingList.size(); index++) { List<String> listOfStrings = new ArrayList<String>(resultingList); listOfStrings.add(index, first); lols.add(listOfStrings); } } return lols; } private static String[] extractNames(List<FacesConfigDescriptor> facesConfigDescriptors) { String[] extractedNames = new String[facesConfigDescriptors.size()]; int i = 0; for (FacesConfigDescriptor facesConfigDescriptor : facesConfigDescriptors) { extractedNames[i] = facesConfigDescriptor.getName(); i++; } return extractedNames; } // This fails intermittently without the preSort @Test public void test00_0() throws Exception { logger.trace("test00_0: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/00", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/00", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNull("test00_0: absoluteOrdering != null. It should be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("LiferayFacesUtil", "LiferayFacesBridge", "prettyfaces", "LiferayFacesAlloy", ""); // solutions: // LiferayFacesUtil, LiferayFacesBridge, prettyfaces, LiferayFacesAlloy, String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test00_0: Passed"); logger.trace(message); } // This fails intermittently without the preSort @Test public void test00_1() throws Exception { logger.trace("test00_1: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/04", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // extractedNames = [ICEfacesAce, LiferayFacesBridge, LiferayFacesAlloy, LiferayFacesUtil, ICEfacesCore] // Map<String, FacesConfigDescriptor> configMap = Ordering.getConfigMap(facesConfigDescriptors); // List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); // temp.add(configMap.get("ICEfacesAce")); // temp.add(configMap.get("LiferayFacesBridge")); // temp.add(configMap.get("LiferayFacesAlloy")); // temp.add(configMap.get("LiferayFacesUtil")); // temp.add(configMap.get("ICEfacesCore")); // facesConfigDescriptors = temp; // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/04", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNull("test00_1: absoluteOrdering != null. It should be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("ICEfacesCore", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", "ICEfacesAce", ""); List<String> possibility2 = Arrays.asList("ICEfacesCore", "ICEfacesAce", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", ""); // some solutions: // [ICEfacesCore, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, ICEfacesAce, ] // [ICEfacesCore, ICEfacesAce, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, ] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test00_1: Passed"); logger.trace(message); } // This fails intermittently without the preSort @Test public void test00_2() throws Exception { logger.trace("test00_2: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/05", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // extractedNames = [ICEfacesAce, LiferayFacesBridge, LiferayFacesAlloy, LiferayFacesUtil, ICEfacesCore] // Map<String, FacesConfigDescriptor> configMap = Ordering.getConfigMap(facesConfigDescriptors); // List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); // temp.add(configMap.get("ICEfacesAce")); // temp.add(configMap.get("LiferayFacesBridge")); // temp.add(configMap.get("LiferayFacesAlloy")); // temp.add(configMap.get("LiferayFacesUtil")); // temp.add(configMap.get("ICEfacesCore")); // facesConfigDescriptors = temp; // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/05", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNull("test00_2: absoluteOrdering != null. It should be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("ICEfacesCore", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", "richfaces_core", "ICEfacesAce", ""); List<String> possibility2 = Arrays.asList("ICEfacesCore", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", "ICEfacesAce", "richfaces_core", ""); List<String> possibility3 = Arrays.asList("ICEfacesCore", "LiferayFacesUtil", "LiferayFacesBridge", "richfaces_core", "LiferayFacesAlloy", "ICEfacesAce", ""); // some solutions: // [ICEfacesCore, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, richfaces_core, ICEfacesAce, ] // [ICEfacesCore, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, ICEfacesAce, richfaces_core, ] // [ICEfacesCore, LiferayFacesUtil, LiferayFacesBridge, richfaces_core, LiferayFacesAlloy, ICEfacesAce, ] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test00_2: Passed"); logger.trace(message); } @Test public void test00_3() throws Exception { logger.trace("test00_1: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/06", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // extractedNames = [ICEfacesAce, LiferayFacesBridge, LiferayFacesAlloy, LiferayFacesUtil, ICEfacesCore] // Map<String, FacesConfigDescriptor> configMap = Ordering.getConfigMap(facesConfigDescriptors); // List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); // temp.add(configMap.get("ICEfacesAce")); // temp.add(configMap.get("LiferayFacesBridge")); // temp.add(configMap.get("LiferayFacesAlloy")); // temp.add(configMap.get("LiferayFacesUtil")); // temp.add(configMap.get("ICEfacesCore")); // facesConfigDescriptors = temp; // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/04", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNull("test00_1: absoluteOrdering != null. It should be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("ICEfacesCore", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", "ICEfacesAce", ""); List<String> possibility2 = Arrays.asList("ICEfacesCore", "ICEfacesAce", "LiferayFacesUtil", "LiferayFacesBridge", "LiferayFacesAlloy", ""); // some solutions: // [ICEfacesCore, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, ICEfacesAce, ] // [ICEfacesCore, ICEfacesAce, LiferayFacesUtil, LiferayFacesBridge, LiferayFacesAlloy, ] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test00_3: Passed"); logger.trace(message); } @Test public void test01_fromSpec() throws Exception { logger.trace("test01_fromSpec: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/01", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/01", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNull("test01_fromSpec: absoluteOrdering != null. It should be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("C", "B", "A", "my"); String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test01_fromSpec: Passed"); logger.trace(message); } @Test public void test02_fromSpec() throws Exception { logger.trace("test02_fromSpec: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/02", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/02", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNotNull("test02_fromSpec: absoluteOrdering == null. It should not be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors, absoluteOrdering); // Append facesConfig from the applicationFacesConfig order.add(facesConfig); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("C", "A", "my"); String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test02_fromSpec: Passed"); logger.trace(message); } @Test public void test03_getAbsoluteOrdering() throws Exception { logger.trace("test03_getAbsoluteOrdering: beginning ..."); // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/GetAbsoluteOrdering_01", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); // List<String> actually = Arrays.asList(absoluteOrdering.get(0), absoluteOrdering.get(1), // absoluteOrdering.get(2)); List<String> actually = absoluteOrdering; List<String> expected = Arrays.asList("a", "b", "c"); String message = "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test03_getAbsoluteOrdering: " + message); webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/GetAbsoluteOrdering_02", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); facesConfig = webInfFacesConfigDescriptors.get(0); absoluteOrdering = facesConfig.getAbsoluteOrdering(); // actually = Arrays.asList(absoluteOrdering.get(0), absoluteOrdering.get(1), absoluteOrdering.get(2), // absoluteOrdering.get(3)); actually = absoluteOrdering; expected = Arrays.asList("a", "b", Ordering.OTHERS, "c"); message = "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.trace("test03_getAbsoluteOrdering: " + message); webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/GetAbsoluteOrdering_03", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); facesConfig = webInfFacesConfigDescriptors.get(0); absoluteOrdering = facesConfig.getAbsoluteOrdering(); Assert.assertTrue("absoluteOrdering != null. But it should be null.", absoluteOrdering == null); logger.info("test03_getAbsoluteOrdering: Passed\n"); } @Test public void test04_absoluteOrdering() throws Exception { logger.trace("test04_absoluteOrdering: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AbsoluteOrdering_01", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // Parse the WEB-INF/faces-config.xml to get any absolute-ordering, if any. List<FacesConfigDescriptor> webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AbsoluteOrdering_01", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); FacesConfigDescriptor facesConfig = webInfFacesConfigDescriptors.get(0); List<String> absoluteOrdering = facesConfig.getAbsoluteOrdering(); String[] originalOrder = extractNames(facesConfigDescriptors); Assert.assertNotNull("test04_absoluteOrdering: absoluteOrdering == null. It should not be null.", absoluteOrdering); List<FacesConfigDescriptor> order = OrderingUtil.getOrder(facesConfigDescriptors, absoluteOrdering); String[] orderedNames = extractNames(order); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("a", "b", "c"); String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.trace("test04_absoluteOrdering: " + message); webInfFacesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AbsoluteOrdering_02", webInfFacesConfigDescriptors, WEB_INF_FACES_CONFIG_XML); facesConfig = webInfFacesConfigDescriptors.get(0); absoluteOrdering = facesConfig.getAbsoluteOrdering(); originalOrder = extractNames(facesConfigDescriptors); Assert.assertNotNull("test04_absoluteOrdering: absoluteOrdering == null. It should not be null.", absoluteOrdering); logger.trace("test04_absoluteOrdering: absoluteOrdering = " + absoluteOrdering); order = OrderingUtil.getOrder(facesConfigDescriptors, absoluteOrdering); orderedNames = extractNames(order); // solutions: // [a, b, e, d, f, c] // [a, b, f, e, d, c] // [a, b, f, d, e, c] // [a, b, d, e, f, c] // [a, b, d, f, e, c] // [a, b, e, f, d, c] original = Arrays.asList(originalOrder); actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("a", "b", "e", "d", "f", "c"); List<String> possibility2 = Arrays.asList("a", "b", "f", "e", "d", "c"); List<String> possibility3 = Arrays.asList("a", "b", "f", "d", "e", "c"); List<String> possibility4 = Arrays.asList("a", "b", "d", "e", "f", "c"); List<String> possibility5 = Arrays.asList("a", "b", "d", "f", "e", "c"); List<String> possibility6 = Arrays.asList("a", "b", "e", "f", "d", "c"); boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3) || actually.equals(possibility4) || actually.equals(possibility5) || actually.equals(possibility6)); message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n or: " + possibility4 + "\n or: " + possibility5 + "\n or: " + possibility6 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test04_absoluteOrdering: Passed"); logger.trace(message); } @Test public void test05_AafterCOthers_BbeforeOthers_CafterOthers_FbeforeCOthers() throws Exception { logger.trace("test05_afterAfterOthers: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterCOthers_BbeforeOthers_CafterOthers_FbeforeCOthers", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("f", "b", "e", "d", "c", "a"); List<String> possibility2 = Arrays.asList("f", "b", "d", "e", "c", "a"); List<String> possibility3 = Arrays.asList("b", "f", "d", "e", "c", "a"); List<String> possibility4 = Arrays.asList("b", "f", "e", "d", "c", "a"); // some solutions: // [f, b, e, d, c, a] // [f, b, d, e, c, a] // [b, f, d, e, c, a] // [b, f, e, d, c, a] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3) || actually.equals(possibility4)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n or: " + possibility4 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test05_AafterCOthers_BbeforeOthers_CafterOthers_FbeforeCOthers: Passed"); logger.trace(message); } // This fails intermittently without the preSort @Test public void test06_CafterDbeforeOthers() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/CafterDbeforeOthers", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("d", "c", "a", "b"); List<String> possibility2 = Arrays.asList("d", "c", "b", "a"); // some solutions: // [d, c, a, b] // [d, c, b, a] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test06_CafterDbeforeOthers: Passed"); logger.trace(message); } // This fails intermittently without the preSort @Test public void test07_eachAfterTheNext() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/EachAfterTheNext", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("d", "c", "b", "a"); String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test07_eachAfterTheNext: Passed"); logger.trace(message); } // This fails intermittently without the preSort @Test public void test08_eachBeforeThePrevious() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/EachBeforeThePrevious", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("d", "c", "b", "a"); String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test08_eachBeforeThePrevious: Passed"); logger.trace(message); } @Test public void test10_AafterBbeforeB_CbeforeOthers() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterBbeforeB_CbeforeOthers", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); try { OrderingUtil.getOrder(facesConfigDescriptors); Assert.fail("Before and after exception should have been thrown"); } catch (Exception e) { Assert.assertTrue("An exception stating 'both before and after' should have been thrown. Instead, got: " + e.getMessage() + "\n", e instanceof OrderingBeforeAndAfterException); logger.info("test10_AafterBbeforeB_CbeforeOthers: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } } @Test public void test11_CafterOthersbeforeB() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/CafterOthersbeforeB", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("a", "d", "c", "b"); List<String> possibility2 = Arrays.asList("d", "a", "c", "b"); // some solutions: // [a, d, c, b] // [d, a, c, b] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test11_CafterOthersbeforeB: Passed"); logger.trace(message); } @Test public void test12_BafterC_CafterB() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/BafterC_CafterB", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); try { OrderingUtil.getOrder(facesConfigDescriptors); Assert.fail("Circular ordering exception should have been thrown"); } catch (Exception e) { Assert.assertTrue( "An exception stating 'circular dependencies detected' should have been thrown. Instead, received: " + e.getMessage() + "\n", e instanceof OrderingCircularDependencyException); logger.info("test10_AafterBbeforeB_CbeforeOthers: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } } @Test public void test13_circularFollowingAfterIds() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/CircularFollowingAfter", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // checkForSpecExceptions: names = [b, d, c, a] ... this order reduces the circle to // Ordering.BOTH_BEFORE_AND_AFTER Map<String, FacesConfigDescriptor> configMap = // Ordering.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new // ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("b")); temp.add(configMap.get("d")); // temp.add(configMap.get("c")); temp.add(configMap.get("a")); facesConfigDescriptors = temp; try { OrderingUtil.getOrder(facesConfigDescriptors); Assert.fail("Circular ordering exception should have been thrown"); } catch (Exception e) { if (e instanceof OrderingCircularDependencyException) { // this is the expected result logger.info("test13_circularFollowingAfterIds: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } else if (e instanceof OrderingBeforeAndAfterException) { // this is the expected result logger.info( "test13_circularFollowingAfterIds: Passed\n A circular order can quickly reduce to 'both before and after' depending on the inital order."); logger.info("test13_circularFollowingAfterIds: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } else { throw new AssertionError( "An exception stating 'circular dependencies detected' or 'both before and after' should have been thrown. Instead, got: ", e); } } } @Test public void test14_circularFollowingBeforeIds() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/CircularFollowingBefore", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // checkForSpecExceptions: names = [d, b, a, c] ... this order reduces the circle to // Ordering.BOTH_BEFORE_AND_AFTER Map<String, FacesConfigDescriptor> configMap = // Ordering.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new // ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("d")); temp.add(configMap.get("b")); // temp.add(configMap.get("a")); temp.add(configMap.get("c")); facesConfigDescriptors = temp; try { OrderingUtil.getOrder(facesConfigDescriptors); Assert.fail("Circular ordering exception should have been thrown"); } catch (Exception e) { if (e instanceof OrderingCircularDependencyException) { // this is the expected result logger.info("test14_circularFollowingBeforeIds: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } else if (e instanceof OrderingBeforeAndAfterException) { // this is the expected result logger.info( "test14_circularFollowingBeforeIds: Passed\n A circular order can quickly reduce to 'both before and after' depending on the inital order."); logger.info("test14_circularFollowingBeforeIds: Passed\n Expected exception thrown: e.getMessage() = " + e.getMessage()); } else { throw new AssertionError( "An exception stating 'circular dependencies detected' or 'both before and after' should have been thrown. Instead, got: ", e); } } } @Test public void test15_BafterC_CbeforeB() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/BafterC_CbeforeB", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("a", "c", "d", "b"); List<String> possibility2 = Arrays.asList("c", "d", "a", "b"); List<String> possibility3 = Arrays.asList("c", "a", "d", "b"); // some solutions: // [a, c, d, b] // [c, d, a, b] // [c, a, d, b] boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test15_BafterC_CbeforeB: Passed"); logger.trace(message); } @Test public void test16_AafterB_CbeforeOthers() throws Exception { logger.trace("test16_AafterB_CbeforeOthers: beginning ..."); List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterB_CbeforeOthers", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("c", "b", "d", "a"); List<String> possibility2 = Arrays.asList("c", "d", "b", "a"); // solutions: // "c", "b", "d", "a" // "c", "d", "b", "a" boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test16_AafterB_CbeforeOthers: Passed"); logger.trace(message); } // This fails without the preSort // not submitted as an issue in mojarra, but this is the first one we created to check mojarra against: // https://java.net/jira/browse/JAVASERVERFACES-3757 @Test public void test18_AafterC_BafterCbeforeOthers_CafterDbeforeB_EafterD() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterC_BafterCbeforeOthers_CafterDbeforeB_EafterD", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // extractedNames = [ICEfacesAce, LiferayFacesBridge, LiferayFacesAlloy, LiferayFacesUtil, ICEfacesCore] Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("e")); temp.add(configMap.get("d")); temp.add(configMap.get("b")); temp.add(configMap.get("c")); temp.add(configMap.get("f")); temp.add(configMap.get("a")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("d", "c", "b", "f", "a", "e"); // solution: // d, c, b, f, a, e String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test18_AafterC_BafterCbeforeOthers_CafterDbeforeB_EafterD: Passed"); logger.trace(message); } // This fails without the preSort @Test public void test19_FbeforeD_EbeforeDafterOthers_DbeforeCafterE_BbeforeC() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/FbeforeD_EbeforeDafterOthers_DbeforeCafterE_BbeforeC", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); // [e, a, f, b, d, c] Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("e")); temp.add(configMap.get("a")); temp.add(configMap.get("f")); temp.add(configMap.get("b")); temp.add(configMap.get("d")); temp.add(configMap.get("c")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); // some solutions: // [f, e, d, b, a, c] // [f, e, d, b, c, a] // [a, b, f, e, d, c] String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("f", "e", "d", "b", "a", "c"); List<String> possibility2 = Arrays.asList("f", "e", "d", "b", "c", "a"); List<String> possibility3 = Arrays.asList("a", "b", "f", "e", "d", "c"); boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test19_FbeforeD_EbeforeDafterOthers_DbeforeCafterE_BbeforeC: Passed"); logger.trace(message); } // TODO @Test public void test20_beforeCafterOthers_BbeforeOthers_DafterOthers_EbeforeOthers_permute() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/_beforeCafterOthers_BbeforeOthers_DafterOthers_EbeforeOthers", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<String> strList = new ArrayList<String>(); strList.add(""); strList.add("b"); strList.add("c"); strList.add("d"); strList.add("e"); strList.add("f"); List<List<String>> lists = permute(strList); String message = ""; for (List<String> list : lists) { List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); for (String i : list) { temp.add(configMap.get(i)); } facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); // some solutions: // [B, E, F, , C, D] // [B, E, F, D, , C] // [e, b, f, , c, d] String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("b", "e", "f", "", "c", "d"); List<String> possibility2 = Arrays.asList("b", "e", "f", "d", "", "c"); List<String> possibility3 = Arrays.asList("e", "b", "f", "", "c", "d"); boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3)); message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.trace(message); } logger.info("test20_beforeCafterOthers_BbeforeOthers_DafterOthers_EbeforeOthers_permute: Passed"); } // TODO @Test public void test21_AafterOthers_BbeforeOthers_DafterOthers_EafterCbeforeOthers_permute() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterOthers_BbeforeOthers_DafterOthers_EafterCbeforeOthers_permute", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<String> strList = new ArrayList<String>(); strList.add("a"); strList.add("b"); strList.add("c"); strList.add("d"); strList.add("e"); strList.add("f"); List<List<String>> lists = permute(strList); String message = ""; for (List<String> list : lists) { List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); for (String i : list) { temp.add(configMap.get(i)); } facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); // some solutions: // [B, C, E, F, A, D] // [B, C, E, F, D, A] // [C, E, B, F, A, D] // [C, E, B, F, D, A] String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("b", "c", "e", "f", "a", "d"); List<String> possibility2 = Arrays.asList("b", "c", "e", "f", "d", "a"); List<String> possibility3 = Arrays.asList("c", "e", "b", "f", "a", "d"); List<String> possibility4 = Arrays.asList("c", "e", "b", "f", "d", "a"); boolean assertion = (actually.equals(possibility1) || actually.equals(possibility2) || actually.equals(possibility3) || actually.equals(possibility4)); message = "\n original: " + original + "\n expected: " + possibility1 + "\n or: " + possibility2 + "\n or: " + possibility3 + "\n or: " + possibility4 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.trace(message); } logger.info("test21_AafterOthers_BbeforeOthers_DafterOthers_EafterCbeforeOthers_permute: Passed"); } // submitted as an issue in mojarra: // https://java.net/jira/browse/JAVASERVERFACES-3757 @Test public void test_JAVASERVERFACES_3757_AafterD_BafterCbeforeOthers_CafterDbeforeB_startWithABCD() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterD_BafterCbeforeOthers_CafterDbeforeB", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("a")); temp.add(configMap.get("b")); temp.add(configMap.get("c")); temp.add(configMap.get("d")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("d", "c", "b", "a"); // solution: // ['d', 'c', 'b', 'a'] String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test_JAVASERVERFACES_3757_AafterD_BafterCbeforeOthers_CafterDbeforeB_startWithABCD: Passed"); logger.trace(message); } // submitted as an issue in mojarra: // https://java.net/jira/browse/JAVASERVERFACES-3757 @Test public void test_JAVASERVERFACES_3757_AafterD_BafterCbeforeOthers_CafterDbeforeB_startWithADBC() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/AafterD_BafterCbeforeOthers_CafterDbeforeB", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); Collections.shuffle(facesConfigDescriptors); Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("a")); temp.add(configMap.get("d")); temp.add(configMap.get("b")); temp.add(configMap.get("c")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> expected = Arrays.asList("d", "c", "b", "a"); // solution: // ['d', 'c', 'b', 'a'] String message = "\n original: " + original + "\n expected: " + expected + "\n actually: " + actually + "\n"; Assert.assertTrue(message, expected.equals(actually)); logger.info("test_JAVASERVERFACES_3757_AafterD_BafterCbeforeOthers_CafterDbeforeB_startWithADBC: Passed"); logger.trace(message); } // submitted as an issue in mojarra: // https://java.net/jira/browse/JAVASERVERFACES-3757 @Test public void test_JAVASERVERFACES_3757_Caftera_startWithCab() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/Caftera_startWithCab", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); // Start with C, a, Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("C")); temp.add(configMap.get("a")); temp.add(configMap.get("")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); // a solution: // ['a', '', 'C'] List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("a", "", "C"); boolean assertion = (actually.equals(possibility1)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test_JAVASERVERFACES_3757_Caftera_startWithCab: Passed"); logger.trace(message); } // submitted as an issue in mojarra: // https://java.net/jira/browse/JAVASERVERFACES-3757 @Test public void test_JAVASERVERFACES_3757_noOrdering_startWithCab() throws Exception { List<FacesConfigDescriptor> facesConfigDescriptors = new ArrayList<FacesConfigDescriptor>(); parseConfigurationResources("ordering/noOrdering_startWithCab", facesConfigDescriptors, META_INF_FACES_CONFIG_XML); // Start with C, a, Map<String, FacesConfigDescriptor> configMap = OrderingUtil.getConfigMap(facesConfigDescriptors); List<FacesConfigDescriptor> temp = new ArrayList<FacesConfigDescriptor>(); temp.add(configMap.get("C")); temp.add(configMap.get("a")); temp.add(configMap.get("")); facesConfigDescriptors = temp; String[] originalOrder = extractNames(facesConfigDescriptors); facesConfigDescriptors = OrderingUtil.getOrder(facesConfigDescriptors); String[] orderedNames = extractNames(facesConfigDescriptors); // a solution: // ['C', 'a', ''] List<String> original = Arrays.asList(originalOrder); List<String> actually = Arrays.asList(orderedNames); List<String> possibility1 = Arrays.asList("C", "a", ""); boolean assertion = (actually.equals(possibility1)); String message = "\n original: " + original + "\n expected: " + possibility1 + "\n actually: " + actually + "\n"; Assert.assertTrue(message, assertion); logger.info("test_JAVASERVERFACES_3757_noOrdering_startWithCab: Passed"); logger.trace(message); } }