blob: cb3613508504a1537fd22b09c39b062b4fcd2763 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.wst.jsdt.ui.tests.format;
import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.TextUtilities;
import org.eclipse.jface.text.formatter.FormattingContext;
import org.eclipse.jface.text.formatter.FormattingContextProperties;
import org.eclipse.jface.text.formatter.IContentFormatterExtension;
import org.eclipse.wst.jsdt.core.JavaScriptCore;
import org.eclipse.wst.jsdt.internal.formatter.comment.SingleCommentLine;
import org.eclipse.wst.jsdt.internal.ui.JavaScriptPlugin;
import org.eclipse.wst.jsdt.ui.text.IJavaScriptPartitions;
import org.eclipse.wst.jsdt.ui.text.JavaScriptSourceViewerConfiguration;
import org.eclipse.wst.jsdt.ui.text.JavaScriptTextTools;
public class FormattingTests extends TestCase {
public static final String DELIMITER = TextUtilities.getDefaultLineDelimiter(new Document());
protected static final String PREFIX = SingleCommentLine.SINGLE_COMMENT_PREFIX;
/** tools used to set up document for formatting */
private static JavaScriptTextTools fJavaScriptTextTools;
/** context used for formatting */
private static FormattingContext fFormattingContext;
/** formatter used for formatting */
private static IContentFormatterExtension fFormatter;
/**
* <p>Default constructor<p>
* <p>Use {@link #suite()}</p>
*
* @see #suite()
*/
public FormattingTests() {
super("Formatting Tests");
}
/**
* <p>Constructor that takes a test name.</p>
* <p>Use {@link #suite()}</p>
*
* @param name The name this test run should have.
*
* @see #suite()
*/
public FormattingTests(String name) {
super(name);
}
/**
* <p>Use this method to add these tests to a larger test suite so set up
* and tear down can be performed</p>
*
* @return a {@link TestSetup} that will run all of the tests in this class
* with set up and tear down.
*/
public static Test suite() {
TestSuite ts = new TestSuite(FormattingTests.class, "Formatting Tests");
return new FormattingTestsSetup(ts);
}
public void testLongMultipleComments() {
String beforeContents =
"//this is a really long comment that will have to be wrapped into multiple lines because it is so very very long" + DELIMITER +
"//this is a really long comment that will have to be wrapped into multiple lines because it is so very very long" + DELIMITER;
String afterContents =
PREFIX + "this is a really long comment that will have to be wrapped into multiple" + DELIMITER +
PREFIX + "lines because it is so very very long" + DELIMITER +
PREFIX + "this is a really long comment that will have to be wrapped into multiple" + DELIMITER +
PREFIX + "lines because it is so very very long" + DELIMITER;
runFormatTest(beforeContents, afterContents);
}
public void testNestedLongMultipleComments() {
String beforeContents =
"dojo.declare(\"myDojo.Test\", [], {" + DELIMITER +
"//this is a really long comment that will have to be wrapped into multiple lines because it is so very very long" + DELIMITER +
"//this is a really long comment that will have to be wrapped into multiple lines because it is so very very long" + DELIMITER +
DELIMITER +
"//this is a shorter comment" + DELIMITER +
"constructor : function() {" + DELIMITER +
"}" + DELIMITER +
"//this is a really long comment that will have to be wrapped into multiple lines because it is so very very long" + DELIMITER +
"});";
String afterContents =
"dojo.declare(\"myDojo.Test\", [], {" + DELIMITER +
"\t" + PREFIX + "this is a really long comment that will have to be wrapped into multiple" + DELIMITER +
"\t" + PREFIX + "lines because it is so very very long" + DELIMITER +
"\t" + PREFIX + "this is a really long comment that will have to be wrapped into multiple" + DELIMITER +
"\t" + PREFIX + "lines because it is so very very long" + DELIMITER +
DELIMITER +
"\t" + PREFIX + "this is a shorter comment" + DELIMITER +
"\t" + "constructor : function() {" + DELIMITER +
"\t" + "}" + DELIMITER +
PREFIX + "this is a really long comment that will have to be wrapped into multiple" + DELIMITER +
PREFIX + "lines because it is so very very long" + DELIMITER +
"});";
runFormatTest(beforeContents, afterContents);
}
/**
* <p>Formats the given <code>beforeContents</code> and compares it to the
* given <code>afterContents</code></p>
*
* @param beforeContents format this contents and compare it to the given <code>afterContents</code>
* @param afterContents compare this contents to the <code>beforeContents</code> after it has been formated
*/
private static void runFormatTest(String beforeContents, String afterContents) {
IDocument toFormat= new Document(beforeContents);
fJavaScriptTextTools.setupJavaDocumentPartitioner(toFormat, IJavaScriptPartitions.JAVA_PARTITIONING);
fFormatter.format(toFormat, fFormattingContext);
assertEquals("The formatted document does not have the expected contents",
afterContents, toFormat.get());
}
/**
* <p>This inner class is used to do set up and tear down before and
* after (respectively) all tests in the inclosing class have run.</p>
*/
private static class FormattingTestsSetup extends TestSetup {
private static final String WTP_AUTOTEST_NONINTERACTIVE = "wtp.autotest.noninteractive";
private static String previousWTPAutoTestNonInteractivePropValue = null;
/**
* Default constructor
*
* @param test do setup for the given test
*/
public FormattingTestsSetup(Test test) {
super(test);
}
/**
* <p>This is run once before all of the tests</p>
*
* @see junit.extensions.TestSetup#setUp()
*/
public void setUp() throws Exception {
//set up formatting tools
fJavaScriptTextTools = JavaScriptPlugin.getDefault().getJavaTextTools();
JavaScriptSourceViewerConfiguration config =
new JavaScriptSourceViewerConfiguration(fJavaScriptTextTools.getColorManager(),
JavaScriptPlugin.getDefault().getCombinedPreferenceStore(), null,
IJavaScriptPartitions.JAVA_PARTITIONING);
fFormatter = (IContentFormatterExtension)config.getContentFormatter(null);
fFormattingContext = new FormattingContext();
fFormattingContext.setProperty(FormattingContextProperties.CONTEXT_PREFERENCES, JavaScriptCore.getOptions());
fFormattingContext.setProperty(FormattingContextProperties.CONTEXT_DOCUMENT, Boolean.valueOf(true));
//set non-interactive
String noninteractive = System.getProperty(WTP_AUTOTEST_NONINTERACTIVE);
if (noninteractive != null) {
previousWTPAutoTestNonInteractivePropValue = noninteractive;
} else {
previousWTPAutoTestNonInteractivePropValue = "false";
}
System.setProperty(WTP_AUTOTEST_NONINTERACTIVE, "true");
}
/**
* <p>This is run once after all of the tests have been run</p>
*
* @see junit.extensions.TestSetup#tearDown()
*/
public void tearDown() throws Exception {
//reset non-interactive
if (previousWTPAutoTestNonInteractivePropValue != null) {
System.setProperty(WTP_AUTOTEST_NONINTERACTIVE, previousWTPAutoTestNonInteractivePropValue);
}
}
}
}