/******************************************************************************* * 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.core.tests.model; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import junit.framework.TestCase; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; import org.eclipse.jst.jsp.core.tests.JSPCoreTestsPlugin; 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.IDOMModel; public class TestModelWithNoFile extends TestCase { public void testJSPModel() { IDOMModel structuredModel = (IDOMModel) StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); boolean test = structuredModel.getId().equals(IModelManager.UNMANAGED_MODEL); assertTrue(test); structuredModel.releaseFromEdit(); assertTrue(true); } public void testBug116066_1() { IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = null; // Create new project IProject project = createSimpleProject("bug116066_1", null, null); IFile testFile = project.getFile("nonExistant.jsp"); assertFalse("nonExistant.jsp test file already exists (not a clean workspace)?", testFile.exists()); // Get the model and set a reference to that tag library into it try { model = modelManager.getNewModelForEdit(testFile, false); assertNotNull("couldn't get new model for " + testFile.getFullPath(), model); model.getStructuredDocument().set("<%@taglib prefix=\"tagdependent\" uri=\"tagdependent\">\n<tagdependent:code> <<< </tagdependent:code>"); } catch (Exception e) { StringWriter s = new StringWriter(); e.printStackTrace(new PrintWriter(s)); fail(s.toString()); } finally { if (model != null) { model.releaseFromEdit(); } } } public void testBug116066_2() { IModelManager modelManager = StructuredModelManager.getModelManager(); IStructuredModel model = null; // Create new project IProject project = createSimpleProject("bug116066_2", null, null); // Copy a TLD into the project IFile tld = copyBundleEntryIntoWorkspace("/testfiles/116066/tagdep.tld", "/bug116066_2/tagdep.tld"); assertNotNull("TLD entry was not copied properly", tld); assertTrue("TLD IFile does not exist", tld.exists()); IFile testFile = project.getFile("nonExistant.jsp"); assertFalse("nonExistant.jsp test file already exists (not a clean workspace)?", testFile.exists()); // Get the model and set a reference to that tag library into it try { model = modelManager.getNewModelForEdit(testFile, false); assertNotNull("couldn't get new model for " + testFile.getFullPath(), model); model.getStructuredDocument().set("<%@taglib prefix=\"tagdependent\" uri=\"tagdependent\">\n<tagdependent:code> <<< </tagdependent:code>"); } catch (Exception e) { StringWriter s = new StringWriter(); e.printStackTrace(new PrintWriter(s)); fail(s.toString()); } finally { if (model != null) { model.releaseFromEdit(); } } } private IFile copyBundleEntryIntoWorkspace(String entryname, String fullPath) { IFile file = null; URL entry = JSPCoreTestsPlugin.getDefault().getBundle().getEntry(entryname); if (entry != null) { try { byte[] b = new byte[2048]; InputStream input = entry.openStream(); ByteArrayOutputStream output = new ByteArrayOutputStream(); int i = -1; while ((i = input.read(b)) > -1) { output.write(b, 0, i); } file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fullPath)); if (file != null) { file.create(new ByteArrayInputStream(output.toByteArray()), true, new NullProgressMonitor()); } } catch (IOException e) { StringWriter s = new StringWriter(); e.printStackTrace(new PrintWriter(s)); fail(s.toString()); } catch (CoreException e) { StringWriter s = new StringWriter(); e.printStackTrace(new PrintWriter(s)); fail(s.toString()); } } return file; } private IProject createSimpleProject(String name, IPath location, String[] natureIds) { IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(name); if (location != null) { description.setLocation(location); } if (natureIds != null) { description.setNatureIds(natureIds); } IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name); try { project.create(description, new NullProgressMonitor()); assertTrue(project.exists()); project.open(new NullProgressMonitor()); } catch (CoreException e) { StringWriter s = new StringWriter(); e.printStackTrace(new PrintWriter(s)); fail(s.toString()); } return project; } }