/******************************************************************************* * Copyright (c) 2004, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.jsp.ui.tests.pagedirective; import java.io.IOException; import junit.framework.TestCase; import org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapter; import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.ltk.modelhandler.EmbeddedTypeHandler; import org.eclipse.wst.sse.core.internal.provisional.IModelManager; import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory; import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.xml.core.internal.modelhandler.EmbeddedXML; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapter; import org.w3c.dom.Node; /** * @author davidw */ public class TestPageDirective extends TestCase { class MyEmbeddedFactory implements INodeAdapterFactory { public INodeAdapter adapt(INodeNotifier object) { return null; } public INodeAdapterFactory copy() { return null; } public boolean isFactoryForType(Object type) { return type instanceof MyAdaptedClass; } public void release() { // noop } } class MyAdaptedClass { // dummy class is key } /** * Constructor for TestPageDirective. * @param name */ public TestPageDirective(String name) { super(name); } public void testBasicPD() throws IOException { // First make (empty) structuredDocument IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); assertTrue("model could not be created!", model != null); // Now, assigning use a page directive, but leaving embedded type the same as default model.getStructuredDocument().setText(this, "<%@ page contentType=\"text/html\" language=\"java\" %>"); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) ((IDOMModel) model).getDocument().getAdapterFor(PageDirectiveAdapter.class); String contentType = pageDirectiveAdapter.getContentType(); String language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertTrue("language should be java", "java".equals(language)); } public void testBasicChangedPD() throws IOException { // First make (empty) structuredDocument IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); assertTrue("model could not be created!", model != null); // Now, assigning use a page directive, but leaving embedded type the same as default model.getStructuredDocument().setText(this, "<%@ page contentType=\"text/html\" language=\"java\" %>"); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) ((IDOMModel) model).getDocument().getAdapterFor(PageDirectiveAdapter.class); String contentType = pageDirectiveAdapter.getContentType(); String language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertTrue("language should be java", "java".equals(language)); // change to javascript model.getStructuredDocument().replaceText(this, 43, 4, "javascript"); contentType = pageDirectiveAdapter.getContentType(); language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertTrue("language should be javascript", "javascript".equals(language)); } public void testBasicChangedPDBack() throws IOException { // First make (empty) structuredDocument IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); assertTrue("model could not be created!", model != null); // Now, assigning use a page directive, but leaving embedded type the same as default model.getStructuredDocument().setText(this, "<%@ page contentType=\"text/html\" language=\"java\" %>"); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) ((IDOMModel) model).getDocument().getAdapterFor(PageDirectiveAdapter.class); String contentType = pageDirectiveAdapter.getContentType(); String language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertTrue("language should be java", "java".equals(language)); // change to javascript model.getStructuredDocument().replaceText(this, 43, 4, "javascript"); contentType = pageDirectiveAdapter.getContentType(); language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertTrue("language should be javascript", "javascript".equals(language)); // change back to java model.getStructuredDocument().replaceText(this, 43, 10, "java"); contentType = pageDirectiveAdapter.getContentType(); language = pageDirectiveAdapter.getLanguage(); assertTrue("contentType should be html", "text/html".equals(contentType)); assertEquals("java", language); } public void testSetEmbeddedType(){ IStructuredModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) ((IDOMModel) model).getDocument().getAdapterFor(PageDirectiveAdapter.class); EmbeddedTypeHandler embeddedXMLHandler = new EmbeddedXML(); pageDirectiveAdapter.setEmbeddedType(embeddedXMLHandler); EmbeddedTypeHandler handler = pageDirectiveAdapter.getEmbeddedType(); assertTrue("incorrect embedded handler", handler == embeddedXMLHandler); } public void testAdapt() { IDOMModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) model.getDocument().getAdapterFor(PageDirectiveAdapter.class); Node ownerNode = model.getDocument(); ModelQueryAdapter embeddedAdapter = (ModelQueryAdapter) pageDirectiveAdapter.adapt((INodeNotifier) ownerNode, ModelQueryAdapter.class); assertNotNull("could not adapt embedded adapter", embeddedAdapter); } public void testAddEmbeddedFactory() { IDOMModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) model.getDocument().getAdapterFor(PageDirectiveAdapter.class); pageDirectiveAdapter.addEmbeddedFactory(new MyEmbeddedFactory()); } public void testSetLanguage() { IDOMModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) model.getDocument().getAdapterFor(PageDirectiveAdapter.class); pageDirectiveAdapter.setLanguage("text/xml"); assertTrue("set language failed", pageDirectiveAdapter.getLanguage().equals("text/xml")); } public void testGetTarget() { IDOMModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) model.getDocument().getAdapterFor(PageDirectiveAdapter.class); INodeNotifier notifier = pageDirectiveAdapter.getTarget(); assertNotNull("target is null", notifier); } public void testRelease() { IDOMModel model = createUnmanagedHTMLModel(); PageDirectiveAdapter pageDirectiveAdapter = (PageDirectiveAdapter) model.getDocument().getAdapterFor(PageDirectiveAdapter.class); pageDirectiveAdapter.release(); // considered "success" if doesn't through exception assertTrue(true); } private IDOMModel createUnmanagedHTMLModel() { // First make (empty) structuredDocument IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); assertTrue("model could not be created!", model != null); // Now, assigning use a page directive, but leaving embedded type the same as default model.getStructuredDocument().setText(this, "<%@ page contentType=\"text/html\" language=\"java\" %>"); return (IDOMModel)model; } }