blob: f0d1bd018e93ca6aa87ff6c87189882d143a15f6 [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.model;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocumentExtension3;
import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP;
import org.eclipse.jst.jsp.ui.tests.document.UnzippedProjectTester;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceAlreadyExists;
import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredPartitioning;
import org.eclipse.wst.sse.core.internal.text.BasicStructuredDocument;
import org.eclipse.wst.sse.core.internal.util.Utilities;
import org.eclipse.wst.xml.core.internal.text.rules.StructuredTextPartitionerForXML;
public class TestModelsFromFiles extends UnzippedProjectTester {
public void testNonExistentXML() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestCreate("testfiles/xml/testnonexistent.xml", BasicStructuredDocument.class, StructuredTextPartitionerForXML.class);
}
public void testNonExistentXMLDocument() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNonExistentDocument("testfiles/xml/testnonexistent.xml", BasicStructuredDocument.class, StructuredTextPartitionerForXML.class);
}
public void testNonExistentJSP() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestCreate("testfiles/jsp/testnonexistent.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
public void testNonExistentJSPDocument() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNonExistentDocument("testfiles/jsp/testnonexistent.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
public void testSimpleCase() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmpty("testfiles/xml/testNormalCase.xml", BasicStructuredDocument.class, StructuredTextPartitionerForXML.class);
}
public void testSimpleDocumentCaseXML() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmptyDocument("testfiles/xml/testNormalCase.xml", BasicStructuredDocument.class, StructuredTextPartitionerForXML.class);
}
public void testSimpleDocumentCaseJSP() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmptyDocument("testfiles/regressionTestFiles/defect223365/SelColBeanRow12ResultsForm.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
public void testComplexCase() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmpty("testfiles/regressionTestFiles/defect223365/SelColBeanRow12ResultsForm.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
public void testReload() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestReload("testfiles/regressionTestFiles/defect223365/SelColBeanRow12ResultsForm.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
/*
* TODO: these test files are missing, for some reason when running on build machine ... need to re-construct
public void testNearEmptyJSP() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmpty("testfiles/jsp/nearEmpty.jsp", BasicStructuredDocument.class, StructuredTextPartitionerForJSP.class);
}
public void testNearEmptyXML() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmpty("testfiles/xml/nearEmpty.xml", BasicStructuredDocument.class, StructuredTextPartitionerForXML.class);
}
public void testNearEmptyHTML() throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
doTestNotEmpty("testfiles/html/nearEmpty.html", BasicStructuredDocument.class, StructuredTextPartitionerForHTML.class);
}
*/
private void doTestNotEmpty(String filePath, Class expectedDocumentClass, Class expectedPartioner) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
String contents = doTestCreate(filePath, expectedDocumentClass, expectedPartioner);
assertNotNull("contents were null", contents);
assertTrue("contents were empty", contents.length() > 0);
}
/**
* @param string
* @param class1
* @param class2
* @throws CoreException
* @throws IOException
* @throws ResourceInUse
* @throws ResourceAlreadyExists
*/
private void doTestNotEmptyDocument(String filePath, Class expectedDocumentClass, Class expectedPartioner) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
String contents = null;
IModelManager modelManager = StructuredModelManager.getModelManager();
IFile file = (IFile) fTestProject.findMember(filePath);
if (file == null) {
file = fTestProject.getFile(filePath);
}
IStructuredDocument document = modelManager.createStructuredDocumentFor(file);
assertNotNull(document);
assertTrue("wrong class of document", expectedDocumentClass.isInstance(document));
IDocumentPartitioner setupPartitioner = null;
if (Utilities.contains(expectedDocumentClass.getInterfaces(), IDocumentExtension3.class)) {
setupPartitioner = ((IDocumentExtension3) document).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING);
}
else {
setupPartitioner = document.getDocumentPartitioner();
}
assertTrue("wrong partitioner in document.", expectedPartioner.isInstance(setupPartitioner));
contents = document.get();
assertNotNull("contents were null", contents);
assertTrue("contents were empty", contents.length() > 0);
}
private void doTestNonExistentDocument(String filePath, Class expectedDocumentClass, Class expectedPartioner) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
String contents = null;
boolean expectedExceptionCaught = false;
IModelManager modelManager = StructuredModelManager.getModelManager();
IFile file = (IFile) fTestProject.findMember(filePath);
if (file == null) {
file = fTestProject.getFile(filePath);
}
IStructuredDocument document = null;
try {
document = modelManager.createStructuredDocumentFor(file);
} catch (FileNotFoundException e) {
expectedExceptionCaught = true;
}
if (expectedExceptionCaught) {
document = modelManager.createNewStructuredDocumentFor(file);
assertNotNull(document);
assertTrue("wrong class of document", expectedDocumentClass.isInstance(document));
IDocumentPartitioner setupPartitioner = null;
if (Utilities.contains(expectedDocumentClass.getInterfaces(), IDocumentExtension3.class)) {
setupPartitioner = ((IDocumentExtension3) document).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING);
}
else {
setupPartitioner = document.getDocumentPartitioner();
}
assertTrue("wrong partitioner in document.", expectedPartioner.isInstance(setupPartitioner));
contents = document.get();
assertNotNull("contents were null", contents);
assertTrue("contents were *not* empty as expected", contents.length() == 0);
} else {
assertTrue("FileNotFound exception was *not* thrown as expected", false);
}
}
/**
* @param string
* @param class1
* @param class2
* @throws CoreException
* @throws IOException
* @throws ResourceInUse
* @throws ResourceAlreadyExists
*/
private void doTestReload(String filePath, Class expectedDocumentClass, Class expectedPartioner) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
IModelManager modelManager = StructuredModelManager.getModelManager();
IFile file = (IFile) fTestProject.findMember(filePath);
if (file == null) {
file = fTestProject.getFile(filePath);
}
IStructuredModel model = modelManager.getNewModelForEdit(file, true);
try {
assertNotNull(model);
IStructuredDocument document = model.getStructuredDocument();
assertNotNull(document);
assertTrue("wrong class of document", expectedDocumentClass.isInstance(document));
IDocumentPartitioner setupPartitioner = null;
if (Utilities.contains(expectedDocumentClass.getInterfaces(), IDocumentExtension3.class)) {
setupPartitioner = ((IDocumentExtension3) document).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING);
}
else {
setupPartitioner = document.getDocumentPartitioner();
}
assertTrue("wrong partitioner in document.", expectedPartioner.isInstance(setupPartitioner));
InputStream inStream = null;
try {
inStream = file.getContents();
model.reload(inStream);
assertNotNull(model);
IStructuredDocument documentReloaded = model.getStructuredDocument();
// note: NOT same instance of document
// FIXME: this test has to be changed back, once the reload
// API is
// fixed to work with different document.
// assertFalse(document == documentReloaded);
assertTrue(document == documentReloaded);
} finally {
if (inStream != null) {
inStream.close();
}
}
} finally {
if (model != null)
model.releaseFromEdit();
}
}
/**
* @param string
* @param class1
* @param class2
* @throws CoreException
* @throws IOException
* @throws ResourceInUse
* @throws ResourceAlreadyExists
*/
private String doTestCreate(String filePath, Class expectedDocumentClass, Class expectedPartioner) throws ResourceAlreadyExists, ResourceInUse, IOException, CoreException {
String contents = null;
IModelManager modelManager = StructuredModelManager.getModelManager();
IFile file = (IFile) fTestProject.findMember(filePath);
// file will be null if the resource does not exist
if (file == null) {
file = fTestProject.getFile(filePath);
}
IStructuredModel model = modelManager.getNewModelForEdit(file, true);
try {
assertNotNull(model);
IStructuredDocument document = model.getStructuredDocument();
assertNotNull(document);
contents = document.get();
assertTrue("wrong class of document", expectedDocumentClass.isInstance(document));
IDocumentPartitioner setupPartitioner = null;
if (Utilities.contains(expectedDocumentClass.getInterfaces(), IDocumentExtension3.class)) {
setupPartitioner = ((IDocumentExtension3) document).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING);
}
else {
setupPartitioner = document.getDocumentPartitioner();
}
assertTrue("wrong partitioner in document.", expectedPartioner.isInstance(setupPartitioner));
} finally {
if (model != null)
model.releaseFromEdit();
}
return contents;
}
}