blob: 007b86ba205a666807b54844b3e95c788de877b1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.tests;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
import org.eclipse.jst.jsf.core.IJSFCoreConstants;
import org.eclipse.jst.jsf.core.JSFVersion;
import org.eclipse.jst.jsf.core.tests.util.JSFCoreUtilHelper;
import org.eclipse.jst.jsf.core.tests.util.JSFFacetedTestEnvironment;
import org.eclipse.jst.jsf.test.util.JSFTestUtil;
import org.eclipse.jst.jsf.test.util.WebProjectTestEnvironment;
import org.eclipse.jst.jsp.core.internal.domdocument.DOMModelForJSP;
import org.eclipse.jst.pagedesigner.converter.IConverterFactory;
import org.eclipse.jst.pagedesigner.converter.ITagConverter;
import org.eclipse.jst.pagedesigner.dtmanager.DTManager;
import org.eclipse.jst.pagedesigner.dtmanager.IDTInfo;
import org.eclipse.jst.pagedesigner.dtmanager.dtinfo.TagConvertInfo;
import org.eclipse.jst.pagedesigner.dtmanager.dtinfo.TagDecorateInfo;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* DTManager tests.
*
* @author Ian Trimble - Oracle
*/
public class Test_DTManager extends TestCase {
private WebProjectTestEnvironment webProjectTestEnv;
protected void setUp() throws Exception {
super.setUp();
JSFTestUtil.setValidationEnabled(false);
webProjectTestEnv = new WebProjectTestEnvironment("Test_DTManager_" + getName());
webProjectTestEnv.createProject(false);
assertNotNull(webProjectTestEnv);
assertNotNull(webProjectTestEnv.getTestProject());
assertTrue(webProjectTestEnv.getTestProject().isAccessible());
JSFFacetedTestEnvironment jsfFacetedTestEnv = new JSFFacetedTestEnvironment(webProjectTestEnv);
jsfFacetedTestEnv.initialize(IJSFCoreConstants.FACET_VERSION_1_1);
webProjectTestEnv.loadResourceInWebRoot(
PageDesignerTestsPlugin.getDefault().getBundle(),
"/testdata/Test_DTManager.jsp.data",
"/Test_DTManager.jsp");
assertTrue(JSFCoreUtilHelper.addJSFRuntimeJarsToClasspath(JSFVersion.V1_1, jsfFacetedTestEnv));
}
/**
* Sanity check.
*/
public void testSanity() {
ContextWrapper wrapper = null;
try {
wrapper = getDocumentContext("/WebContent/Test_DTManager.jsp", 477);
IStructuredDocumentContext context = wrapper.getContext();
IDOMContextResolver resolver =
IStructuredDocumentContextResolverFactory.INSTANCE.
getDOMContextResolver(context);
Node node = resolver.getNode();
assertTrue(node instanceof Element);
assertTrue(node.getPrefix().equals("h"));
assertTrue(node.getLocalName().equals("outputText"));
} catch(Exception ex) {
ex.printStackTrace();
fail(ex.getLocalizedMessage());
} finally {
if (wrapper != null) {
wrapper.dispose();
}
}
}
/**
* Test "getTagConverter(...)" method.
*/
public void testGetTagConverter() {
ContextWrapper wrapper = null;
try {
wrapper = getDocumentContext("/WebContent/Test_DTManager.jsp", 477);
IStructuredDocumentContext context = wrapper.getContext();
IDOMContextResolver resolver =
IStructuredDocumentContextResolverFactory.INSTANCE.
getDOMContextResolver(context);
//get Element
Node node = resolver.getNode();
assertTrue(node instanceof Element);
assertTrue(node.getPrefix().equals("h"));
assertTrue(node.getLocalName().equals("outputText"));
Element element = (Element)node;
//get IDOMDocument
IStructuredModel model = wrapper.getModel();
assertTrue(model instanceof IDOMModel);
IDOMDocument document = ((IDOMModel)model).getDocument();
assertNotNull(document);
//get ITagConverter instance
ITagConverter tagConverter = DTManager.getInstance().getTagConverter(
element,
IConverterFactory.MODE_DESIGNER,
document);
assertNotNull(tagConverter);
//invoke ITagConverter instance
tagConverter.convertRefresh(null);
//test result element to ensure operations were discovered and invoked
Element resultElement = tagConverter.getResultElement();
assertNotNull(resultElement);
assertTrue(resultElement.getLocalName().equals("span"));
assertNull(resultElement.getAttributeNode("value"));
NodeList childNodes = resultElement.getChildNodes();
assertTrue(childNodes.getLength() == 1);
Node childNode = childNodes.item(0);
assertTrue(childNode instanceof Text);
assertTrue(((Text)childNode).getData().equals("valueValue"));
assertNull(resultElement.getAttributeNode("styleClass"));
assertNotNull(resultElement.getAttributeNode("class"));
assertTrue(resultElement.getAttribute("class").equals("classValue"));
assertNotNull(resultElement.getAttributeNode("attr1"));
assertTrue(resultElement.getAttribute("attr1").equals("attr1Value"));
} catch(Exception ex) {
ex.printStackTrace();
fail(ex.getLocalizedMessage());
} finally {
if (wrapper != null) {
wrapper.dispose();
}
}
}
/**
* Test "getDTInfo(...)" method.
*/
public void testGetDTInfo() {
ContextWrapper wrapper = null;
try {
wrapper = getDocumentContext("/WebContent/Test_DTManager.jsp", 477);
IStructuredDocumentContext context = wrapper.getContext();
IDOMContextResolver resolver =
IStructuredDocumentContextResolverFactory.INSTANCE.
getDOMContextResolver(context);
//get Element
Node node = resolver.getNode();
assertTrue(node instanceof Element);
assertTrue(node.getPrefix().equals("h"));
assertTrue(node.getLocalName().equals("outputText"));
Element element = (Element)node;
//get IDTInfo instance
IDTInfo dtInfo = DTManager.getInstance().getDTInfo(element);
assertNotNull(dtInfo);
//test IDTInfo instance
TagConvertInfo tcInfo = dtInfo.getTagConvertInfo();
List<?> operations = tcInfo.getOperations();
assertNotNull(operations);
assertEquals(4, operations.size());
List<?> tdInfos = dtInfo.getTagDecorateInfos();
assertEquals(2, tdInfos.size());
TagDecorateInfo tdInfoDesign = dtInfo.getTagDecorateInfo("vpd-decorate-design");
assertNotNull(tdInfoDesign);
assertTrue(tdInfoDesign.isNeedBorderDecorator());
assertTrue(tdInfoDesign.isMultiLevel());
assertTrue(tdInfoDesign.isWidget());
assertTrue(tdInfoDesign.isSetNonVisualChildElements());
TagDecorateInfo tdInfoPreview = dtInfo.getTagDecorateInfo("vpd-decorate-preview");
assertNotNull(tdInfoPreview);
assertTrue(tdInfoPreview.isResolveChildText());
} catch(Exception ex) {
ex.printStackTrace();
fail(ex.getLocalizedMessage());
} finally {
if (wrapper != null) {
wrapper.dispose();
}
}
}
private ContextWrapper getDocumentContext(String path, int offset) throws Exception {
IProject project = webProjectTestEnv.getTestProject();
IFile jspFile = project.getFile(new Path(path));
assertTrue(jspFile.exists());
final IModelManager modelManager =
StructuredModelManager.getModelManager();
IStructuredModel model = null;
model = modelManager.getModelForRead(jspFile);
assertTrue(model instanceof DOMModelForJSP);
final IStructuredDocumentContext context =
IStructuredDocumentContextFactory.INSTANCE.getContext(
model.getStructuredDocument(),
offset);
return new ContextWrapper(context, model);
}
private static class ContextWrapper {
private final IStructuredDocumentContext context;
private final IStructuredModel model;
ContextWrapper(final IStructuredDocumentContext context, final IStructuredModel model) {
super();
this.context = context;
this.model = model;
}
IStructuredDocumentContext getContext() {
return context;
}
IStructuredModel getModel() {
return model;
}
void dispose() {
model.releaseFromRead();
}
}
}