/** * License Agreement. * * JBoss RichFaces - Ajax4jsf Component Library * * Copyright (C) 2007 Exadel, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1 as published by the Free Software Foundation. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.richfaces.component; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.jboss.test.faces.ApplicationServer; import org.jboss.test.faces.htmlunit.HtmlUnitEnvironment; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import org.richfaces.CustomizedHtmlUnitEnvironment; import com.gargoylesoftware.htmlunit.html.DomNode; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; /** * @author amarkhel * @since 3.3.0 */ public class QueueRendererTest { @Target(value = { ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) private @interface DisableQueue { } private static final String EXPECTED_QUEUE_SCRIPT = "RichFaces.queue.setQueueOptions({" + "\"first\": {\"requestDelay\": 400, \"ignoreDupResponses\": true}," + "\"form\": {\"requestDelay\": 400}," + "\"form:firstAttach\": {\"requestGroupingId\": \"request\"}," + "\"second\": {\"requestDelay\": 400, \"ignoreDupResponses\": true}," + "\"form:linkAttach\": {\"queueId\": \"second\"}," + "\"form:secondAttach\": {}" + "});"; protected HtmlPage page; protected HtmlUnitEnvironment facesEnvironment; private boolean queueEnabled = true; @Rule public final MethodRule rule = new MethodRule() { public Statement apply(Statement base, FrameworkMethod method, Object target) { QueueRendererTest test = (QueueRendererTest) target; DisableQueue annotation = method.getMethod().getAnnotation(DisableQueue.class); if (annotation != null) { test.queueEnabled = false; } return base; } }; @Before public void setUp() throws Exception { facesEnvironment = new CustomizedHtmlUnitEnvironment(); ApplicationServer facesServer = facesEnvironment.getServer(); facesServer.addResource("/queue.xhtml", "org/richfaces/component/queue.xhtml"); facesServer.addResource("/nonQueue.xhtml", "org/richfaces/component/nonQueue.xhtml"); facesEnvironment.getServer().addInitParameter("org.richfaces.queue.enabled", Boolean.toString(queueEnabled)); facesEnvironment.start(); } @After public void tearDown() throws Exception { this.page = null; this.facesEnvironment.release(); this.facesEnvironment = null; } @Test public void testQueue() throws Exception { page = facesEnvironment.getPage("/queue.jsf"); String queueScript = extractQueueScript(page); assertNotNull(queueScript, "Queue script must be not null"); assertEquals(dehydrate(EXPECTED_QUEUE_SCRIPT), dehydrate(queueScript)); /* * String[] queueArray = queueScript.split("},"); //String[] queueNames = new String[queueArray.length]; //String[] * queueOptions = new String[queueArray.length]; for(int i = 0; i < queueArray.length - 1; i++){ queueArray[i] = * queueArray[i] + "}"; } String expectedArray = getQueuesByView("queue.jsf"); for(int i = 0; i < queueArray.length; * i++){ String[] queues = queueArray[i].split(":"); queueNames[i] = queues[0]; queueOptions[i] = queues[1]; } */ } @Test @DisableQueue public void testQueuingDisabled() throws Exception { page = facesEnvironment.getPage("/queue.jsf"); String queueScript = extractQueueScript(page); assertNull(queueScript); } @Test public void testPageWithoutQueue() throws Exception { page = facesEnvironment.getPage("/nonQueue.jsf"); String queueScript = extractQueueScript(page); assertNull("Queue script must be null", queueScript); } private String dehydrate(String s) { return s.replaceAll("\\s+", ""); } private String getTextContent(HtmlElement element) { StringBuilder sb = new StringBuilder(); for (DomNode node = element.getFirstChild(); node != null; node = node.getNextSibling()) { sb.append(node.getNodeValue()); } return sb.toString(); } private String extractQueueScript(HtmlPage page) { HtmlElement scriptElement = (HtmlElement) page.getElementById(QueueRegistry.QUEUE_SCRIPT_ID); if (scriptElement != null) { return getTextContent(scriptElement).replaceAll("(^<!--)|(//-->$)", ""); } return null; } }