/*******************************************************************************
* 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.kb.test;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.jboss.tools.common.el.core.resolver.ELContext;
import org.jboss.tools.common.text.TextProposal;
import org.jboss.tools.jst.web.kb.IKbProject;
import org.jboss.tools.jst.web.kb.KbQuery;
import org.jboss.tools.jst.web.kb.KbQuery.Type;
import org.jboss.tools.jst.web.kb.PageContextFactory;
import org.jboss.tools.jst.web.kb.PageProcessor;
import org.jboss.tools.jst.web.kb.internal.scanner.LoadedDeclarations;
import org.jboss.tools.jst.web.kb.internal.scanner.ScannerException;
import org.jboss.tools.jst.web.kb.internal.scanner.XMLScanner;
import org.jboss.tools.jst.web.kb.taglib.ITagLibrary;
import org.jboss.tools.test.util.JUnitUtils;
import org.jboss.tools.test.util.TestProjectProvider;
public class FaceletsKbModelTest extends TestCase {
private IProject testProject;
TestProjectProvider provider = null;
boolean makeCopy = true;
public FaceletsKbModelTest() {
super("Kb Model Test");
}
protected void setUp() throws Exception {
if(testProject==null) {
testProject = ResourcesPlugin.getWorkspace().getRoot().getProject("TestKbModel");
assertNotNull("Can't load TestKbModel", testProject); //$NON-NLS-1$
}
}
private IKbProject getKbProject() {
IKbProject kbProject = null;
try {
kbProject = (IKbProject)testProject.getNature(IKbProject.NATURE_ID);
} catch (Exception e) {
JUnitUtils.fail("Cannot get seam nature.",e);
}
return kbProject;
}
public void testTldXMLScanner() {
IKbProject kbProject = getKbProject();
IFile f = testProject.getFile("WebContent/WEB-INF/faces-config.xml");
assertNotNull(f);
XMLScanner scanner = new XMLScanner();
List<ITagLibrary> ls = null;
try {
LoadedDeclarations ds = scanner.parse(f, kbProject);
ls = ds.getLibraries();
} catch (ScannerException e) {
JUnitUtils.fail("Error in xml scanner",e);
}
assertEquals(1, ls.size());
assertTrue(ls.get(0).getComponents().length > 0);
//Facelete taglib 1
ls = null;
f = testProject.getFile("WebContent/facelet-taglib.xml");
assertNotNull(f);
try {
LoadedDeclarations ds = scanner.parse(f, kbProject);
ls = ds.getLibraries();
} catch (ScannerException e) {
JUnitUtils.fail("Error in xml scanner",e);
}
assertEquals(1, ls.size());
assertTrue(ls.get(0).getComponents().length > 0);
//Facelet taglib 2.0
ls = null;
f = testProject.getFile("WebContent/facelet-taglib2.xml");
assertNotNull(f);
try {
LoadedDeclarations ds = scanner.parse(f, kbProject);
ls = ds.getLibraries();
} catch (ScannerException e) {
JUnitUtils.fail("Error in xml scanner",e);
}
assertEquals(1, ls.size());
assertTrue(ls.get(0).getComponents().length > 0);
//Facelet taglib 2.2
ls = null;
f = testProject.getFile("WebContent/facelet-taglib22.xml");
assertNotNull(f);
try {
LoadedDeclarations ds = scanner.parse(f, kbProject);
ls = ds.getLibraries();
} catch (ScannerException e) {
JUnitUtils.fail("Error in xml scanner",e);
}
assertEquals(1, ls.size());
assertTrue(ls.get(0).getComponents().length > 0);
}
/**
* https://jira.jboss.org/jira/browse/JBIDE-6284
* https://jira.jboss.org/browse/JBIDE-7210
*/
public void testFFacet() {
IFile file = testProject.getFile("WebContent/pages/inputUserName.xhtml");
ELContext context = PageContextFactory.createPageContext(file);
KbQuery query = new KbQuery();
query.setMask(true);
query.setOffset(356);
query.setType(Type.TAG_NAME);
query.setPrefix("f");
query.setUri("http://java.sun.com/jsf/core");
query.setValue("f:facet");
TextProposal[] proposals = PageProcessor.getInstance().getProposals(query, context, true);
boolean ok = false;
for (TextProposal proposal : proposals) {
if("<f:facet name=\"\">".equals(proposal.getReplacementString())) {
ok = true;
}
if(proposal.getReplacementString().endsWith("/>")) {
fail("<f:facet /> proposal found.");
}
}
assertTrue("Can't find <f:facet name=\"\"> proposal.", ok);
}
/**
* https://jira.jboss.org/browse/JBIDE-7210
*/
public void testActionparam() {
IFile file = testProject.getFile("WebContent/pages/actionparam.xhtml");
ELContext context = PageContextFactory.createPageContext(file);
KbQuery query = new KbQuery();
query.setMask(true);
query.setOffset(400);
query.setType(Type.TAG_NAME);
query.setPrefix("a4j");
query.setUri("http://richfaces.org/a4j");
query.setValue("a4j:actionpara");
TextProposal[] proposals = PageProcessor.getInstance().getProposals(query, context, true);
boolean ok = false;
for (TextProposal proposal : proposals) {
if("<a4j:actionparam name=\"\" value=\"\" />".equals(proposal.getReplacementString())) {
ok = true;
}
if(proposal.getReplacementString().endsWith(" >")) {
fail("Not closed <a4j:actionparam > proposal found.");
}
}
assertTrue("Can't find <a4j:actionparam name=\"\" value=\"\" /> proposal.", ok);
}
/**
* https://jira.jboss.org/browse/JBIDE-7261
*/
public void testFacelets() {
IFile file = testProject.getFile("WebContent/pages/inputUserName.xhtml");
ELContext context = PageContextFactory.createPageContext(file);
KbQuery query = new KbQuery();
query.setMask(true);
query.setOffset(310);
query.setType(Type.TAG_NAME);
query.setParentTags(new String[]{"html"});
query.setPrefix("ui");
query.setUri("http://java.sun.com/jsf/facelets");
query.setValue("ui:comp");
TextProposal[] proposals = PageProcessor.getInstance().getProposals(query, context, true);
boolean found = false;
for (TextProposal proposal : proposals) {
if(proposal.getReplacementString().startsWith("<ui:composition")) {
found = true;
break;
}
}
assertTrue("Can't find <ui:composition> proposal.", found);
query.setOffset(322);
query.setType(Type.ATTRIBUTE_NAME);
query.setParentTags(new String[]{"html", "ui:composition"});
query.setPrefix("ui");
query.setUri("http://java.sun.com/jsf/facelets");
query.setValue("temp");
proposals = PageProcessor.getInstance().getProposals(query, context, true);
for (TextProposal proposal : proposals) {
if("template".equals(proposal.getReplacementString())) {
return;
}
}
fail("Can't find <ui:composition template=\"> proposal.");
}
public void testFacelets22() {
IFile file = testProject.getFile("WebContent/pages/inputUserName22.xhtml");
ELContext context = PageContextFactory.createPageContext(file);
KbQuery query = new KbQuery();
query.setMask(true);
query.setOffset(310+3);
query.setType(Type.TAG_NAME);
query.setParentTags(new String[]{"html"});
query.setPrefix("ui");
query.setUri("http://xmlns.jcp.org/jsf/facelets");
query.setValue("ui:comp");
TextProposal[] proposals = PageProcessor.getInstance().getProposals(query, context, true);
boolean found = false;
for (TextProposal proposal : proposals) {
if(proposal.getReplacementString().startsWith("<ui:composition")) {
found = true;
break;
}
}
assertTrue("Can't find <ui:composition> proposal.", found);
query.setOffset(322+3);
query.setType(Type.ATTRIBUTE_NAME);
query.setParentTags(new String[]{"html", "ui:composition"});
query.setPrefix("ui");
query.setUri("http://xmlns.jcp.org/jsf/facelets");
query.setValue("temp");
proposals = PageProcessor.getInstance().getProposals(query, context, true);
for (TextProposal proposal : proposals) {
if("template".equals(proposal.getReplacementString())) {
return;
}
}
fail("Can't find <ui:composition template=\"> proposal.");
}
/**
* https://jira.jboss.org/jira/browse/JBIDE-3875
*/
public void testFacetNames() {
IFile file = testProject.getFile("WebContent/pages/facetname.xhtml");
ELContext context = PageContextFactory.createPageContext(file);
KbQuery query = new KbQuery();
query.setMask(true);
query.setOffset(302);
query.setType(Type.ATTRIBUTE_VALUE);
query.setPrefix("f");
query.setUri("http://java.sun.com/jsf/core");
query.setValue("h");
query.setParentTags(new String[]{"rich:page", "f:facet"});
query.setParent("name");
query.setStringQuery("h");
TextProposal[] proposals = PageProcessor.getInstance().getProposals(query, context, true);
for (TextProposal proposal : proposals) {
if("header".equals(proposal.getReplacementString())) {
return;
}
}
fail("Can't find \"header\" proposal.");
}
protected void tearDown() throws Exception {
if(provider != null) {
provider.dispose();
}
}
}