diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
index 29c0bc5..9d07dcc 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllTests.java
@@ -101,11 +101,11 @@
 	addTestSuite(Test_org_eclipse_swt_widgets_Group.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_ToolBar.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_Table.class);
-	addTest(Test_org_eclipse_swt_widgets_Canvas.suite());
+	addTestSuite(Test_org_eclipse_swt_widgets_Canvas.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_Scale.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_Slider.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_ProgressBar.class);
-	addTest(Test_org_eclipse_swt_widgets_Composite.suite());
+	addTestSuite(Test_org_eclipse_swt_widgets_Composite.class);
 	addTestSuite(Test_org_eclipse_swt_widgets_Link.class);
 	addTest(Test_org_eclipse_swt_widgets_DateTime.suite());
 	//addTestSuite(Test_org_eclipse_swt_widgets_CoolBar.class);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
index f984566..b2bec65 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/AllWidgetTests.java
@@ -52,11 +52,11 @@
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_Group.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_ToolBar.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_Table.class);
-	suite.addTest(Test_org_eclipse_swt_widgets_Canvas.suite());
+	suite.addTestSuite(Test_org_eclipse_swt_widgets_Canvas.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_Scale.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_Slider.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_ProgressBar.class);
-	suite.addTest(Test_org_eclipse_swt_widgets_Composite.suite());
+	suite.addTestSuite(Test_org_eclipse_swt_widgets_Composite.class);
 	suite.addTestSuite(Test_org_eclipse_swt_widgets_Link.class);
 	suite.addTest(Test_org_eclipse_swt_widgets_DateTime.suite());
 	//suite.addTest(Test_org_eclipse_swt_widgets_CoolBar.suite());
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
index b896c71..13479cf 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Canvas.java
@@ -11,12 +11,12 @@
 package org.eclipse.swt.tests.junit;
 
 
-import junit.framework.*;
-import junit.textui.*;
-
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Caret;
+import org.eclipse.swt.widgets.Widget;
 
 /**
  * Automated Test Suite for class org.eclipse.swt.widgets.Canvas
@@ -31,10 +31,6 @@
 	super(name);
 }
 
-public static void main(String[] args) {
-	TestRunner.run(suite());
-}
-
 @Override
 protected void setUp() {
 	super.setUp();
@@ -102,37 +98,6 @@
 	font.dispose();
 }
 
-public static Test suite() {
-	TestSuite suite = new TestSuite();
-	java.util.Vector<String> methodNames = methodNames();
-	java.util.Enumeration<String> e = methodNames.elements();
-	while (e.hasMoreElements()) {
-		suite.addTest(new Test_org_eclipse_swt_widgets_Canvas(e.nextElement()));
-	}
-	return suite;
-}
-public static java.util.Vector<String> methodNames() {
-	java.util.Vector<String> methodNames = new java.util.Vector<String>();
-	methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_CompositeI");
-	methodNames.addElement("test_scrollIIIIIIZ");
-	methodNames.addElement("test_setCaretLorg_eclipse_swt_widgets_Caret");
-	methodNames.addElement("test_setFontLorg_eclipse_swt_graphics_Font");
-	methodNames.addElement("test_consistency_MenuDetect");
-	methodNames.addElement("test_consistency_DragDetect");
-	methodNames.addAll(Test_org_eclipse_swt_widgets_Composite.methodNames()); // add superclass method names
-	return methodNames;
-}
-@Override
-protected void runTest() throws Throwable {
-	if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_CompositeI")) test_ConstructorLorg_eclipse_swt_widgets_CompositeI();
-	else if (getName().equals("test_scrollIIIIIIZ")) test_scrollIIIIIIZ();
-	else if (getName().equals("test_setCaretLorg_eclipse_swt_widgets_Caret")) test_setCaretLorg_eclipse_swt_widgets_Caret();
-	else if (getName().equals("test_setFontLorg_eclipse_swt_graphics_Font")) test_setFontLorg_eclipse_swt_graphics_Font();
-	else if (getName().equals("test_consistency_MenuDetect")) test_consistency_MenuDetect();
-	else if (getName().equals("test_consistency_DragDetect")) test_consistency_DragDetect();
-	else super.runTest();
-}
-
 /* custom*/
 
 public void test_consistency_MenuDetect() {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
index bb5b5a3..e690bfb 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Composite.java
@@ -12,11 +12,13 @@
 
 
 import static org.junit.Assert.assertArrayEquals;
-import junit.framework.*;
-import junit.textui.*;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Widget;
 
 /**
  * Automated Test Suite for class org.eclipse.swt.widgets.Composite
@@ -31,10 +33,6 @@
 	super(name);
 }
 
-public static void main(String[] args) {
-	TestRunner.run(suite());
-}
-
 @Override
 protected void setUp() {
 	super.setUp();
@@ -88,31 +86,6 @@
 	button2.dispose();
 }
 
-public static Test suite() {
-	TestSuite suite = new TestSuite();
-	java.util.Vector<String> methodNames = methodNames();
-	java.util.Enumeration<String> e = methodNames.elements();
-	while (e.hasMoreElements()) {
-		suite.addTest(new Test_org_eclipse_swt_widgets_Composite(e.nextElement()));
-	}
-	return suite;
-}
-public static java.util.Vector<String> methodNames() {
-	java.util.Vector<String> methodNames = new java.util.Vector<String>();
-	methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_CompositeI");
-	methodNames.addElement("test_getChildren");
-	methodNames.addElement("test_setTabList$Lorg_eclipse_swt_widgets_Control");
-	methodNames.addAll(Test_org_eclipse_swt_widgets_Scrollable.methodNames()); // add superclass method names
-	return methodNames;
-}
-@Override
-protected void runTest() throws Throwable {
-	if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_CompositeI")) test_ConstructorLorg_eclipse_swt_widgets_CompositeI();
-	else if (getName().equals("test_getChildren")) test_getChildren();
-	else if (getName().equals("test_setTabList$Lorg_eclipse_swt_widgets_Control")) test_setTabList$Lorg_eclipse_swt_widgets_Control();
-	else super.runTest();
-}
-
 /* custom */
 @Override
 protected void setWidget(Widget w) {
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
index 958b879..f50f68e 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_Scrollable.java
@@ -10,10 +10,8 @@
  *******************************************************************************/
 package org.eclipse.swt.tests.junit;
 
-import junit.framework.*;
-import junit.textui.*;
-
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Scrollable;
+import org.eclipse.swt.widgets.Widget;
 
 /**
  * Automated Test Suite for class org.eclipse.swt.widgets.Scrollable
@@ -26,10 +24,6 @@
 	super(name);
 }
 
-public static void main(String[] args) {
-	TestRunner.run(suite());
-}
-
 @Override
 public void test_ConstructorLorg_eclipse_swt_widgets_CompositeI() {
 	// abstract class
@@ -51,38 +45,8 @@
 	scrollable.getVerticalBar();
 }
 
-public static Test suite() {
-	TestSuite suite = new TestSuite();
-	java.util.Vector<String> methodNames = methodNames();
-	java.util.Enumeration<String> e = methodNames.elements();
-	while (e.hasMoreElements()) {
-		suite.addTest(new Test_org_eclipse_swt_widgets_Scrollable(e.nextElement()));
-	}
-	return suite;
-}
-
-public static java.util.Vector<String> methodNames() {
-	java.util.Vector<String> methodNames = new java.util.Vector<String>();
-	methodNames.addElement("test_ConstructorLorg_eclipse_swt_widgets_CompositeI");
-	methodNames.addElement("test_computeTrimIIII");
-	methodNames.addElement("test_getClientArea");
-	methodNames.addElement("test_getHorizontalBar");
-	methodNames.addElement("test_getVerticalBar");
-	methodNames.addAll(Test_org_eclipse_swt_widgets_Control.methodNames()); // add superclass method names
-	return methodNames;
-}
-@Override
-protected void runTest() throws Throwable {
-	if (getName().equals("test_ConstructorLorg_eclipse_swt_widgets_CompositeI")) test_ConstructorLorg_eclipse_swt_widgets_CompositeI();
-	else if (getName().equals("test_computeTrimIIII")) test_computeTrimIIII();
-	else if (getName().equals("test_getClientArea")) test_getClientArea();
-	else if (getName().equals("test_getHorizontalBar")) test_getHorizontalBar();
-	else if (getName().equals("test_getVerticalBar")) test_getVerticalBar();
-	else super.runTest();
-}
-
 /* custom */
-	Scrollable scrollable;
+Scrollable scrollable;
 
 @Override
 protected void setWidget(Widget w) {
