[315234] [formatter] successive line comments are being indented an extra level
diff --git a/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/JSDTUITests.java b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/JSDTUITests.java
index 5ac66d0..8c3d7aa 100644
--- a/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/JSDTUITests.java
+++ b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/JSDTUITests.java
@@ -18,6 +18,7 @@
import junit.framework.TestSuite;
import org.eclipse.wst.jsdt.core.JavaScriptCore;
+import org.eclipse.wst.jsdt.ui.tests.format.FormattingTests;
/**
* @author nitin
@@ -53,6 +54,11 @@
Class test = (Class) iter.next();
all.addTestSuite(test);
}
+
+ // $JUnit-BEGIN$
+ all.addTest(FormattingTests.suite());
+ // $JUnit-END$
+
return all;
}
}
\ No newline at end of file
diff --git a/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/format/FormattingTests.java b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/format/FormattingTests.java
new file mode 100644
index 0000000..cb36135
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.ui.tests/src/org/eclipse/wst/jsdt/ui/tests/format/FormattingTests.java
@@ -0,0 +1,192 @@
+/*******************************************************************************
+ * 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);
+ }
+ }
+ }
+}