blob: a872a06306c540db8d2b87b0ad1a790c20552a7f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 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.contentassist;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import junit.framework.TestCase;
import org.eclipse.jst.jsp.core.internal.java.JSPTranslationUtil;
import org.eclipse.jst.jsp.core.internal.java.JSPTranslator;
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.sse.core.utils.StringUtils;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
/**
* This class tests the sed JSPJavaTranslator class
*
* @author pavery
*/
public class JSPJavaTranslatorTest extends TestCase {
public JSPJavaTranslatorTest(String name) {
super(name);
}
public void testAllFiles() throws UnsupportedEncodingException, IOException {
// this test is for PMR: 91930 CMVC:218469
testJSPInJavascript("testfiles/jspInJavascript.jsp");
}
void testJSPInJavascript(String filename) throws UnsupportedEncodingException, IOException {
IStructuredModel sm = getStructuredModelForRead(filename);
if (sm != null) {
IDOMNode xmlNode = (IDOMNode) sm.getIndexedRegion(0);
if (xmlNode != null) {
JSPTranslator jspt = new JSPTranslator();
jspt.reset(xmlNode, null);
// int sourceTextPos = text.indexOf("<%= testJspString") + 17;
// jspt.setSourceCursor(sourceTextPos); // right after the
// text
jspt.translate();
String translation = jspt.getTranslation().toString();
// offsets are found using JSPTranslation now
// int translatedCursorPosition = jspt.getCursorPosition();
// assertEquals("incorrect cursor position >" +
// translatedCursorPosition, 519, translatedCursorPosition);
// assertEquals("translation was incorrect", "testJspString",
// translation.substring(519, 532));
int cursorStart = translation.indexOf("out.print( testJspString );" ) + 10;
assertEquals("incorrect cursor position >" + cursorStart, 914, cursorStart);
}
sm.releaseFromRead();
}
}
public void testMultipleJSPSectionsInJavascript() throws Exception {
String filename = "testfiles/jspInJavascript2.jsp";
IStructuredModel sm = getStructuredModelForRead(filename);
assertNotNull("couldn't load JSP for test", sm);
JSPTranslationUtil translationUtil = new JSPTranslationUtil(sm.getStructuredDocument());
String javaText = StringUtils.replace(translationUtil.getTranslation().getJavaText(), "\r\n", "\n");
javaText = StringUtils.replace(javaText, "\r", "\n");
sm.releaseFromRead();
String translatedText = loadContents("testfiles/jspInJavascript2.javasource");
assertEquals("translated contents are not as expected", translatedText, javaText);
}
/**
* @return
*/
private String loadContents(String filename) throws IOException {
Reader reader = new InputStreamReader(getClass().getResourceAsStream(filename));
char[] readBuffer = new char[2048];
int n = reader.read(readBuffer);
StringBuffer s = new StringBuffer();
while (n > 0) {
s.append(readBuffer, 0, n);
n = reader.read(readBuffer);
}
String source = StringUtils.replace(s.toString(), "\r\n", "\n");
source = StringUtils.replace(source, "\r", "\n");
return source;
}
/**
* IMPORTANT whoever calls this must releaseFromRead after they are done
* using it.
*
* @param filename
* @return
* @throws IOException
* @throws UnsupportedEncodingException
*/
protected IStructuredModel getStructuredModelForRead(String filename) throws UnsupportedEncodingException, IOException {
// create model
IModelManager modelManager = StructuredModelManager.getModelManager();
InputStream inStream = getClass().getResourceAsStream(filename);
IStructuredModel sModel = modelManager.getModelForRead(filename, inStream, null);
return sModel;
}
}