scripted test class extracted to dltk.formatter.tests
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.dltk.ruby.formatter.tests/META-INF/MANIFEST.MF
index 6d208fc..f5caf96 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/META-INF/MANIFEST.MF
@@ -13,8 +13,10 @@
  org.eclipse.dltk.ruby.formatter,
  org.eclipse.core.resources,
  org.eclipse.ui,
- org.eclipse.dltk.formatter
+ org.eclipse.dltk.formatter,
+ org.eclipse.dltk.formatter.tests
 Eclipse-LazyStart: true
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Export-Package: org.eclipse.dltk.ruby.formatter.tests
 Bundle-Activator: org.eclipse.dltk.ruby.formatter.tests.RubyFormatterTestsPlugin
+Bundle-ActivationPolicy: lazy
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs1.rb b/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs1.rb
index d2964d0..1ca88ae 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs1.rb
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs1.rb
@@ -1,3 +1,5 @@
+==> line.first.before = 1
+==> line.method.before = 1 
 ==== method rubydocs
 #Hello class
 class Hello
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs2.rb b/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs2.rb
index 1c0441d..2931d5c 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs2.rb
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/scripts/rubydocs2.rb
@@ -1,3 +1,5 @@
+==> line.first.before = 1
+==> line.method.before = 2 
 ==== method rubydocs
 #Hello class
 class Hello
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractFormatterTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractFormatterTest.java
deleted file mode 100644
index f480248..0000000
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractFormatterTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
- *
- * 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:
- *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
- *******************************************************************************/
-package org.eclipse.dltk.ruby.formatter.tests;
-
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.io.Reader;
-import java.util.Collection;
-
-import junit.framework.Assert;
-import junit.framework.ComparisonFailure;
-import junit.framework.TestCase;
-
-import org.eclipse.dltk.compiler.util.Util;
-import org.eclipse.dltk.internal.corext.util.Strings;
-import org.eclipse.dltk.ruby.formatter.RubyFormatter;
-import org.eclipse.dltk.ui.formatter.FormatterException;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.Document;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.text.edits.TextEdit;
-
-public abstract class AbstractFormatterTest extends TestCase {
-
-	/**
-	 * @param input
-	 * @return
-	 * @throws FormatterException
-	 */
-	protected String format(String input) throws FormatterException {
-		RubyFormatter f = createFormatter();
-		final TextEdit edit = f.format(input, 0, input.length(), 0);
-		Assert.assertNotNull(edit);
-		final IDocument document = new Document(input);
-		try {
-			edit.apply(document);
-		} catch (BadLocationException e) {
-			throw new RuntimeException(e);
-		}
-		return document.get();
-	}
-
-	protected RubyFormatter createFormatter() {
-		return new TestRubyFormatter();
-	}
-
-	protected static String joinLines(Collection lines) {
-		return joinLines((String[]) lines.toArray(new String[lines.size()]));
-	}
-
-	protected static String joinLines(String[] lines) {
-		return Strings.concatenate(lines, Util.LINE_SEPARATOR)
-				+ Util.LINE_SEPARATOR;
-	}
-
-	/**
-	 * @param lines
-	 * @param beginIndex
-	 * @param endIndex
-	 * @return
-	 */
-	protected static String joinLines(String[] lines, int beginIndex,
-			int endIndex) {
-		final StringBuffer sb = new StringBuffer();
-		for (int i = beginIndex; i < endIndex; ++i) {
-			sb.append(lines[i]);
-			sb.append(Util.LINE_SEPARATOR);
-		}
-		return sb.toString();
-	}
-
-	protected boolean compareIgnoreBlanks(String entryName, Reader inputReader,
-			Reader outputReader) throws IOException {
-		LineNumberReader input = new LineNumberReader(inputReader);
-		LineNumberReader output = new LineNumberReader(outputReader);
-		for (;;) {
-			String inputLine;
-			do {
-				inputLine = input.readLine();
-				if (inputLine != null) {
-					inputLine = inputLine.trim();
-				}
-			} while (inputLine != null && inputLine.length() == 0);
-			String outputLine;
-			do {
-				outputLine = output.readLine();
-				if (outputLine != null) {
-					outputLine = outputLine.trim();
-				}
-			} while (outputLine != null && outputLine.length() == 0);
-			if (inputLine == null) {
-				if (outputLine == null) {
-					return true;
-				} else {
-					fail(entryName + ": Extra output " + output.getLineNumber()
-							+ ":" + outputLine);
-				}
-			} else if (outputLine == null) {
-				fail(entryName + ": Missing output " + input.getLineNumber()
-						+ ":" + inputLine);
-			} else if (!inputLine.equals(outputLine)) {
-				throw new ComparisonFailure(entryName + ": Comparison failed",
-						input.getLineNumber() + ":" + inputLine, output
-								.getLineNumber()
-								+ ":" + outputLine);
-			}
-		}
-	}
-
-}
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractRubyFormatterTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractRubyFormatterTest.java
new file mode 100644
index 0000000..dbe0857
--- /dev/null
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/AbstractRubyFormatterTest.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2008 xored software, Inc.
+ *
+ * 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:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.ruby.formatter.tests;
+
+import java.util.Map;
+
+import org.eclipse.dltk.compiler.util.Util;
+import org.eclipse.dltk.formatter.tests.AbstractFormatterTest;
+import org.eclipse.dltk.ui.formatter.IScriptFormatter;
+
+public abstract class AbstractRubyFormatterTest extends AbstractFormatterTest {
+
+	protected IScriptFormatter createFormatter(Map preferences) {
+		return preferences != null ? new TestRubyFormatter(Util.LINE_SEPARATOR,
+				preferences) : new TestRubyFormatter();
+	}
+}
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BeginTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BeginTest.java
index e5a2992..a276e7a 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BeginTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BeginTest.java
@@ -11,11 +11,14 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class BeginTest extends ScriptedTest {
 	public static TestSuite suite() {
-		return new BeginTest().createScriptedSuite("scripts/begin.rb");
+		return new BeginTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/begin.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BlocksTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BlocksTest.java
index 8a21bb4..bc0e53e 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BlocksTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/BlocksTest.java
@@ -11,12 +11,15 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class BlocksTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new BlocksTest().createScriptedSuite("scripts/blocks.rb");
+		return new BlocksTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/blocks.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ClassesAndMethodsTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ClassesAndMethodsTest.java
index 94b7690..011e297 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ClassesAndMethodsTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ClassesAndMethodsTest.java
@@ -11,13 +11,16 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class ClassesAndMethodsTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new ClassesAndMethodsTest()
-				.createScriptedSuite("scripts/classes-n-methods.rb");
+		return new ClassesAndMethodsTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT,
+				"scripts/classes-n-methods.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentWrapTests.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentWrapTests.java
index 0d9c312..ad4ecdc 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentWrapTests.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentWrapTests.java
@@ -13,12 +13,10 @@
 
 import java.util.Map;
 
-import org.eclipse.dltk.compiler.util.Util;
-import org.eclipse.dltk.ruby.formatter.RubyFormatter;
 import org.eclipse.dltk.ruby.formatter.RubyFormatterConstants;
 import org.eclipse.dltk.ui.formatter.FormatterException;
 
-public class CommentWrapTests extends AbstractFormatterTest {
+public class CommentWrapTests extends AbstractRubyFormatterTest {
 
 	public void testWrapping1() throws FormatterException {
 		String input = joinLines(new String[] { "# 01234567890 01234567890",
@@ -37,12 +35,12 @@
 		assertEquals(output, format(input));
 	}
 
-	protected RubyFormatter createFormatter() {
+	protected Map getDefaultPreferences() {
 		Map preferences = TestRubyFormatter.createTestingPreferences();
 		preferences.put(RubyFormatterConstants.WRAP_COMMENTS, Boolean.TRUE
 				.toString());
 		preferences.put(RubyFormatterConstants.WRAP_COMMENTS_LENGTH, "20");
-		return new TestRubyFormatter(Util.LINE_SEPARATOR, preferences);
+		return preferences;
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentsTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentsTest.java
index 0dcef86..5d2096b 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentsTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/CommentsTest.java
@@ -1,11 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class CommentsTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new CommentsTest().createScriptedSuite("scripts/comments.rb");
+		return new CommentsTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/comments.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/DoTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/DoTest.java
index e625d60..d1bc979 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/DoTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/DoTest.java
@@ -1,11 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class DoTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new DoTest().createScriptedSuite("scripts/do.rb");
+		return new DoTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/do.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/FormatRubyLibTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/FormatRubyLibTest.java
index c711a48..795b677 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/FormatRubyLibTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/FormatRubyLibTest.java
@@ -31,7 +31,7 @@
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.text.edits.TextEdit;
 
-public class FormatRubyLibTest extends AbstractFormatterTest {
+public class FormatRubyLibTest extends AbstractRubyFormatterTest {
 
 	private static final String FILENAME = "/home/dltk/apps/ruby-lib.zip";
 
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/HereDocumentTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/HereDocumentTest.java
index ba7011e..cc02fb2 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/HereDocumentTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/HereDocumentTest.java
@@ -1,12 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class HereDocumentTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new HereDocumentTest()
-				.createScriptedSuite("scripts/heredocument.rb");
+		return new HereDocumentTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/heredocument.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/IfTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/IfTest.java
index cc8d329..7ca05fb 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/IfTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/IfTest.java
@@ -11,12 +11,15 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class IfTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new IfTest().createScriptedSuite("scripts/if.rb");
+		return new IfTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/if.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ModulesTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ModulesTest.java
index 2a560ca..979326a 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ModulesTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ModulesTest.java
@@ -11,12 +11,15 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class ModulesTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new ModulesTest().createScriptedSuite("scripts/modules.rb");
+		return new ModulesTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/modules.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ParserTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ParserTest.java
index 2b229d0..0412937 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ParserTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ParserTest.java
@@ -34,7 +34,7 @@
 import org.jruby.lexer.yacc.ISourcePosition;
 import org.jruby.parser.RubyParserResult;
 
-public class ParserTest extends AbstractFormatterTest {
+public class ParserTest extends AbstractRubyFormatterTest {
 
 	public void testEndKeyword() throws FormatterException {
 		final String input = "class Test" + Util.LINE_SEPARATOR + "end"
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RDocTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RDocTest.java
index baee246..1f7153e 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RDocTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RDocTest.java
@@ -1,10 +1,13 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class RDocTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new RDocTest().createScriptedSuite("scripts/rdoc.rb");
+		return new RDocTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/rdoc.rb");
 	}
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RegexpTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RegexpTest.java
index 50e7900..e0ec006 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RegexpTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RegexpTest.java
@@ -1,11 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class RegexpTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new RegexpTest().createScriptedSuite("scripts/regexp.rb");
+		return new RegexpTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/regexp.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc1Test.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc1Test.java
index ae26b60..35cac27 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc1Test.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc1Test.java
@@ -11,25 +11,15 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
-import java.util.Map;
-
 import junit.framework.TestSuite;
 
-import org.eclipse.dltk.compiler.util.Util;
-import org.eclipse.dltk.ruby.formatter.RubyFormatter;
-import org.eclipse.dltk.ruby.formatter.RubyFormatterConstants;
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
 
 public class RubyDoc1Test extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new RubyDoc1Test().createScriptedSuite("scripts/rubydocs1.rb");
-	}
-
-	protected RubyFormatter createFormatter() {
-		Map preferences = TestRubyFormatter.createTestingPreferences();
-		preferences.put(RubyFormatterConstants.LINES_BEFORE_FIRST, "1");
-		preferences.put(RubyFormatterConstants.LINES_BEFORE_METHOD, "1");
-		return new TestRubyFormatter(Util.LINE_SEPARATOR, preferences);
+		return new RubyDoc1Test().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/rubydocs1.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc2Test.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc2Test.java
index f8fd07a..afab553 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc2Test.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyDoc2Test.java
@@ -11,25 +11,15 @@
  *******************************************************************************/
 package org.eclipse.dltk.ruby.formatter.tests;
 
-import java.util.Map;
-
 import junit.framework.TestSuite;
 
-import org.eclipse.dltk.compiler.util.Util;
-import org.eclipse.dltk.ruby.formatter.RubyFormatter;
-import org.eclipse.dltk.ruby.formatter.RubyFormatterConstants;
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
 
 public class RubyDoc2Test extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new RubyDoc2Test().createScriptedSuite("scripts/rubydocs2.rb");
-	}
-
-	protected RubyFormatter createFormatter() {
-		Map preferences = TestRubyFormatter.createTestingPreferences();
-		preferences.put(RubyFormatterConstants.LINES_BEFORE_FIRST, "1");
-		preferences.put(RubyFormatterConstants.LINES_BEFORE_METHOD, "2");
-		return new TestRubyFormatter(Util.LINE_SEPARATOR, preferences);
+		return new RubyDoc2Test().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/rubydocs2.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyFormatterTestsPlugin.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyFormatterTestsPlugin.java
index 7ddc8fa..bcc2cc2 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyFormatterTestsPlugin.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/RubyFormatterTestsPlugin.java
@@ -1,8 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import java.util.Map;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.dltk.compiler.util.Util;
+import org.eclipse.dltk.formatter.tests.ScriptedTest.IScriptedTestContext;
+import org.eclipse.dltk.ui.formatter.IScriptFormatter;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -61,4 +67,25 @@
 		getDefault().getLog().log(status);
 	}
 
+	public static final IScriptedTestContext CONTEXT = new IScriptedTestContext() {
+
+		public Bundle getResourceBundle() {
+			return getDefault().getBundle();
+		}
+
+		public String getCharset() {
+			return AllTests.CHARSET;
+		}
+
+		public IScriptFormatter createFormatter(Map preferences) {
+			if (preferences != null) {
+				final Map prefs = TestRubyFormatter.createTestingPreferences();
+				prefs.putAll(preferences);
+				return new TestRubyFormatter(Util.LINE_SEPARATOR, prefs);
+			} else {
+				return new TestRubyFormatter();
+			}
+		}
+	};
+
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ScriptedTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ScriptedTest.java
deleted file mode 100644
index 72f8f9d..0000000
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/ScriptedTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008 xored software, Inc.
- *
- * 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:
- *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
- *******************************************************************************/
-package org.eclipse.dltk.ruby.formatter.tests;
-
-import java.io.IOException;
-import java.net.URL;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.eclipse.dltk.compiler.util.Util;
-import org.eclipse.dltk.utils.TextUtils;
-import org.osgi.framework.Bundle;
-
-public class ScriptedTest extends AbstractFormatterTest {
-
-	private String input;
-	private String expected;
-
-	protected void runTest() throws Throwable {
-		final String output = format(input);
-		assertEquals(expected, output);
-	}
-
-	protected static Bundle getResourceBundle() {
-		return RubyFormatterTestsPlugin.getDefault().getBundle();
-	}
-
-	protected static char[] readResource(String resourceName)
-			throws IOException {
-		final URL resource = getResourceBundle().getResource(resourceName);
-		assertNotNull(resourceName + " is not found", resource); //$NON-NLS-1$
-		return Util.getInputStreamAsCharArray(resource.openStream(), -1,
-				AllTests.CHARSET);
-	}
-
-	private static final String TEST_MARKER = "====";
-	private static final String RESPONSE_MARKER = "==";
-
-	public TestSuite createScriptedSuite(String resourceName) {
-		return createScriptedSuite(getClass().getName(), resourceName, 0);
-	}
-
-	/**
-	 * @param resourceName
-	 * @return
-	 */
-	public TestSuite createScriptedSuite(String suiteName, String resourceName,
-			int beginTestIndex) {
-		final TestSuite suite = new TestSuite(suiteName);
-		try {
-			final String content = new String(readResource(resourceName));
-			final String[] lines = TextUtils.splitLines(content);
-			String testName = "START";
-			int testIndex = 0;
-			int testBegin = 0;
-			int responseBegin = -1;
-			int i = 0;
-			while (i < lines.length) {
-				final String line = lines[i++];
-				if (line.startsWith(TEST_MARKER)) {
-					final int testEnd = i - 1;
-					if (testEnd > testBegin) {
-						if (responseBegin < 0) {
-							throw new IllegalArgumentException(
-									"No response marker - next test started on line "
-											+ testEnd);
-						}
-						if (testIndex >= beginTestIndex) {
-							suite.addTest(createTest(testName, lines,
-									testBegin, responseBegin, testEnd));
-						}
-						++testIndex;
-					}
-					testBegin = i;
-					responseBegin = -1;
-					testName = line.substring(TEST_MARKER.length()).trim();
-				} else if (line.startsWith(RESPONSE_MARKER)) {
-					if (responseBegin >= 0) {
-						throw new IllegalArgumentException(
-								"Multiple response markers: line " + (i - 1)
-										+ ", previous on line " + responseBegin);
-					}
-					responseBegin = i;
-				}
-			}
-			if (lines.length > testBegin) {
-				if (responseBegin < 0) {
-					throw new IllegalArgumentException(
-							"No response marker in last test");
-				}
-				if (testIndex >= beginTestIndex) {
-					suite.addTest(createTest(testName, lines, testBegin,
-							responseBegin, lines.length));
-				}
-			}
-		} catch (final Throwable e) {
-			suite.addTest(new TestCase(e.getClass().getName()) { //$NON-NLS-1$
-						protected void runTest() throws Throwable {
-							throw e;
-						}
-					});
-		}
-		return suite;
-	}
-
-	private ScriptedTest createTest(String testName, String[] lines,
-			int testBegin, int responseBegin, final int testEnd)
-			throws Exception {
-		final String input = joinLines(lines, testBegin, responseBegin - 1);
-		final String expected = joinLines(lines, responseBegin, testEnd);
-		ScriptedTest test = (ScriptedTest) getClass().newInstance();
-		test.setName(testName);
-		test.input = input;
-		test.expected = expected;
-		return test;
-	}
-
-}
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/SimpleTests.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/SimpleTests.java
index 633c9d6..4dcbe70 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/SimpleTests.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/SimpleTests.java
@@ -13,7 +13,7 @@
 
 import org.eclipse.dltk.ui.formatter.FormatterException;
 
-public class SimpleTests extends AbstractFormatterTest {
+public class SimpleTests extends AbstractRubyFormatterTest {
 
 	public void test1() throws FormatterException {
 		String input = joinLines(new String[] { "class Hello",
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/StringsTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/StringsTest.java
index f661989..979a35b 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/StringsTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/StringsTest.java
@@ -1,11 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class StringsTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new StringsTest().createScriptedSuite("scripts/strings.rb");
+		return new StringsTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/strings.rb");
 	}
 
 }
diff --git a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/UnaryPlusTest.java b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/UnaryPlusTest.java
index 24fcbf2..6495a3a 100644
--- a/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/UnaryPlusTest.java
+++ b/tests/org.eclipse.dltk.ruby.formatter.tests/src/org/eclipse/dltk/ruby/formatter/tests/UnaryPlusTest.java
@@ -1,11 +1,14 @@
 package org.eclipse.dltk.ruby.formatter.tests;
 
+import org.eclipse.dltk.formatter.tests.ScriptedTest;
+
 import junit.framework.TestSuite;
 
 public class UnaryPlusTest extends ScriptedTest {
 
 	public static TestSuite suite() {
-		return new UnaryPlusTest().createScriptedSuite("scripts/unaryplus.rb");
+		return new UnaryPlusTest().createScriptedSuite(
+				RubyFormatterTestsPlugin.CONTEXT, "scripts/unaryplus.rb");
 	}
 
 }