[Bug 252861] JUnit testing for tag converter transform operation to support generating markup based on view mode.
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/metadata/checkmodeop_dti.xml b/jsf/tests/org.eclipse.jst.pagedesigner.tests/metadata/checkmodeop_dti.xml
new file mode 100644
index 0000000..606f424
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/metadata/checkmodeop_dti.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:metadatamodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
+ xmlns:dti="http://org.eclipse.jsf.pagedesigner/dtinfo.ecore"
+ id="org.eclipse.jst.pagedesigner.tests.testCheckModeOperation"
+ type="tagFile">
+
+ <entity id="testTagOne" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="org.eclipse.jst.pagedesigner.CheckModeOperation">
+ <parameter value="design"/>
+ <operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
+ <parameter value="div"/>
+ </operation>
+ <operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
+ </operation>
+ </tag-convert-info>
+ <tag-decorate-info id="vpd-decorate-preview"
+ nonVisual="true"
+ />
+ </value>
+ </trait>
+ </entity>
+
+ <entity id="testTagTwo" type="tag">
+ <trait id="dt-info">
+ <value xsi:type="dti:DTInfo">
+ <tag-convert-info>
+ <operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
+ <parameter value="div"/>
+ </operation>
+ <operation id="org.eclipse.jst.pagedesigner.CheckModeOperation">
+ <parameter value="design"/>
+ <operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
+ <parameter value="requiredAttr1"/>
+ </operation>
+ <operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
+ <parameter value="requiredAttr1"/>
+ <parameter value="id"/>
+ </operation>
+ </operation>
+ <operation id="org.eclipse.jst.pagedesigner.CheckModeOperation">
+ <parameter value="preview"/>
+ <operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
+ <parameter value="requiredAttr2"/>
+ </operation>
+ <operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
+ <parameter value="requiredAttr2"/>
+ <parameter value="id"/>
+ </operation>
+ </operation>
+ </tag-convert-info>
+ </value>
+ </trait>
+ </entity>
+
+</md:metadatamodel>
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml b/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
index 7976318..adcc045 100644
--- a/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
@@ -4,6 +4,10 @@
<extension
point="org.eclipse.jst.jsf.common.standardMetaDataFiles">
<standardMetaDataFile
+ location="/metadata/checkmodeop_dti.xml"
+ uri="org.eclipse.jst.pagedesigner.tests.testCheckModeOperation">
+ </standardMetaDataFile>
+ <standardMetaDataFile
location="/metadata/test-metadata.xml"
uri="org.eclipse.jst.pagedesigner.tests.tagCreatorFactory1">
</standardMetaDataFile>
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/Test_TransformOperations.java b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/Test_TransformOperations.java
index 4eaa113..76850be 100644
--- a/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/Test_TransformOperations.java
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/Test_TransformOperations.java
@@ -180,6 +180,122 @@
}
/**
+ * Test "CheckModeOperation".
+ */
+ public void testCheckModeOperation() {
+ try {
+ webProjectTestEnv.loadResourceInWebRoot(
+ PageDesignerTestsPlugin.getDefault().getBundle()
+ , "/testdata/checkmodeop/checkModeOp.tld.data"
+ , "/META-INF/checkModeOp.tld");
+
+ webProjectTestEnv.loadResourceInWebRoot(
+ PageDesignerTestsPlugin.getDefault().getBundle()
+ ,"/testdata/checkmodeop/testCheckModeOperation.jsp.data"
+ ,"/testCheckModeOperation.jsp");
+
+ ContextWrapper wrapper = null;
+
+ // First converter is simple use of CheckModeOperation
+ // containing child operations.
+ // Exercises both design and preview mode, but there should
+ // only be conversion for design view, based on the design
+ // time info trait in the meta-data for the tag in this test.
+ try {
+ wrapper =
+ getDocumentContext("/WebContent/testCheckModeOperation.jsp", 365);
+
+ String prefix = "cmo";
+ String localName = "testTagOne";
+ ITagConverter tagConverter =
+ getTagConverter(wrapper, prefix, localName, IConverterFactory.MODE_DESIGNER);
+ assertNotNull(tagConverter);
+
+ // invoke ITagConverter instance
+ tagConverter.convertRefresh(null);
+
+ // get and test result element
+ Element resultElement = tagConverter.getResultElement();
+ assertNotNull(resultElement);
+ assertEquals("div", resultElement.getLocalName());
+
+ // Ensure correct child element was copied to child node list.
+ // First child is text node, look at second child.
+ List<?> childNodes = tagConverter.getChildModeList();
+ assertTrue(childNodes.size() > 1);
+ Node secondChildNode = (Node)childNodes.get(1);
+ assertTrue(secondChildNode instanceof Element);
+ Element secondChildElement = (Element)secondChildNode;
+ assertEquals("span", secondChildElement.getLocalName());
+ assertEquals("t1ChildSpan", secondChildElement.getAttribute("id"));
+
+ // now try in preview mode
+ tagConverter =
+ getTagConverter(wrapper, prefix, localName, IConverterFactory.MODE_PREVIEW);
+ assertNotNull(tagConverter);
+
+ // invoke ITagConverter instance
+ tagConverter.convertRefresh(null);
+
+ // get and test result element
+ resultElement = tagConverter.getResultElement();
+ assertNull(resultElement);
+ } finally {
+ if (wrapper != null) {
+ wrapper.dispose();
+ }
+ }
+
+ // Second tag converter has the CheckModeOperation
+ // as a sibling operation for additional transforms.
+ // Exercises both design and preview mode.
+ try {
+ wrapper =
+ getDocumentContext("/WebContent/testCheckModeOperation.jsp", 531);
+
+ String prefix = "cmo";
+ String localName = "testTagTwo";
+
+ // test conversion for design mode
+ ITagConverter tagConverter =
+ getTagConverter(wrapper, prefix, localName, IConverterFactory.MODE_DESIGNER);
+ assertNotNull(tagConverter);
+
+ // invoke ITagConverter instance
+ tagConverter.convertRefresh(null);
+
+ // get and test result element
+ Element resultElement = tagConverter.getResultElement();
+ assertNotNull(resultElement);
+ assertEquals("div", resultElement.getLocalName());
+ assertEquals("designId", resultElement.getAttribute("id"));
+
+ // now try in preview mode
+ tagConverter =
+ getTagConverter(wrapper, prefix, localName, IConverterFactory.MODE_PREVIEW);
+ assertNotNull(tagConverter);
+
+ // invoke ITagConverter instance
+ tagConverter.convertRefresh(null);
+
+ // get and test result element
+ resultElement = tagConverter.getResultElement();
+ assertNotNull(resultElement);
+ assertEquals("div", resultElement.getLocalName());
+ assertEquals("previewId", resultElement.getAttribute("id"));
+ } finally {
+ if (wrapper != null) {
+ wrapper.dispose();
+ }
+ }
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ fail(ex.getLocalizedMessage());
+ }
+ }
+
+
+ /**
* Test "ConvertAttributeToTextOperation".
*/
public void testConvertAttributeToTextOperation() {
@@ -256,29 +372,8 @@
ContextWrapper wrapper = null;
try {
wrapper = getDocumentContext("/WebContent/Test_TransformOperations.jsp", 620);
- IStructuredDocumentContext context = wrapper.getContext();
- IDOMContextResolver resolver =
- IStructuredDocumentContextResolverFactory.INSTANCE.
- getDOMContextResolver(context);
-
- //get Element
- Node node = resolver.getNode();
- assertTrue(node instanceof Element);
- assertEquals("h", node.getPrefix());
- assertEquals("commandLink", node.getLocalName());
- 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);
+ ITagConverter tagConverter =
+ getTagConverter(wrapper, "h", "commandLink", IConverterFactory.MODE_DESIGNER);
assertNotNull(tagConverter);
//invoke ITagConverter instance
@@ -519,42 +614,16 @@
ContextWrapper wrapper = null;
try {
wrapper = getDocumentContext("/WebContent/Test_TransformOperations.jsp", docOffset);
- IStructuredDocumentContext context = wrapper.getContext();
- IDOMContextResolver resolver =
- IStructuredDocumentContextResolverFactory.INSTANCE.
- getDOMContextResolver(context);
+ ITagConverter tagConverter =
+ getTagConverter(wrapper, prefix, localName, IConverterFactory.MODE_DESIGNER);
- //get Element
- Node node = resolver.getNode();
- if (
- node instanceof Element &&
- node.getPrefix().equals(prefix) &&
- node.getLocalName().equals(localName)) {
-
- Element element = (Element)node;
-
- //get IDOMDocument
- IStructuredModel model = wrapper.getModel();
- if (model instanceof IDOMModel) {
- IDOMDocument document = ((IDOMModel)model).getDocument();
- if (document != null) {
-
- //get ITagConverter instance
- ITagConverter tagConverter = DTManager.getInstance().getTagConverter(
- element,
- IConverterFactory.MODE_DESIGNER,
- document);
- if (tagConverter != null) {
-
- //invoke ITagConverter instance
- tagConverter.convertRefresh(null);
-
- //get result element
- resultElement = tagConverter.getResultElement();
- }
- }
- }
- }
+ if (tagConverter != null) {
+ //invoke ITagConverter instance
+ tagConverter.convertRefresh(null);
+
+ //get result element
+ resultElement = tagConverter.getResultElement();
+ }
} finally {
if (wrapper != null) {
wrapper.dispose();
@@ -563,6 +632,40 @@
return resultElement;
}
+ private ITagConverter getTagConverter(ContextWrapper wrapper, String prefix,
+ String localName, int mode) throws Exception {
+ ITagConverter tagConverter = null;
+ IStructuredDocumentContext context = wrapper.getContext();
+ IDOMContextResolver resolver =
+ IStructuredDocumentContextResolverFactory.INSTANCE.
+ getDOMContextResolver(context);
+
+ //get Element
+ Node node = resolver.getNode();
+ if (node instanceof Element
+ && node.getPrefix().equals(prefix)
+ && node.getLocalName().equals(localName)) {
+
+ Element element = (Element)node;
+
+ //get IDOMDocument
+ IStructuredModel model = wrapper.getModel();
+ if (model instanceof IDOMModel) {
+ IDOMDocument document = ((IDOMModel)model).getDocument();
+ if (document != null) {
+
+ //get ITagConverter instance
+ tagConverter = DTManager.getInstance().getTagConverter(
+ element,
+ mode,
+ document);
+ }
+ }
+ }
+
+ return tagConverter;
+ }
+
private ContextWrapper getDocumentContext(String path, int offset) throws Exception {
IProject project = webProjectTestEnv.getTestProject();
IFile jspFile = project.getFile(new Path(path));
@@ -597,5 +700,4 @@
model.releaseFromRead();
}
}
-
}