blob: 7889e5b86ffabe718e78a92b058527cc8740dbda [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 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;
import java.io.IOException;
import junit.framework.Test;
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.html.core.internal.provisional.contenttype.ContentTypeIdForHTML;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.ltk.modelhandler.EmbeddedTypeHandler;
import org.eclipse.wst.sse.core.internal.modelhandler.ModelHandlerUtility;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
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.provisional.contenttype.ContentTypeIdForXML;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
import org.w3c.dom.Document;
/**
* @author davidw
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates. To enable and disable the creation of
* type comments go to Window>Preferences>Java>Code Generation.
*/
public class TestModelEmbeddedContentType extends TestCase {
/**
* Constructor for TestModelClone.
*/
public TestModelEmbeddedContentType(String name) {
super(name);
}
public static void main(String[] args) {
}
public static Test getTest() {
return new TestModelEmbeddedContentType("testStructuredModelEmbeddedJSPChange");
}
protected void checkEmbeddedType(IStructuredModel clonedModel, Object expectedType) {
Document doc = ((IDOMModel) clonedModel).getDocument();
PageDirectiveAdapter embeddedTypeAdapter = (PageDirectiveAdapter) ((INodeNotifier) doc).getAdapterFor(PageDirectiveAdapter.class);
assertNotNull("cloned model did not have embedded adapter", embeddedTypeAdapter);
EmbeddedTypeHandler embeddedHandler = embeddedTypeAdapter.getEmbeddedType();
assertNotNull("cloned model did not have embedded handler", embeddedHandler);
assertTrue("cloned model embeddedHandler is wrong type", embeddedHandler.equals(expectedType));
}
public void testStructuredModelEmbeddedXML() throws IOException {
// First make (empty) structuredDocument
IModelManager modelManager = StructuredModelManager.getModelManager();
IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForXML.ContentTypeID_XML);
assertTrue("model could not be created!", model != null);
// XML should NOT have an embedded type
Document doc = ((IDOMModel) model).getDocument();
EmbeddedTypeHandler embeddedHandler = (EmbeddedTypeHandler) ((INodeNotifier) doc).getAdapterFor(EmbeddedTypeHandler.class);
assertTrue("embededHanlder should be null for XML", embeddedHandler == null);
}
public void testStructuredModelEmbeddedHTML() throws IOException {
// First make (empty) structuredDocument
IModelManager modelManager = StructuredModelManager.getModelManager();
IStructuredModel model = modelManager.createUnManagedStructuredModelFor(ContentTypeIdForHTML.ContentTypeID_HTML);
assertTrue("model could not be created!", model != null);
// should NOT have an embedded type
Document doc = ((IDOMModel) model).getDocument();
EmbeddedTypeHandler embeddedHandler = (EmbeddedTypeHandler) ((INodeNotifier) doc).getAdapterFor(EmbeddedTypeHandler.class);
assertTrue("embededHanlder should be null for HTML", embeddedHandler == null);
}
protected IStructuredModel doStructuredModelEmbeddedJSP() 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);
// should have an embedded type
Document doc = ((IDOMModel) model).getDocument();
PageDirectiveAdapter embeddedHandler = (PageDirectiveAdapter) ((INodeNotifier) doc).getAdapterFor(PageDirectiveAdapter.class);
assertTrue("embededHanlder should NOT be null for JSP", embeddedHandler != null);
// embedded type should be HTML since no content
checkEmbeddedType(model, ModelHandlerUtility.getDefaultEmbeddedType());
String testContent = "<%@ page contentType=\"text/html\" %>";
model.getStructuredDocument().replaceText(this, 0, 0, testContent);
assertTrue("reinit should NOT be needed in this case", !model.isReinitializationNeeded());
// embedded type should STILL be HTML since no contentType was
// text/html
checkEmbeddedType(model, ModelHandlerUtility.getDefaultEmbeddedType());
return model;
//
}
public void testStructuredModelEmbeddedJSP() throws IOException {
doStructuredModelEmbeddedJSP();
}
public void testStructuredModelEmbeddedJSPChange() throws IOException {
// start with the full test case
IStructuredModel model = doStructuredModelEmbeddedJSP();
// change "html" to "xml"
model.getStructuredDocument().replaceText(this, 27, 4, "xml");
// with reinit in XML model ... its already been re-initialized
// assertTrue("reinit SHOULD be needed in this case",
// model.isReiniitializationNeeded());
if (model.isReinitializationNeeded()) {
model.reinit();
}
// embedded type should now be XML
checkEmbeddedType(model, ModelHandlerUtility.getEmbeddedContentTypeFor("text/xml"));
}
}