/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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 software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.javascript;
import static org.junit.Assert.fail;
import java.net.URL;
import java.util.Iterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlListItem;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
/**
*
* @version $Revision$
* @author Konstantin Mishin
*/
public class QUnitTest {
private WebClient webClient_;
@Before
public void setUp() {
webClient_ = new WebClient(BrowserVersion.INTERNET_EXPLORER_11);
}
@After
public void tearDown() {
webClient_.closeAllWindows();
webClient_ = null;
}
protected void runTest(URL url, String query) throws Exception {
String urlStr = url.toExternalForm() + query;
URL newURL = new URL(urlStr);
runTest(newURL);
}
protected void runTest(URL url) throws Exception {
HtmlPage page = loadPage(url);
DomElement tests = page.getElementById("qunit-tests");
Iterator<DomElement> iter = tests.getChildElements().iterator();
if (!iter.hasNext()) {
fail("No result found");
}
StringBuilder sb = new StringBuilder();
int i = 1;
while (iter.hasNext()) {
final HtmlListItem testNode = (HtmlListItem) iter.next();
if (testNode.getAttribute("class").contains("fail")) {
sb.append(i).append(". ")
.append(testNode.<HtmlElement>getFirstByXPath("./strong").getFirstChild().getTextContent()).append("\n");
int j = 1;
for (DomElement li : testNode.<DomElement>getFirstByXPath("./ol").getChildElements()) {
if (li.getAttribute("class").contains("fail")) {
sb.append(" ").append(j).append(". ").append(li.getTextContent()).append("\n");
}
j++;
}
}
i++;
}
if (sb.length() > 0) {
fail("Failures:\n" + sb + "User Agent: " + page.getElementById("qunit-userAgent").getTextContent());
}
}
protected HtmlPage loadPage(URL url) throws Exception {
HtmlPage page = webClient_.getPage(url);
webClient_.waitForBackgroundJavaScriptStartingBefore(4 * 60 * 1000);
return page;
}
/**
* @throws Exception if an error occurs
*/
@Test
public void test() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/4_0_0.html"));
}
@Test
public void testEvent() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-event");
}
@Test
public void testPosition() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=jquery-position");
}
@Test
public void testQueueRequest() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-queue-request");
}
@Test
public void testQueueGetSize() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-queue-getSize");
}
@Test
public void testQueueEmpty() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-queue-isEmpty");
}
@Test
public void testQueueClear() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-queue-clear");
}
@Test
public void testQueueSubmitFirst() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"), "?module=richfaces-queue-submitFirst");
}
@Test
public void testBaseComponent() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"),
"?module=richfaces-base-component");
}
@Test
public void testRemoveStaleEntries() throws Exception {
runTest(getClass().getClassLoader().getResource("javascript/richfaces-client-api.html"),
"?module=richfaces-queue-remove-stale-entries");
}
}