/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.vpe.facelets.test;
import static org.jboss.tools.vpe.xulrunner.util.XPCOM.queryInterface;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.part.FileEditorInput;
import org.jboss.tools.jst.web.ui.internal.editor.jspeditor.JSPMultiPageEditor;
import org.jboss.tools.vpe.base.test.TestUtil;
import org.jboss.tools.vpe.base.test.VpeTest;
import org.jboss.tools.vpe.editor.util.HTML;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.mozilla.interfaces.nsIDOMNode;
import org.mozilla.interfaces.nsIDOMText;
import static org.junit.Assert.*;
/**
* Class for testing all Facelets components
*
* @author dsakovich@exadel.com
*
*/
public class FaceletsComponentTest extends VpeTest {
private static final String PAGE_HEADER = "Page Header"; //$NON-NLS-1$
private static final String USER = "#{user}"; //$NON-NLS-1$
private static final String COMPONENT_S_CONTENT_IS_NOT_SHOWN = "Component's content is not shown"; //$NON-NLS-1$
private static final String TEMPLATE_WITH_RELATED_PATH_IS_NOT_INCLUDED = "Template with related path is not included"; //$NON-NLS-1$
private static final String TEMPLATE_WITH_ABSOLUTE_PATH_IS_NOT_INCLUDED = "Template with absolute path is not included"; //$NON-NLS-1$
private static final String DEFINED_CONTENT_IS_NOT_SHOWN = "Defined content is not shown"; //$NON-NLS-1$
public FaceletsComponentTest() {
setCheckWarning(false);
}
@BeforeClass
public static void validateEnv() {
//Assume.assumeFalse(VpeTest.skipTests);
}
/**
* Test for ui:debug
*
* @throws Throwable
*/
public void _testDebug() throws Throwable {
nsIDOMElement element = performTestForFaceletComponent("components/debug.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "div" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_DIV);
assertEquals(5, elements.size());
nsIDOMElement divElement = queryInterface(elements.get(4), nsIDOMElement.class);
nsIDOMText text = queryInterface(divElement.getFirstChild(), nsIDOMText.class);
assertEquals("Debug's content is not shown", text.getNodeValue(), //$NON-NLS-1$
"Ctrl+Shift+"); //$NON-NLS-1$
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:define
*
* @throws Throwable
*/
public void testDefine() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
nsIDOMElement element = performTestForFaceletComponent("components/define.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "span" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_SPAN);
assertEquals(3, elements.size());
nsIDOMElement elementSpan0 = queryInterface(elements.get(0), nsIDOMElement.class);
nsIDOMElement elementSpan1 = queryInterface(elements.get(1), nsIDOMElement.class);
nsIDOMElement elementSpan2 = queryInterface(elements.get(2), nsIDOMElement.class);
nsIDOMText text0 = queryInterface(elementSpan0.getFirstChild(), nsIDOMText.class);
nsIDOMText text1 = queryInterface(elementSpan1.getFirstChild(), nsIDOMText.class);
nsIDOMText text2 = queryInterface(elementSpan2.getFirstChild(), nsIDOMText.class);
assertEquals(DEFINED_CONTENT_IS_NOT_SHOWN, text0.getNodeValue(),
"Greeting Page"); //$NON-NLS-1$
assertEquals(DEFINED_CONTENT_IS_NOT_SHOWN, text1.getNodeValue(),
USER);
assertEquals(DEFINED_CONTENT_IS_NOT_SHOWN, text2.getNodeValue(),
"#{person.name}!"); //$NON-NLS-1$
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:composition
*
* @throws Throwable
*/
@Test
public void testComposition() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
// check absolute path
nsIDOMElement element = performTestForFaceletComponent("components/composition_absolute.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_ABSOLUTE_PATH_IS_NOT_INCLUDED);
// check related path
element = performTestForFaceletComponent("components/composition_related.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_RELATED_PATH_IS_NOT_INCLUDED);
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:component
*
* @throws Throwable
*/
@Test
public void testComponent() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
nsIDOMElement element = performTestForFaceletComponent("components/component.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "div" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_DIV);
assertEquals(1, elements.size());
nsIDOMElement div = queryInterface(elements.get(0), nsIDOMElement.class);
String title = div.getAttribute("title"); //$NON-NLS-1$
assertEquals(COMPONENT_S_CONTENT_IS_NOT_SHOWN, title.replaceAll("\\s+", //$NON-NLS-1$
""), "ui:componentbinding:#{backingBean.menu}"); //$NON-NLS-1$ //$NON-NLS-2$
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:remove
*
* @throws Throwable
*/
@Test
public void testRemove() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
nsIDOMElement element = performTestForFaceletComponent("components/remove.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "span" elements
TestUtil.findElementsByName(node, elements, HTML.TAG_SPAN);
for (int i = 0; i < elements.size(); i++) {
nsIDOMElement elementSpan = queryInterface(elements.get(i), nsIDOMElement.class);
nsIDOMText text = queryInterface(elementSpan.getFirstChild(), nsIDOMText.class);
if (text == null)
continue;
assertEquals(
"Content inside ui:remove tag shouldn't be shown", false, //$NON-NLS-1$
text.getNodeValue().equals("\nThis will be removed.\n")); //$NON-NLS-1$
}
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:decorate
*
* @throws Throwable
*/
@Test
public void testDecorate() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
// check absolute path
nsIDOMElement element = performTestForFaceletComponent("components/decorate_absolute.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_ABSOLUTE_PATH_IS_NOT_INCLUDED);
// check related path
element = performTestForFaceletComponent("components/decorate_related.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_RELATED_PATH_IS_NOT_INCLUDED);
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:repeat
*
* @throws Throwable
*/
@Test
public void testRepeat() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
nsIDOMElement element = performTestForFaceletComponent("components/repeat.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "dl" elements
TestUtil.findElementsByName(node, elements, HTML.TAG_DL);
assertEquals(1, elements.size());
nsIDOMElement elementDL = queryInterface(elements.get(0), nsIDOMElement.class);
elements.clear();
TestUtil.findAllElementsByName(elementDL, elements, HTML.TAG_DT);
assertEquals(1, elements.size());
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:include
*
* @throws Throwable
*/
@Test
public void testInclude() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
// check absolute path
nsIDOMElement element = performTestForFaceletComponent("components/include_absolute.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_ABSOLUTE_PATH_IS_NOT_INCLUDED);
// check related path
element = performTestForFaceletComponent("components/include_related.xhtml"); //$NON-NLS-1$
checkTemplatePage(element, PAGE_HEADER,
TEMPLATE_WITH_RELATED_PATH_IS_NOT_INCLUDED);
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:fragment
*
* @throws Throwable
*/
@Test
public void testFragment() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
nsIDOMElement element = performTestForFaceletComponent("components/fragment.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "div" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_DIV);
assertEquals(4, elements.size());
nsIDOMElement div = queryInterface(elements.get(3), nsIDOMElement.class);
String title = div.getAttribute("title"); //$NON-NLS-1$
assertEquals("Fragment's content is not shown", title.replaceAll( //$NON-NLS-1$
"\\s+", ""), "ui:fragmentbinding:#{uiCache['searchResult']}"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
if (getException() != null) {
throw getException();
}
}
/**
* Test for ui:insert
*
* @throws Throwable
*/
@Test
public void testInsert() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
performTestForVpeComponent((IFile) TestUtil.getComponentPath(
"components/insert.xhtml", FaceletsAllTests.IMPORT_PROJECT_NAME)); //$NON-NLS-1$
}
/**
*
* @param componentPage
* @return
* @throws Throwable
*/
private nsIDOMElement performTestForFaceletComponent(String componentPage)
throws Throwable {
TestUtil.waitForJobs();
// set exception
setException(null);
// get test page path
IFile file = (IFile) TestUtil.getComponentPath(componentPage,
FaceletsAllTests.IMPORT_PROJECT_NAME);
assertNotNull("Could not open specified file. componentPage = " + componentPage//$NON-NLS-1$
+ ";projectName = " + FaceletsAllTests.IMPORT_PROJECT_NAME, file);//$NON-NLS-1$
IEditorInput input = new FileEditorInput(file);
assertNotNull("Editor input is null", input); //$NON-NLS-1$
// open and get editor
JSPMultiPageEditor part = openEditor(input);
// get dom document
nsIDOMDocument document = TestUtil.getVpeVisualDocument(part);
nsIDOMElement element = document.getDocumentElement();
// check that element is not null
assertNotNull(element);
return element;
}
/**
* Test for ui:param
*
* @throws Throwable
*/
@Test
public void testParam() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
// check absolute path
nsIDOMElement element = performTestForFaceletComponent("components/param.xhtml"); //$NON-NLS-1$
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "td" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_TD);
assertEquals(5, elements.size());
nsIDOMElement td = queryInterface(elements.get(1), nsIDOMElement.class);
nsIDOMElement span = queryInterface(td.getFirstChild(), nsIDOMElement.class);
nsIDOMText text = queryInterface(span.getFirstChild(), nsIDOMText.class);
assertEquals(COMPONENT_S_CONTENT_IS_NOT_SHOWN, text.getNodeValue(),
USER);
if (getException() != null) {
throw getException();
}
}
private void checkTemplatePage(nsIDOMElement element, String contextString,
String message) {
nsIDOMNode node = queryInterface(element, nsIDOMNode.class);
List<nsIDOMNode> elements = new ArrayList<nsIDOMNode>();
// find "td" elements
TestUtil.findAllElementsByName(node, elements, HTML.TAG_TD);
assertEquals(message, 5, elements.size());
nsIDOMElement td = queryInterface(elements.get(0), nsIDOMElement.class);
nsIDOMElement div = queryInterface(td.getFirstChild(), nsIDOMElement.class);
nsIDOMElement span = queryInterface(div.getFirstChild(), nsIDOMElement.class);
nsIDOMText text = queryInterface(span.getFirstChild(), nsIDOMText.class);
assertEquals(message, contextString, text.getNodeValue());
}
/**
* Test for all facelets tags
*
* @throws Throwable
*/
@Test
public void testAllTags() throws Throwable {
Assume.assumeFalse(VpeTest.skipTests);
performTestForVpeComponent((IFile) TestUtil.getComponentPath(
"components/faceletsTest.xhtml", FaceletsAllTests.IMPORT_PROJECT_NAME)); //$NON-NLS-1$
}
}