diff --git a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Adventure.java b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Adventure.java
index 713260f..658508d 100644
--- a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Adventure.java
+++ b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Adventure.java
@@ -111,5 +111,4 @@
 	public String getDescription() {
 		return description;
 	}
-
 }
diff --git a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Cart.java b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Cart.java
index 92ea666..651a957 100644
--- a/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Cart.java
+++ b/examples/org.eclipse.jface.examples.databinding/src/org/eclipse/jface/examples/databinding/model/Cart.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.jface.examples.databinding.model;
 
+import java.beans.PropertyChangeListener;
+
 public class Cart {
 
 	public void setAdventureDays(int i) {
@@ -22,4 +24,13 @@
 		return 0;
 	}
 
+	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		// not really necessary, but BeansObservables.observeValue(...) expects
+		// it.
+	}
+
+	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		// not really necessary, but BeansObservables.observeValue(...) expects
+		// it.
+	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/AggregateValidationStatusTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/AggregateValidationStatusTest.java
index 28d5b06..62824ab 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/AggregateValidationStatusTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/AggregateValidationStatusTest.java
@@ -11,16 +11,20 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.AggregateValidationStatus;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class AggregateValidationStatusTest extends AbstractSWTTestCase {
+	@Test
 	public void testAggregateValidationStatusValueType() throws Exception {
 		DataBindingContext dbc = new DataBindingContext();
 		AggregateValidationStatus status = new AggregateValidationStatus(dbc
@@ -28,6 +32,7 @@
 		assertEquals(IStatus.class, status.getValueType());
 	}
 
+	@Test
 	public void testConstructor_DefaultRealm() throws Exception {
 		DataBindingContext dbc = new DataBindingContext();
 		AggregateValidationStatus status = new AggregateValidationStatus(dbc
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/BindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/BindingTest.java
index ec49be3..d67acd8 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/BindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/BindingTest.java
@@ -11,12 +11,18 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 public class BindingTest extends AbstractDefaultRealmTestCase {
 	private IObservable target;
@@ -25,8 +31,8 @@
 
 	private DataBindingContext dbc;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		target = WritableValue.withValueType(String.class);
@@ -34,6 +40,7 @@
 		dbc = new DataBindingContext();
 	}
 
+	@Test
 	public void testDisposeTargetDisposesBinding() {
 		Binding binding = createBinding();
 		assertFalse(binding.isDisposed());
@@ -41,6 +48,7 @@
 		assertTrue(binding.isDisposed());
 	}
 
+	@Test
 	public void testDisposeModelDisposesBinding() {
 		Binding binding = createBinding();
 		assertFalse(binding.isDisposed());
@@ -48,6 +56,7 @@
 		assertTrue(binding.isDisposed());
 	}
 
+	@Test
 	public void testPreDisposedTarget_FiresIllegalArgumentException() {
 		try {
 			target.dispose();
@@ -57,6 +66,7 @@
 		}
 	}
 
+	@Test
 	public void testPreDisposedModel_FiresIllegalArgumentException() {
 		try {
 			model.dispose();
@@ -66,18 +76,21 @@
 		}
 	}
 
+	@Test
 	public void testDisposeModelThenBinding() {
 		Binding binding = createBinding();
 		model.dispose();
 		binding.dispose();
 	}
 
+	@Test
 	public void testDisposeTargetThenBinding() {
 		Binding binding = createBinding();
 		target.dispose();
 		binding.dispose();
 	}
 
+	@Test
 	public void testDisposeObservablesThenBinding() {
 		Binding binding = createBinding();
 		model.dispose();
@@ -85,18 +98,21 @@
 		binding.dispose();
 	}
 
+	@Test
 	public void testDisposeBindingThenModel() {
 		Binding binding = createBinding();
 		binding.dispose();
 		model.dispose();
 	}
 
+	@Test
 	public void testDisposeBindingThenTarget() {
 		Binding binding = createBinding();
 		binding.dispose();
 		target.dispose();
 	}
 
+	@Test
 	public void testDisposeBindingThenObservables() {
 		Binding binding = createBinding();
 		binding.dispose();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/DatabindingContextTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/DatabindingContextTest.java
index d2b87fb..d35bc85 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/DatabindingContextTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/DatabindingContextTest.java
@@ -12,6 +12,12 @@
  *******************************************************************************/
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 
 import org.eclipse.core.databinding.AggregateValidationStatus;
@@ -30,25 +36,29 @@
 import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class DatabindingContextTest extends AbstractDefaultRealmTestCase {
 	private DataBindingContext dbc;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		dbc = new DataBindingContext();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (dbc != null) {
 			dbc.dispose();
 		}
 		super.tearDown();
 	}
 
+	@Test
 	public void testDisposeBindings() throws Exception {
 		Binding binding = new BindingStub();
 		binding.init(dbc);
@@ -59,6 +69,7 @@
 				.isDisposed());
 	}
 
+	@Test
 	public void testBindValue() throws Exception {
 		IObservableValue target = WritableValue.withValueType(String.class);
 		IObservableValue model = WritableValue.withValueType(String.class);
@@ -68,6 +79,7 @@
 				.getName().endsWith("ValueBinding"));
 	}
 
+	@Test
 	public void testBindList() throws Exception {
 		IObservableList target = WritableList.withElementType(Object.class);
 		IObservableList model = WritableList.withElementType(Object.class);
@@ -83,6 +95,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testValidationError() throws Exception {
 		WritableValue targetObservable = WritableValue
 				.withValueType(String.class);
@@ -130,6 +143,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testBindValueAddBinding() throws Exception {
 		WritableValue targetValue = WritableValue.withValueType(String.class);
 		WritableValue modelValue = WritableValue.withValueType(String.class);
@@ -151,6 +165,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testBindListAddBinding() throws Exception {
 		WritableList targetList = new WritableList(new ArrayList(),
 				Object.class);
@@ -166,6 +181,7 @@
 		assertEquals(binding, dbc.getBindings().get(0));
 	}
 
+	@Test
 	public void testGetBindingsImmutability() throws Exception {
 		BindingStub binding = new BindingStub();
 		binding.init(dbc);
@@ -177,6 +193,7 @@
 		}
 	}
 
+	@Test
 	public void testRemoveBinding() throws Exception {
 		BindingStub binding = new BindingStub();
 		binding.init(dbc);
@@ -195,6 +212,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testValidateTargetAfterValueBindingCreation() throws Exception {
 		WritableValue target = new WritableValue("", String.class);
 		WritableValue model = new WritableValue("2", String.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ListBindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ListBindingTest.java
index 4de5ba6..75f8283 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ListBindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ListBindingTest.java
@@ -16,6 +16,10 @@
 import static org.eclipse.core.databinding.UpdateListStrategy.POLICY_NEVER;
 import static org.eclipse.core.databinding.UpdateListStrategy.POLICY_UPDATE;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -35,6 +39,9 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.junit.Assert;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.Test;
 
 /**
  * @since 1.1
@@ -44,8 +51,8 @@
 	private IObservableList model;
 	private DataBindingContext dbc;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		target = new WritableList(new ArrayList(), String.class);
@@ -53,13 +60,14 @@
 		dbc = new DataBindingContext();
 	}
 
-	@Override
+	@After
 	public void tearDown() throws Exception {
 		dbc.dispose();
 		model.dispose();
 		target.dispose();
 	}
 
+	@Test
 	public void testUpdateModelFromTarget() throws Exception {
 		Binding binding = dbc.bindList(target, model,
 				new UpdateListStrategy(UpdateListStrategy.POLICY_ON_REQUEST),
@@ -77,6 +85,7 @@
 		assertEquals("target != model", target, model);
 	}
 
+	@Test
 	public void testUpdateTargetFromModel() throws Exception {
 		Binding binding = dbc.bindList(target, model,
 				new UpdateListStrategy(UpdateListStrategy.POLICY_ON_REQUEST),
@@ -95,21 +104,25 @@
 		assertEquals("model != target", model, target);
 	}
 
+	@Test
 	public void testGetTarget() throws Exception {
 		Binding binding = dbc.bindList(target, model);
 		assertEquals(target, binding.getTarget());
 	}
 
+	@Test
 	public void testGetModel() throws Exception {
 		Binding binding = dbc.bindList(target, model);
 		assertEquals(model, binding.getModel());
 	}
 
+	@Test
 	public void testStatusIsInstanceOfBindingStatus() throws Exception {
 		Binding binding = dbc.bindList(target, model);
 		assertTrue(binding.getValidationStatus().getValue() instanceof BindingStatus);
 	}
 
+	@Test
 	public void testAddValidationStatusContainsMultipleStatuses() throws Exception {
 		UpdateListStrategy strategy = new UpdateListStrategy() {
 			@Override
@@ -141,6 +154,7 @@
 		assertEquals("second status severity", IStatus.INFO, children[1].getSeverity());
 	}
 
+	@Test
 	public void testRemoveValidationStatusContainsMultipleStatuses() throws Exception {
 		List items = Arrays.asList(new String[] {"1", "2"});
 		model.addAll(items);
@@ -175,6 +189,7 @@
 		assertEquals("second status severity", IStatus.INFO, children[1].getSeverity());
 	}
 
+	@Test
 	public void testAddOKValidationStatus() throws Exception {
 		Binding binding = dbc.bindList(target, model);
 		target.add("1");
@@ -184,6 +199,7 @@
 		assertEquals(0, status.getChildren().length);
 	}
 
+	@Test
 	public void testRemoveOKValidationStatus() throws Exception {
 		model.add("1");
 		Binding binding = dbc.bindList(target, model);
@@ -198,6 +214,7 @@
 	 * we test common functionality from UpdateStrategy here, because that base
 	 * class would need much more stubbing and mocking to test it.
 	 */
+	@Test
 	public void testErrorDuringConversionIsLogged() {
 		UpdateListStrategy modelToTarget = new UpdateListStrategy();
 		modelToTarget.setConverter(new IConverter() {
@@ -243,6 +260,7 @@
 	 * we test common functionality from UpdateStrategy here, because that base
 	 * class would need much more stubbing and mocking to test it.
 	 */
+	@Test
 	public void testErrorDuringRemoveIsLogged() {
 		IObservableList<String> target = new WritableList<String>() {
 			@Override
@@ -273,6 +291,7 @@
 	 * we test common functionality from UpdateStrategy here, because that base
 	 * class would need much more stubbing and mocking to test it.
 	 */
+	@Test
 	public void testErrorDuringMoveIsLogged() {
 		IObservableList<String> target = new WritableList<String>() {
 			@Override
@@ -304,6 +323,7 @@
 	 * we test common functionality from UpdateStrategy here, because that base
 	 * class would need much more stubbing and mocking to test it.
 	 */
+	@Test
 	public void testErrorDuringReplaceIsLogged() {
 		IObservableList<String> target = new WritableList<String>() {
 			@Override
@@ -333,6 +353,7 @@
 	/**
 	 * test for bug 491678
 	 */
+	@Test
 	public void testAddListenerAndInitialSyncAreUninterruptable() {
 		Policy.setLog(new ILogger() {
 			@Override
@@ -351,6 +372,7 @@
 	/**
 	 * test for bug 491678
 	 */
+	@Test
 	public void testTargetValueIsSyncedToModelIfModelWasNotSyncedToTarget() {
 		target.add("first");
 		dbc.bindList(target, model, new UpdateListStrategy(POLICY_UPDATE), new UpdateListStrategy(POLICY_NEVER));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ObservablesManagerTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ObservablesManagerTest.java
index 993b8a2..60d25ad 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ObservablesManagerTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ObservablesManagerTest.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.ObservablesManager;
 import org.eclipse.core.databinding.observable.IObservable;
@@ -19,6 +22,9 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -27,21 +33,22 @@
 public class ObservablesManagerTest extends AbstractDefaultRealmTestCase {
 	private DataBindingContext dbc;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		dbc = new DataBindingContext();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (dbc != null) {
 			dbc.dispose();
 		}
 		super.tearDown();
 	}
 
+	@Test
 	public void testOnlyModelIsDisposed() throws Exception {
 		IObservableValue targetOv = new WritableValue();
 		IObservableValue modelOv = new WritableValue();
@@ -56,6 +63,7 @@
 		assertTrue(modelOv.isDisposed());
 	}
 
+	@Test
 	public void testOnlyTargetIsDisposed() throws Exception {
 		IObservableValue targetOv = new WritableValue();
 		IObservableValue modelOv = new WritableValue();
@@ -70,6 +78,7 @@
 		assertFalse(modelOv.isDisposed());
 	}
 
+	@Test
 	public void testTargetAndModelIsDisposed() throws Exception {
 		IObservableValue targetOv = new WritableValue();
 		IObservableValue modelOv = new WritableValue();
@@ -84,6 +93,7 @@
 		assertTrue(modelOv.isDisposed());
 	}
 
+	@Test
 	public void testDispose_Bug277966_NPEWhenManagedObservableAlreadyDisposed() {
 		ObservablesManager manager = new ObservablesManager();
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
index cb243e5..9a91b06 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
@@ -13,6 +13,7 @@
 
 import static org.eclipse.core.databinding.UpdateSetStrategy.POLICY_NEVER;
 import static org.eclipse.core.databinding.UpdateSetStrategy.POLICY_UPDATE;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.SetBinding;
@@ -23,7 +24,10 @@
 import org.eclipse.core.databinding.util.Policy;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 public class SetBindingTest extends AbstractDefaultRealmTestCase {
 	private IObservableSet<String> target;
@@ -31,7 +35,8 @@
 	private DataBindingContext dbc;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		target = new WritableSet<>();
@@ -40,12 +45,14 @@
 	}
 
 	@Override
+	@After
 	public void tearDown() throws Exception {
 		dbc.dispose();
 		model.dispose();
 		target.dispose();
 	}
 
+	@Test
 	public void testUpdateModelFromTarget() throws Exception {
 		target.add("1");
 
@@ -54,6 +61,7 @@
 		assertEquals("target != model", target, model);
 	}
 
+	@Test
 	public void testUpdateTargetFromModel() throws Exception {
 		model.add("1");
 
@@ -65,6 +73,7 @@
 	/**
 	 * test for bug 491678
 	 */
+	@Test
 	public void testAddListenerAndInitialSyncAreUninterruptable() {
 		Policy.setLog(new ILogger() {
 			@Override
@@ -83,6 +92,7 @@
 	/**
 	 * test for bug 491678
 	 */
+	@Test
 	public void testTargetValueIsSyncedToModelIfModelWasNotSyncedToTarget() {
 		target.add("first");
 		dbc.bindSet(target, model, new UpdateSetStrategy(POLICY_UPDATE), new UpdateSetStrategy(POLICY_NEVER));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SideEffectTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SideEffectTest.java
index 53a2561..164112f 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SideEffectTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SideEffectTest.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.databinding.observable.sideeffect.ISideEffect;
 import org.eclipse.core.databinding.observable.value.ComputedValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
-import org.eclipse.jface.tests.databinding.AbstractJUnit4RealmTestCase;
+import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -30,7 +30,7 @@
  *
  * @since 3.2
  */
-public class SideEffectTest extends AbstractJUnit4RealmTestCase {
+public class SideEffectTest extends AbstractDefaultRealmTestCase {
 	// TODO: Add test cases for {@link SideEffect#create(Runnable)},
 	// {@link SideEffect#create(java.util.function.Supplier,
 	// java.util.function.Consumer)}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateListStrategyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateListStrategyTest.java
index c882814..35bed85 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateListStrategyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateListStrategyTest.java
@@ -11,17 +11,21 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.BindingException;
 import org.eclipse.core.databinding.UpdateListStrategy;
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.internal.databinding.conversion.IdentityConverter;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class UpdateListStrategyTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testFillDefaults_AssertSourceTypeExtendsConverterFromType() {
 		// Valid use: source type String extends converter from-type Object
 		UpdateListStrategyStub strategy = new UpdateListStrategyStub();
@@ -43,6 +47,7 @@
 		}
 	}
 
+	@Test
 	public void testFillDefaults_AssertConverterToTypeExtendsDestinationType() {
 		// Valid use: converter to-type String extends destination type Object
 		UpdateListStrategyStub strategy = new UpdateListStrategyStub();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateSetStrategyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateSetStrategyTest.java
index 8a6b46e..2009f36 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateSetStrategyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateSetStrategyTest.java
@@ -11,17 +11,21 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.BindingException;
 import org.eclipse.core.databinding.UpdateSetStrategy;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.databinding.observable.set.WritableSet;
 import org.eclipse.core.internal.databinding.conversion.IdentityConverter;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class UpdateSetStrategyTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testFillDefaults_AssertSourceTypeExtendsConverterFromType() {
 		// Valid use: source type String extends converter from-type Object
 		UpdateSetStrategyStub strategy = new UpdateSetStrategyStub();
@@ -43,6 +47,7 @@
 		}
 	}
 
+	@Test
 	public void testFillDefaults_AssertConverterToTypeExtendsDestinationType() {
 		// Valid use: converter to-type String extends destination type Object
 		UpdateSetStrategyStub strategy = new UpdateSetStrategyStub();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateStrategyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateStrategyTest.java
index 3a89d3b..5f2459f 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateStrategyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateStrategyTest.java
@@ -11,6 +11,10 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Date;
@@ -41,204 +45,250 @@
 import org.eclipse.core.internal.databinding.conversion.StringToShortConverter;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class UpdateStrategyTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testDefaultConverterForStringToInteger() throws Exception {
 		assertDefaultConverter(String.class, Integer.class, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToIntegerPrimitive() throws Exception {
 		assertDefaultConverter(String.class, Integer.TYPE, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToLong() throws Exception {
 		assertDefaultConverter(String.class, Long.class, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToLongPrimitive() throws Exception {
 		assertDefaultConverter(String.class, Long.TYPE, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToDouble() throws Exception {
 		assertDefaultConverter(String.class, Double.class, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToDoublePrimitive() throws Exception {
 		assertDefaultConverter(String.class, Double.TYPE, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToFloat() throws Exception {
 		assertDefaultConverter(String.class, Float.class, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToFloatPrimitive() throws Exception {
 		assertDefaultConverter(String.class, Float.TYPE, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToBigInteger() throws Exception {
 		assertDefaultConverter(String.class, BigInteger.class, StringToNumberConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForIntegerToString() throws Exception {
 		assertDefaultConverter(Integer.class, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForIntegerPrimitiveToString() throws Exception {
 		assertDefaultConverter(Integer.TYPE, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForLongToString() throws Exception {
 		assertDefaultConverter(Long.class, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForLongPrimitiveToString() throws Exception {
 		assertDefaultConverter(Long.TYPE, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForDoubleToString() throws Exception {
 		assertDefaultConverter(Double.class, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForDoublePrimitiveToString() throws Exception {
 		assertDefaultConverter(Double.TYPE, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForFloatToString() throws Exception {
 		assertDefaultConverter(Float.class, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForFloatPrimitiveToString() throws Exception {
 		assertDefaultConverter(Float.TYPE, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForBigIntegerToString() throws Exception {
 		assertDefaultConverter(BigInteger.class, String.class, NumberToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForDateToString() throws Exception {
 		assertDefaultConverter(Date.class, String.class, DateToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToBoolean() throws Exception {
 		assertDefaultConverter(String.class, Boolean.class, StringToBooleanConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToBooleanPrimitive() throws Exception {
 		assertDefaultConverter(String.class, Boolean.TYPE, StringToBooleanPrimitiveConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToByte() throws Exception {
 		assertDefaultConverter(String.class, Byte.class, StringToByteConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToBytePrimitive() throws Exception {
 		assertDefaultConverter(String.class, Byte.TYPE, StringToByteConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToCharacter() throws Exception {
 		assertDefaultConverter(String.class, Character.class, StringToCharacterConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToDate() throws Exception {
 		assertDefaultConverter(String.class, Date.class, StringToDateConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToShort() throws Exception {
 		assertDefaultConverter(String.class, Short.class, StringToShortConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStringToShortPrimitive() throws Exception {
 		assertDefaultConverter(String.class, Short.TYPE, StringToShortConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForByteToString() throws Exception {
 		assertDefaultConverter(Byte.class, String.class, IntegerToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForBytePrimitiveToString() throws Exception {
 		assertDefaultConverter(Byte.TYPE, String.class, IntegerToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForShortToString() throws Exception {
 		assertDefaultConverter(Short.class, String.class, IntegerToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForShortPrimitiveToString() throws Exception {
 		assertDefaultConverter(Short.TYPE, String.class, IntegerToStringConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForStatusToString() throws Exception {
 		assertDefaultConverter(IStatus.class, String.class, StatusToStringConverter.class);
 	}
 
 
+	@Test
 	public void testDefaultConverterForNumberToByte() throws Exception {
 		assertFromNumberToNumberConverter(Byte.class, Byte.TYPE,
 				NumberToByteConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToShort() throws Exception {
 		assertFromNumberToNumberConverter(Short.class, Short.TYPE,
 				NumberToShortConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToShortPrimitive()
 			throws Exception {
 		assertFromNumberToNumberConverter(Short.TYPE, Short.class,
 				NumberToShortConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToInteger() throws Exception {
 		assertFromNumberToNumberConverter(Integer.class, Integer.TYPE,
 				NumberToIntegerConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToIntegerPrimitive()
 			throws Exception {
 		assertFromNumberToNumberConverter(Integer.TYPE, Integer.class,
 				NumberToIntegerConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToLong() throws Exception {
 		assertFromNumberToNumberConverter(Long.class, Long.TYPE,
 				NumberToLongConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToLongPrimitive() throws Exception {
 		assertFromNumberToNumberConverter(Long.TYPE, Long.class,
 				NumberToLongConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToFloat() throws Exception {
 		assertFromNumberToNumberConverter(Float.class, Float.TYPE,
 				NumberToFloatConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToFloatPrimitive()
 			throws Exception {
 		assertFromNumberToNumberConverter(Float.TYPE, Float.class,
 				NumberToFloatConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToDouble() throws Exception {
 		assertFromNumberToNumberConverter(Double.class, Double.TYPE,
 				NumberToDoubleConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToDoublePrimitive()
 			throws Exception {
 		assertFromNumberToNumberConverter(Double.TYPE, Double.class,
 				NumberToDoubleConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToBigInteger() throws Exception {
 		assertFromNumberToNumberConverter(BigInteger.class, null,
 				NumberToBigIntegerConverter.class);
 	}
 
+	@Test
 	public void testDefaultConverterForNumberToBigDecimal() throws Exception {
 		assertFromNumberToNumberConverter(BigDecimal.class, null,
 				NumberToBigDecimalConverter.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateValueStrategyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateValueStrategyTest.java
index 4b7c94d..a61ad9a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateValueStrategyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/UpdateValueStrategyTest.java
@@ -12,6 +12,11 @@
 
 package org.eclipse.core.tests.databinding;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Date;
@@ -37,120 +42,143 @@
 import org.eclipse.core.internal.databinding.validation.StringToLongValidator;
 import org.eclipse.core.internal.databinding.validation.StringToShortValidator;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class UpdateValueStrategyTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testDefaultValidatorForStringToInteger() throws Exception {
 		assertDefaultValidator(String.class, Integer.class,
 				StringToIntegerValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToIntegerPrimitive()
 			throws Exception {
 		assertDefaultValidator(String.class, Integer.TYPE,
 				StringToIntegerValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToLong() throws Exception {
 		assertDefaultValidator(String.class, Long.class,
 				StringToLongValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToLongPrimitive() throws Exception {
 		assertDefaultValidator(String.class, Long.TYPE,
 				StringToLongValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToFloat() throws Exception {
 		assertDefaultValidator(String.class, Float.class,
 				StringToFloatValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToFloatPrimitive()
 			throws Exception {
 		assertDefaultValidator(String.class, Float.TYPE,
 				StringToFloatValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToDouble() throws Exception {
 		assertDefaultValidator(String.class, Double.class,
 				StringToDoubleValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToDoublePrimitive()
 			throws Exception {
 		assertDefaultValidator(String.class, Double.TYPE,
 				StringToDoubleValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToByte() throws Exception {
 		assertDefaultValidator(String.class, Byte.class,
 				StringToByteValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToBytePrimitive() throws Exception {
 		assertDefaultValidator(String.class, Byte.TYPE,
 				StringToByteValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToShort() throws Exception {
 		assertDefaultValidator(String.class, Short.class,
 				StringToShortValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToShortPrimitive()
 			throws Exception {
 		assertDefaultValidator(String.class, Short.TYPE,
 				StringToShortValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForStringToDate() throws Exception {
 		assertDefaultValidator(String.class, Date.class,
 				StringToDateValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToByte() throws Exception {
 		assertDefaultValidator(Integer.class, Byte.class,
 				NumberToByteValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToShort() throws Exception {
 		assertDefaultValidator(Integer.class, Short.class,
 				NumberToShortValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToInteger() throws Exception {
 		assertDefaultValidator(Short.class, Integer.class,
 				NumberToIntegerValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToLong() throws Exception {
 		assertDefaultValidator(Short.class, Long.class,
 				NumberToLongValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToFloat() throws Exception {
 		assertDefaultValidator(Short.class, Float.class,
 				NumberToFloatValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToDouble() throws Exception {
 		assertDefaultValidator(Short.class, Double.class,
 				NumberToDoubleValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToBigInteger() throws Exception {
 		assertDefaultValidator(Short.class, BigInteger.class,
 				NumberToUnboundedNumberValidator.class);
 	}
 
+	@Test
 	public void testDefaultValidatorForNumberToBigDecimal() throws Exception {
 		assertDefaultValidator(Short.class, BigDecimal.class,
 				NumberToUnboundedNumberValidator.class);
 	}
 
+	@Test
 	public void testCachesDefaultedValidators() throws Exception {
 		WritableValue source = WritableValue.withValueType(String.class);
 		WritableValue destination = WritableValue.withValueType(Integer.class);
@@ -167,6 +195,7 @@
 		assertSame(validator, strategy.validator);
 	}
 
+	@Test
 	public void testFillDefaults_AssertSourceTypeExtendsConverterFromType() {
 		// Valid use: source type String extends converter from-type Object
 		UpdateValueStrategyStub strategy = new UpdateValueStrategyStub();
@@ -188,6 +217,7 @@
 		}
 	}
 
+	@Test
 	public void testFillDefaults_AssertConverterToTypeExtendsDestinationType() {
 		// Valid use: converter to-type String extends destination type Object
 		UpdateValueStrategyStub strategy = new UpdateValueStrategyStub();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ValueBindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ValueBindingTest.java
index a54c12f..83de1dd 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ValueBindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/ValueBindingTest.java
@@ -16,6 +16,11 @@
 import static org.eclipse.core.databinding.UpdateValueStrategy.POLICY_NEVER;
 import static org.eclipse.core.databinding.UpdateValueStrategy.POLICY_UPDATE;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -39,6 +44,8 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
@@ -53,8 +60,8 @@
 
 	private List log;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		target = WritableValue.withValueType(String.class);
@@ -75,6 +82,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testNoUpdateTargetFromModel() throws Exception {
 		try {
 			new DataBindingContext().bindValue(new ObservableValueStub(),
@@ -86,6 +94,7 @@
 		}
 	}
 
+	@Test
 	public void testValuePropagation() throws Exception {
 		String initialValue = "value";
 		model.setValue(initialValue);
@@ -96,18 +105,21 @@
 		assertEquals(target.getValue(), model.getValue());
 	}
 
+	@Test
 	public void testGetTarget() throws Exception {
 		Binding binding = dbc.bindValue(target, model);
 
 		assertEquals(target, binding.getTarget());
 	}
 
+	@Test
 	public void testGetModel() throws Exception {
 		Binding binding = dbc.bindValue(target, model);
 
 		assertEquals(model, binding.getModel());
 	}
 
+	@Test
 	public void testOKStatusInValidationUpdatesModel() throws Exception {
 		Binding binding = dbc.bindValue(target, model);
 
@@ -119,6 +131,7 @@
 		assertTrue(((IStatus) binding.getValidationStatus().getValue()).isOK());
 	}
 
+	@Test
 	public void testWarningStatusInValidationUpdatesModel() throws Exception {
 		Binding binding = dbc.bindValue(target, model,
 				new UpdateValueStrategy()
@@ -133,6 +146,7 @@
 				.getValidationStatus().getValue()).getSeverity());
 	}
 
+	@Test
 	public void testInfoStatusInValidationUpdatesModel() throws Exception {
 		Binding binding = dbc
 				.bindValue(target, model, new UpdateValueStrategy()
@@ -147,6 +161,7 @@
 				.getValidationStatus().getValue()).getSeverity());
 	}
 
+	@Test
 	public void testErrorStatusInValidationDoesNotUpdateModel()
 			throws Exception {
 		Binding binding = dbc.bindValue(target, model,
@@ -162,6 +177,7 @@
 				.getValidationStatus().getValue()).getSeverity());
 	}
 
+	@Test
 	public void testCancelStatusInValidationDoesNotUpdateModel()
 			throws Exception {
 		Binding binding = dbc.bindValue(target, model,
@@ -177,6 +193,7 @@
 				.getValidationStatus().getValue()).getSeverity());
 	}
 
+	@Test
 	public void testStatusesFromEveryPhaseAreReturned() throws Exception {
 		UpdateValueStrategy strategy = new UpdateValueStrategy() {
 			@Override
@@ -214,11 +231,13 @@
 		assertEquals("doSet severity", IStatus.INFO, children[3].getSeverity());
 	}
 
+	@Test
 	public void testStatusIsInstanceOfBindingStatus() throws Exception {
 		Binding binding = dbc.bindValue(target, model);
 		assertTrue(binding.getValidationStatus().getValue() instanceof BindingStatus);
 	}
 
+	@Test
 	public void testDiffsAreCheckedForEqualityBeforeUpdate() throws Exception {
 		class WritableValueStub extends WritableValue {
 			public WritableValueStub() {
@@ -252,6 +271,7 @@
 		assertEquals("update does not occur", count, strategy.afterGetCount);
 	}
 
+	@Test
 	public void testPostInit_UpdatePolicy_UpdateToTarget_UpdateToModel() {
 		bindLoggingValue(
 				loggingTargetToModelStrategy(UpdateValueStrategy.POLICY_UPDATE),
@@ -262,6 +282,7 @@
 				"model-before-set" }), log);
 	}
 
+	@Test
 	public void testPostInit_UpdatePolicy_UpdateToTarget_ConvertToModel() {
 		bindLoggingValue(
 				loggingTargetToModelStrategy(UpdateValueStrategy.POLICY_CONVERT),
@@ -272,6 +293,7 @@
 				"model-before-set" }), log);
 	}
 
+	@Test
 	public void testPostInit_UpdatePolicy_UpdateToTarget_OnRequestToModel() {
 		bindLoggingValue(
 				loggingTargetToModelStrategy(UpdateValueStrategy.POLICY_ON_REQUEST),
@@ -297,6 +319,7 @@
 				"model-set" }), log);
 	}
 
+	@Test
 	public void testPostInit_UpdatePolicy_UpdateToTarget_NeverToModel() {
 		bindLoggingValue(
 				loggingTargetToModelStrategy(UpdateValueStrategy.POLICY_NEVER),
@@ -318,6 +341,7 @@
 		assertEquals(Collections.EMPTY_LIST, log);
 	}
 
+	@Test
 	public void testPostInit_UpdatePolicy_ConvertToTarget_UpdateToModel() {
 		bindLoggingValue(
 				loggingTargetToModelStrategy(UpdateValueStrategy.POLICY_UPDATE),
@@ -343,6 +367,7 @@
 	/**
 	 * test for bug 491678
 	 */
+	@Test
 	public void testTargetValueIsSyncedToModelIfModelWasNotSyncedToTarget() {
 		bindLoggingValue(new UpdateValueStrategy(true, POLICY_UPDATE), new UpdateValueStrategy(true, POLICY_NEVER));
 		assertEquals(model.getValue(), target.getValue());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousBeanValuePropertyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousBeanValuePropertyTest.java
index 2370c69..2d6f105 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousBeanValuePropertyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousBeanValuePropertyTest.java
@@ -11,11 +11,14 @@
 
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -23,6 +26,7 @@
  */
 public class AnonymousBeanValuePropertyTest extends
 		AbstractDefaultRealmTestCase {
+	@Test
 	public void testObserveDetailHavingNullValueType_UseExplicitValueType() {
 		IObservableValue master = WritableValue.withValueType(null);
 		IValueProperty prop = BeanProperties.value("value", String.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousPojoValuePropertyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousPojoValuePropertyTest.java
index 089ddb9..2ad2de7 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousPojoValuePropertyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/AnonymousPojoValuePropertyTest.java
@@ -11,11 +11,14 @@
 
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -23,6 +26,7 @@
  */
 public class AnonymousPojoValuePropertyTest extends
 		AbstractDefaultRealmTestCase {
+	@Test
 	public void testObserveDetailHavingNullValueType_UseExplicitValueType() {
 		IObservableValue master = WritableValue.withValueType(null);
 		IValueProperty prop = PojoProperties.value("value", String.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeanPropertiesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeanPropertiesTest.java
index c5b5be3..e2ece43 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeanPropertiesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeanPropertiesTest.java
@@ -1,39 +1,47 @@
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.IBeanObservable;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.tests.internal.databinding.beans.Bean;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 public class BeanPropertiesTest extends AbstractDefaultRealmTestCase {
 	private Bean bean;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		bean = new Bean();
 	}
 
+	@Test
 	public void testValue_ValueFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.value(Bean.class, "value")
 				.valueFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testSet_SetFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.set(Bean.class, "set")
 				.setFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testList_ListFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.list(Bean.class, "list")
 				.listFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testMap_MapFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.map(Bean.class, "map")
 				.mapFactory().createObservable(bean);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeansObservablesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeansObservablesTest.java
index 212abb2..751a2d4 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeansObservablesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/BeansObservablesTest.java
@@ -15,6 +15,10 @@
 
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Arrays;
 
 import org.eclipse.core.databinding.DataBindingContext;
@@ -33,6 +37,8 @@
 import org.eclipse.core.internal.databinding.beans.BeanObservableValueDecorator;
 import org.eclipse.core.tests.internal.databinding.beans.Bean;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -42,8 +48,8 @@
 	Bean model = null;
 	Class<?> elementType = null;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		elements = new Bean[] { new Bean("1"), new Bean("2"), new Bean("3") };
@@ -52,12 +58,14 @@
 		elementType = Bean.class;
 	}
 
+	@Test
 	public void testObserveListArrayInferredElementType() throws Exception {
 		IObservableList list = BeansObservables.observeList(Realm.getDefault(),
 				model, "list", null);
 		assertEquals("element type", Object.class, list.getElementType());
 	}
 
+	@Test
 	public void testObserveListNonInferredElementType() throws Exception {
 		elementType = Object.class;
 		IObservableList list = BeansObservables.observeList(Realm.getDefault(),
@@ -65,6 +73,7 @@
 		assertEquals("element type", elementType, list.getElementType());
 	}
 
+	@Test
 	public void testListFactory() throws Exception {
 		IObservableFactory factory = BeansObservables.listFactory(
 				Realm.getDefault(), "list", elementType);
@@ -76,6 +85,7 @@
 		assertEquals("element type", elementType, list.getElementType());
 	}
 
+	@Test
 	public void testObserveDetailListElementType() throws Exception {
 		WritableValue parent = WritableValue.withValueType(Bean.class);
 		parent.setValue(model);
@@ -87,6 +97,7 @@
 				Arrays.equals(elements, list.toArray(new Bean[list.size()])));
 	}
 
+	@Test
 	public void testObserveDetailValueIBeanObservable() throws Exception {
 		WritableValue parent = WritableValue.withValueType(Bean.class);
 		Bean bean = new Bean();
@@ -104,6 +115,7 @@
 				.getName().endsWith("DetailObservableValue"));
 	}
 
+	@Test
 	public void testObserveDetailValueNullOuterElementType() throws Exception {
 		WritableValue parent = new WritableValue(new Bean(), null);
 
@@ -114,6 +126,7 @@
 				((IBeanObservable) detailValue).getPropertyDescriptor());
 	}
 
+	@Test
 	public void testObservableDetailListIBeanObservable() throws Exception {
 		WritableValue parent = WritableValue.withValueType(Bean.class);
 		Bean bean = new Bean();
@@ -135,6 +148,7 @@
 				.equals(detailList));
 	}
 
+	@Test
 	public void testObservableDetailListNullOuterElementType() throws Exception {
 		WritableValue parent = new WritableValue(new Bean(), null);
 
@@ -145,6 +159,7 @@
 				((IBeanObservable) detailList).getPropertyDescriptor());
 	}
 
+	@Test
 	public void testObservableDetailSetIBeanObservable() throws Exception {
 		WritableValue parent = WritableValue.withValueType(Bean.class);
 		Bean bean = new Bean();
@@ -166,6 +181,7 @@
 				.equals(detailSet));
 	}
 
+	@Test
 	public void testObservableDetailSetNullOuterElementType() throws Exception {
 		WritableValue parent = new WritableValue(new Bean(), null);
 
@@ -176,6 +192,7 @@
 				((IBeanObservable) detailSet).getPropertyDescriptor());
 	}
 
+	@Test
 	public void testObserveSetElementType() throws Exception {
 		Bean bean = new Bean();
 		IObservableSet observableSet = BeansObservables.observeSet(
@@ -183,6 +200,7 @@
 		assertEquals(Bean.class, observableSet.getElementType());
 	}
 
+	@Test
 	public void testObserveSetNonInferredElementType() throws Exception {
 		Bean bean = new Bean();
 		IObservableSet observableSet = BeansObservables.observeSet(
@@ -195,6 +213,7 @@
 	 * BeansObservables.observeList() - error when external code modifies
 	 * observed list.
 	 */
+	@Test
 	public void testHandleExternalChangeToProperty() {
 		Bean targetBean = new Bean();
 		IObservableList modelObservable = BeansObservables.observeList(
@@ -230,6 +249,7 @@
 
 	}
 
+	@Test
 	public void testObserveDetailValue_ValueType() {
 		Bean inner = new Bean("string");
 		Bean outer = new Bean(inner);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoObservablesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoObservablesTest.java
index 8c5f8e3..aa3684d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoObservablesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoObservablesTest.java
@@ -12,6 +12,11 @@
 
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.beans.IBeanObservable;
 import org.eclipse.core.databinding.beans.PojoObservables;
 import org.eclipse.core.databinding.beans.PojoProperties;
@@ -27,6 +32,8 @@
 import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -35,14 +42,15 @@
 	private Bean pojo;
 	private String propertyName;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		pojo = new Bean();
 		propertyName = "value";
 	}
 
+	@Test
 	public void testObserveValue_ReturnsIBeanObservable() throws Exception {
 		IObservableValue value = PojoObservables.observeValue(pojo,
 				propertyName);
@@ -51,6 +59,7 @@
 		assertTrue(value instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObserveValue_DoesNotAttachListeners() throws Exception {
 		IObservableValue value = PojoObservables.observeValue(pojo,
 				propertyName);
@@ -59,6 +68,7 @@
 		assertFalse(pojo.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testObservableValueWithRealm_ReturnsIBeanObservable()
 			throws Exception {
 		CurrentRealm realm = new CurrentRealm(true);
@@ -69,6 +79,7 @@
 		assertTrue(value instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObservableMap_ReturnsIBeanObservable() throws Exception {
 		IObservableSet set = new WritableSet();
 		set.add(new Bean());
@@ -79,6 +90,7 @@
 		assertTrue(map instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObservableMap_DoesNotAttachListeners() throws Exception {
 		IObservableSet set = new WritableSet();
 		set.add(pojo);
@@ -90,6 +102,7 @@
 		assertFalse(pojo.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testObserveMaps_ReturnsMaps() throws Exception {
 		IObservableSet set = new WritableSet();
 		set.add(pojo);
@@ -99,6 +112,7 @@
 		assertEquals(2, maps.length);
 	}
 
+	@Test
 	public void testObserveListWithElementType_ReturnsIBeanObservable()
 			throws Exception {
 		IObservableList list = PojoObservables.observeList(Realm.getDefault(),
@@ -106,6 +120,7 @@
 		assertTrue(list instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObserveListWithElementType_DoesNotAttachListeners()
 			throws Exception {
 		IObservableList observable = PojoObservables.observeList(Realm
@@ -115,12 +130,14 @@
 		assertFalse(pojo.hasListeners("list"));
 	}
 
+	@Test
 	public void testObserveList_ReturnsIBeanObservable() throws Exception {
 		IObservableList observable = PojoObservables.observeList(Realm
 				.getDefault(), pojo, "list");
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObserveList_DoesNotAttachListeners() throws Exception {
 		IObservableList observable = PojoObservables.observeList(Realm
 				.getDefault(), pojo, "list");
@@ -129,6 +146,7 @@
 		assertFalse(pojo.hasListeners("list"));
 	}
 
+	@Test
 	public void testObserveSetWithElementType_ReturnsIBeanObservable()
 			throws Exception {
 		IObservableSet list = PojoObservables.observeSet(Realm.getDefault(),
@@ -136,6 +154,7 @@
 		assertTrue(list instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObserveSetWithElementType_DoesNotAttachListeners()
 			throws Exception {
 		IObservableSet observable = PojoObservables.observeSet(Realm
@@ -145,12 +164,14 @@
 		assertFalse(pojo.hasListeners("set"));
 	}
 
+	@Test
 	public void testObserveSet_ReturnsIBeanObservable() throws Exception {
 		IObservableSet list = PojoObservables.observeSet(Realm.getDefault(),
 				pojo, "set");
 		assertTrue(list instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testObserveSet_DoesNotAttachListeners() throws Exception {
 		IObservableSet observable = PojoObservables.observeSet(Realm
 				.getDefault(), pojo, "set");
@@ -159,6 +180,7 @@
 		assertFalse(pojo.hasListeners("set"));
 	}
 
+	@Test
 	public void testValueFactory_DoesNotAttachListeners() throws Exception {
 		IObservableFactory factory = PojoObservables.valueFactory(Realm
 				.getDefault(), "value");
@@ -170,6 +192,7 @@
 		assertFalse(pojo.hasListeners("value"));
 	}
 
+	@Test
 	public void testListFactory_DoesNotAttachListeners() throws Exception {
 		IObservableFactory factory = PojoObservables.listFactory(Realm
 				.getDefault(), "list", String.class);
@@ -181,6 +204,7 @@
 		assertFalse(pojo.hasListeners("value"));
 	}
 
+	@Test
 	public void testSetFactory_DoesNotAttachListeners() throws Exception {
 		IObservableFactory factory = PojoObservables.setFactory(Realm
 				.getDefault(), propertyName);
@@ -192,6 +216,7 @@
 		assertFalse(pojo.hasListeners("set"));
 	}
 
+	@Test
 	public void testSetFactoryWithElementType_DoesNotAttachListeners()
 			throws Exception {
 		IObservableFactory factory = PojoObservables.setFactory(Realm
@@ -204,6 +229,7 @@
 		assertFalse(pojo.hasListeners("set"));
 	}
 
+	@Test
 	public void testObserveDetailValue_ValueType() {
 		Bean inner = new Bean("string");
 		Bean outer = new Bean(inner);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoPropertiesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoPropertiesTest.java
index 17c3d55..30011fb 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoPropertiesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/PojoPropertiesTest.java
@@ -1,39 +1,47 @@
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.IBeanObservable;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.tests.internal.databinding.beans.Bean;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 public class PojoPropertiesTest extends AbstractDefaultRealmTestCase {
 	private Bean bean;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		bean = new Bean();
 	}
 
+	@Test
 	public void testValue_ValueFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.value(Bean.class, "value")
 				.valueFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testSet_SetFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.set(Bean.class, "set")
 				.setFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testList_ListFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.list(Bean.class, "list")
 				.listFactory().createObservable(bean);
 		assertTrue(observable instanceof IBeanObservable);
 	}
 
+	@Test
 	public void testMap_MapFactory_ProducesIBeanObservable() {
 		IObservable observable = BeanProperties.map(Bean.class, "map")
 				.mapFactory().createObservable(bean);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/SetOnlyJavaBeanTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/SetOnlyJavaBeanTest.java
index c3286f9..0fba45a1 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/SetOnlyJavaBeanTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/beans/SetOnlyJavaBeanTest.java
@@ -12,17 +12,21 @@
 
 package org.eclipse.core.tests.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.UpdateValueStrategy;
 import org.eclipse.core.databinding.beans.PojoProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class SetOnlyJavaBeanTest extends AbstractDefaultRealmTestCase {
 
+	@Test
 	public void testValidationError() throws Exception {
 		Model model = new Model();
 		model.setString("abc");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/NumberToStringConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/NumberToStringConverterTest.java
index 3aba8fa..fbffeac 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/NumberToStringConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/NumberToStringConverterTest.java
@@ -12,31 +12,32 @@
 
 package org.eclipse.core.tests.databinding.conversion;
 
+import static org.junit.Assert.assertEquals;
+
 import java.lang.reflect.Constructor;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.conversion.NumberToStringConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
 /**
  * @since 1.1
  */
-public class NumberToStringConverterTest extends TestCase {
+public class NumberToStringConverterTest {
 	private NumberFormat numberFormat;
 	private NumberFormat integerFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getNumberInstance();
 		integerFormat = NumberFormat.getIntegerInstance();
 	}
 
+	@Test
 	public void testFromTypes() throws Exception {
 		assertEquals("Integer.class", Integer.class, NumberToStringConverter
 				.fromInteger(false).getFromType());
@@ -64,11 +65,13 @@
 				NumberToStringConverter.fromByte(false).getFromType());
 	}
 
+	@Test
 	public void testToTypeIsStringClass() throws Exception {
 		assertEquals(String.class, NumberToStringConverter.fromInteger(false)
 				.getToType());
 	}
 
+	@Test
 	public void testConvertIntegerToString() throws Exception {
 		Integer input = Integer.valueOf(1000);
 		String expected = integerFormat.format(input.longValue());
@@ -79,6 +82,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testConvertDoubleToString() throws Exception {
 		Double input = new Double(1000.1d);
 		String expected = numberFormat.format(input.doubleValue());
@@ -89,6 +93,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testConvertFloatToString() throws Exception {
 		Float input = new Float(1000.1f);
 		String expected = numberFormat.format(input.floatValue());
@@ -99,6 +104,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testConvertLongToString() throws Exception {
 		Long input = new Long(1000l);
 		String expected = integerFormat.format(input.longValue());
@@ -109,6 +115,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testConvertBigIntegerToString() throws Exception {
 		BigInteger input = BigInteger.valueOf(1000);
 		String expected = integerFormat.format(input);
@@ -148,6 +155,7 @@
 		}
 		throw new IllegalArgumentException("ICU not present. Cannot reliably format large BigDecimal values; needed for testing. Java platforms prior to 1.5 fail to format/parse these decimals correctly.");
 	}
+	@Test
 	public void testConvertBigDecimalToString() throws Exception {
 		NumberToStringConverter converter = NumberToStringConverter.fromBigDecimal();
 		// Test 1: Decimal
@@ -176,6 +184,7 @@
 
 	}
 
+	@Test
 	public void testNullSourceConvertsToEmptyString() throws Exception {
 		NumberToStringConverter converter = NumberToStringConverter
 				.fromInteger(false);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/StringToNumberConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/StringToNumberConverterTest.java
index dcacd66..ce1a619 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/StringToNumberConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/conversion/StringToNumberConverterTest.java
@@ -12,32 +12,36 @@
 
 package org.eclipse.core.tests.databinding.conversion;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
 import java.lang.reflect.Constructor;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.conversion.StringToNumberConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
 /**
  * @since 1.1
  */
-public class StringToNumberConverterTest extends TestCase {
+public class StringToNumberConverterTest {
 	private NumberFormat numberFormat;
 	private NumberFormat numberIntegerFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getNumberInstance();
 		numberFormat.setMaximumFractionDigits(305); // Used for BigDecimal test
 		numberFormat.setGroupingUsed(false); // Not really needed
 		numberIntegerFormat = NumberFormat.getIntegerInstance();
 	}
 
+	@Test
 	public void testToTypes() throws Exception {
 		assertEquals("Integer.class", Integer.class, StringToNumberConverter.toInteger(false).getToType());
 		assertEquals("Integer.TYPE", Integer.TYPE, StringToNumberConverter.toInteger(true).getToType());
@@ -55,11 +59,13 @@
 		assertEquals("Byte.TYPE", Byte.TYPE, StringToNumberConverter.toByte(true).getToType());
 	}
 
+	@Test
 	public void testFromTypeIsString() throws Exception {
 		assertEquals(String.class, StringToNumberConverter.toInteger(false)
 				.getFromType());
 	}
 
+	@Test
 	public void testConvertsToBigInteger() throws Exception {
 		BigInteger input = BigInteger.valueOf(1000);
 
@@ -100,6 +106,7 @@
 		throw new IllegalArgumentException("ICU not present. Cannot reliably format large BigDecimal values; needed for testing. Java platforms prior to 1.5 fail to format/parse these decimals correctly.");
 	}
 
+	@Test
 	public void testConvertsToBigDecimal() throws Exception {
 		StringToNumberConverter converter = StringToNumberConverter.toBigDecimal();
 		// Test 1: Decimal
@@ -123,6 +130,7 @@
 		assertEquals("Non-integer BigDecimal", input, result);
 	}
 
+	@Test
 	public void testConvertsToInteger() throws Exception {
 		Integer input = Integer.valueOf(1000);
 
@@ -132,6 +140,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToDouble() throws Exception {
 		Double input = new Double(1000);
 
@@ -142,6 +151,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToLong() throws Exception {
 		Long input = new Long(1000);
 
@@ -152,6 +162,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToFloat() throws Exception {
 		Float input = new Float(1000);
 
@@ -162,6 +173,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertedToIntegerPrimitive() throws Exception {
 		Integer input = Integer.valueOf(1000);
 
@@ -171,6 +183,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToDoublePrimitive() throws Exception {
 		Double input = new Double(1000);
 
@@ -181,6 +194,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToLongPrimitive() throws Exception {
 		Long input = new Long(1000);
 
@@ -191,6 +205,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testConvertsToFloatPrimitive() throws Exception {
 		Float input = new Float(1000);
 
@@ -201,6 +216,7 @@
 		assertEquals(input, result);
 	}
 
+	@Test
 	public void testReturnsNullBoxedTypeForEmptyString() throws Exception {
 		StringToNumberConverter converter = StringToNumberConverter.toInteger(false);
 		try {
@@ -210,6 +226,7 @@
 		}
 	}
 
+	@Test
 	public void testThrowsIllegalArgumentExceptionIfAskedToConvertNonString()
 			throws Exception {
 		StringToNumberConverter converter = StringToNumberConverter.toInteger(false);
@@ -226,6 +243,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testInvalidInteger() throws Exception {
 		StringToNumberConverter converter = StringToNumberConverter
 				.toInteger(false);
@@ -237,6 +255,7 @@
 		}
 	}
 
+	@Test
 	public void testThrowsIllegalArgumentExceptionIfNumberIsOutOfRange() throws Exception {
 		StringToNumberConverter converter = StringToNumberConverter.toInteger(false);
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java
index 6a71590..24b149e 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/AbstractObservableTest.java
@@ -14,8 +14,10 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.AbstractObservable;
 import org.eclipse.core.databinding.observable.DisposeEvent;
@@ -33,6 +35,10 @@
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.databinding.conformance.util.StaleEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for AbstractObservable.
@@ -43,11 +49,13 @@
 	private ObservableStub observable;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		observable = new ObservableStub(Realm.getDefault());
 	}
 
+	@Test
 	public void testStaleListener() throws Exception {
 		assertFalse(observable.hasListeners());
 
@@ -95,6 +103,7 @@
 		assertFalse(observable.hasListeners());
 	}
 
+	@Test
 	public void testChangeListener() throws Exception {
 		assertFalse(observable.hasListeners());
 
@@ -142,6 +151,7 @@
 		assertFalse(observable.hasListeners());
 	}
 
+	@Test
 	public void testHasListenersWithChangeAndStaleListeners() throws Exception {
 		ChangeEventTracker changeListener = new ChangeEventTracker();
 		StaleEventTracker staleListener = new StaleEventTracker();
@@ -175,6 +185,7 @@
 		assertTrue(observable.lastListenerRemoved);
 	}
 
+	@Test
 	public void testFireStaleRealmChecks() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 
@@ -187,6 +198,7 @@
 		});
 	}
 
+	@Test
 	public void testFireChangeRealmChecks() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 
@@ -199,6 +211,7 @@
 		});
 	}
 
+	@Test
 	public void testAddDisposeListener_HasListenersFalse() {
 		IDisposeListener disposeListener = new IDisposeListener() {
 			@Override
@@ -234,13 +247,10 @@
 		assertTrue(observable.lastListenerRemoved);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(AbstractObservableTest.class.getName());
-		suite.addTestSuite(AbstractObservableTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		Delegate delegate = new Delegate();
 		suite.addTest(ObservableContractTest.suite(delegate));
 		suite.addTest(ObservableStaleContractTest.suite(delegate));
-		return suite;
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ChangeSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ChangeSupportTest.java
index ec80eed..ec02169 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ChangeSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ChangeSupportTest.java
@@ -11,6 +11,10 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -23,6 +27,8 @@
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.StaleEvent;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -31,13 +37,14 @@
 public class ChangeSupportTest extends AbstractDefaultRealmTestCase {
 	private ChangeSupportStub changeSupport;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		changeSupport = new ChangeSupportStub(Realm.getDefault());
 	}
 
+	@Test
 	public void testAddDisposeListener_HasListenersFalse() {
 		IDisposeListener disposeListener = new IDisposeListener() {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DecoratingObservableTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DecoratingObservableTest.java
index 040d80b..c9e5f94 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DecoratingObservableTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DecoratingObservableTest.java
@@ -11,12 +11,18 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.observable.AbstractObservable;
 import org.eclipse.core.databinding.observable.DecoratingObservable;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.jface.databinding.conformance.util.DisposeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -26,13 +32,14 @@
 	private IObservable decorated;
 	private DecoratingObservable decorator;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		decorated = new ObservableStub(Realm.getDefault());
 		decorator = new DecoratingObservable(decorated, false);
 	}
 
+	@Test
 	public void testDisposeDecorated_DisposesDecorator() {
 		DisposeEventTracker tracker = DisposeEventTracker.observe(decorator);
 		assertFalse(decorator.isDisposed());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DiffsTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DiffsTest.java
index 8e8623b..11939cf 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DiffsTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/DiffsTest.java
@@ -11,22 +11,25 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
-import java.util.Set;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import junit.framework.TestCase;
+import java.util.Set;
 
 import org.eclipse.core.databinding.observable.set.SetDiff;
 import org.eclipse.core.databinding.observable.value.ValueDiff;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class DiffsTest extends TestCase {
+public class DiffsTest {
 	/**
 	 * Asserts that the {@link SetDiff#toString()} implementation doesn't throw
 	 * a NPE if any of its properties are <code>null</code>.
 	 */
+	@Test
 	public void test_SetDiff() {
 		SetDiff diff = new SetDiff() {
 			@Override
@@ -53,6 +56,7 @@
 	 * throw a NPE if any of its properties are <code>null</code>.
 	 *
 	 */
+	@Test
 	public void test_ValueDiff() {
 		ValueDiff diff = new ValueDiff() {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/Diffs_ListDiffTests.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/Diffs_ListDiffTests.java
index 026a4cf..c4885b1 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/Diffs_ListDiffTests.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/Diffs_ListDiffTests.java
@@ -12,21 +12,25 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.list.ListDiff;
 import org.eclipse.core.databinding.observable.list.ListDiffEntry;
 import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class Diffs_ListDiffTests extends TestCase {
+public class Diffs_ListDiffTests {
+	@Test
 	public void testListDiffEntryToStringDoesNotThrowNPEForNullListDiffEntry() {
 		ListDiffEntry entry = new ListDiffEntry() {
 			@Override
@@ -53,6 +57,7 @@
 		}
 	}
 
+	@Test
 	public void testListDiffToStringDoesNotThrowNPEForNullListDiff() {
 		ListDiff diff = new ListDiff() {
 			@Override
@@ -69,6 +74,7 @@
 		}
 	}
 
+	@Test
 	public void testListDiffToStringDoesNotThrowNPEForNullListDiffEntry() {
 		ListDiff diff = new ListDiff() {
 			@Override
@@ -85,6 +91,7 @@
 		}
 	}
 
+	@Test
 	public void testDiffScenario1() throws Exception {
 		ListDiff diff = diff(null, null);
 		assertEquals(0, diff.getDifferences().length);
@@ -97,23 +104,27 @@
 		return Diffs.computeListDiff(a, b);
 	}
 
+	@Test
 	public void testDiffScenario2() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, null);
 		assertEquals(1, diff.getDifferences().length);
 		assertEntry(diff.getDifferences()[0], false, 0, "a");
 	}
 
+	@Test
 	public void testDiffScenario3() throws Exception {
 		ListDiff diff = diff(null, new String[] { "a" });
 		assertEquals(1, diff.getDifferences().length);
 		assertEntry(diff.getDifferences()[0], true, 0, "a");
 	}
 
+	@Test
 	public void testDiffScenario4() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "a" });
 		assertEquals(0, diff.getDifferences().length);
 	}
 
+	@Test
 	public void testDiffScenario5() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "b" });
 		assertEquals(2, diff.getDifferences().length);
@@ -122,6 +133,7 @@
 		assertEntry(diff.getDifferences()[1], false, 1, "a");
 	}
 
+	@Test
 	public void testDiffScenario6() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "a", "b" });
 
@@ -129,6 +141,7 @@
 		assertEntry(diff.getDifferences()[0], true, 1, "b");
 	}
 
+	@Test
 	public void testDiffScenario7() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "b", "a" });
 
@@ -136,6 +149,7 @@
 		assertEntry(diff.getDifferences()[0], true, 0, "b");
 	}
 
+	@Test
 	public void testDiffScenario8() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "b", "b" });
 
@@ -145,6 +159,7 @@
 		assertEntry(diff.getDifferences()[2], false, 2, "a");
 	}
 
+	@Test
 	public void testDiffScenario9() throws Exception {
 		ListDiff diff = diff(new String[] { "a" }, new String[] { "a", "b", "c" });
 
@@ -153,6 +168,7 @@
 		assertEntry(diff.getDifferences()[1], true, 2, "c");
 	}
 
+	@Test
 	public void testDiffScenario10() throws Exception {
 		ListDiff diff = diff(new String[] { "b" }, new String[] { "a", "b", "c" });
 
@@ -161,6 +177,7 @@
 		assertEntry(diff.getDifferences()[1], true, 2, "c");
 	}
 
+	@Test
 	public void testDiffScenario11() throws Exception {
 		ListDiff diff = diff(new String[] { "c" }, new String[] { "a", "b", "c" });
 
@@ -169,12 +186,14 @@
 		assertEntry(diff.getDifferences()[1], true, 1, "b");
 	}
 
+	@Test
 	public void testDiffScenario12() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "a", "b", "c" });
 
 		assertEquals(0, diff.getDifferences().length);
 	}
 
+	@Test
 	public void testDiffScenario13() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "b", "c" });
 
@@ -182,6 +201,7 @@
 		assertEntry(diff.getDifferences()[0], false, 0, "a");
 	}
 
+	@Test
 	public void testDiffScenarios14() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "a", "c" });
 
@@ -189,6 +209,7 @@
 		assertEntry(diff.getDifferences()[0], false, 1, "b");
 	}
 
+	@Test
 	public void testDiffScenarios15() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "a", "b" });
 
@@ -196,6 +217,7 @@
 		assertEntry(diff.getDifferences()[0], false, 2, "c");
 	}
 
+	@Test
 	public void testDiffScenarios16() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "c", "b", "a" });
 
@@ -206,6 +228,7 @@
 		assertEntry(diff.getDifferences()[3], true, 1, "b");
 	}
 
+	@Test
 	public void testDiffScenarios17() throws Exception {
 		ListDiff diff = diff(new String[] { "a", "b", "c" }, new String[] { "c", "b" });
 
@@ -221,33 +244,40 @@
 		assertEquals("element", element, entry.getElement());
 	}
 
+	@Test
 	public void testComputeListDiff_SingleInsert() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "c" }), Arrays.asList(new Object[] { "a", "b", "c" }));
 	}
 
+	@Test
 	public void testComputeListDiff_SingleAppend() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b" }), Arrays.asList(new Object[] { "a", "b", "c" }));
 	}
 
+	@Test
 	public void testComputeListDiff_SingleRemove() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b", "c" }), Arrays.asList(new Object[] { "a", "b" }));
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b", "c" }), Arrays.asList(new Object[] { "a", "c" }));
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b", "c" }), Arrays.asList(new Object[] { "b", "c" }));
 	}
 
+	@Test
 	public void testComputeListDiff_MoveDown1() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b" }), Arrays.asList(new Object[] { "b", "a" }));
 	}
 
+	@Test
 	public void testComputeListDiff_MoveDown2() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b", "c" }),
 				Arrays.asList(new Object[] { "b", "c", "a" }));
 	}
 
+	@Test
 	public void testComputeListDiff_MoveUp1() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b" }), Arrays.asList(new Object[] { "b", "a" }));
 	}
 
+	@Test
 	public void testComputeListDiff_MoveUp2() {
 		checkComputedListDiff(Arrays.asList(new Object[] { "a", "b", "c" }),
 				Arrays.asList(new Object[] { "c", "a", "b" }));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservableTrackerTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservableTrackerTest.java
index 60d42f4..abd9462 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservableTrackerTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservableTrackerTest.java
@@ -12,6 +12,11 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -28,8 +33,10 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 public class ObservableTrackerTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testRunAndMonitor_GetterCalled() throws Exception {
 		final IObservable observable = new ObservableStub();
 		IObservable[] result = ObservableTracker.runAndMonitor(new Runnable() {
@@ -42,6 +49,7 @@
 		assertSame(observable, result[0]);
 	}
 
+	@Test
 	public void testGetterCalled_ObservableDisposed() throws Exception {
 		try {
 			IObservable observable = new ObservableStub();
@@ -54,6 +62,7 @@
 		}
 	}
 
+	@Test
 	public void testGetterCalled_ObservableRealmNotCurrent() throws Exception {
 		try {
 			IObservable observable = new ObservableStub(new CurrentRealm(false));
@@ -65,6 +74,7 @@
 		}
 	}
 
+	@Test
 	public void testRunAndCollect() throws Exception {
 		final IObservable[] created = new IObservable[1];
 		IObservable[] collected = ObservableTracker.runAndCollect(new Runnable() {
@@ -77,6 +87,7 @@
 		assertSame(created[0], collected[0]);
 	}
 
+	@Test
 	public void testRunAndIgnore_RunAndMonitor() throws Exception {
 		final IObservable observable = new ObservableStub();
 		IObservable[] result = ObservableTracker.runAndMonitor(new Runnable() {
@@ -93,6 +104,7 @@
 		assertEquals(0, result.length);
 	}
 
+	@Test
 	public void testRunAndIgnore_RunAndCollect() throws Exception {
 		IObservable[] result = ObservableTracker.runAndCollect(new Runnable() {
 			@Override
@@ -108,6 +120,7 @@
 		assertEquals(0, result.length);
 	}
 
+	@Test
 	public void testSetIgnore_RunAndMonitor() throws Exception {
 		final IObservable observable = new ObservableStub();
 		IObservable[] result = ObservableTracker.runAndMonitor(new Runnable() {
@@ -121,6 +134,7 @@
 		assertEquals(0, result.length);
 	}
 
+	@Test
 	public void testSetIgnore_RunAndCollect() throws Exception {
 		IObservable[] result = ObservableTracker.runAndCollect(new Runnable() {
 			@Override
@@ -133,6 +147,7 @@
 		assertEquals(0, result.length);
 	}
 
+	@Test
 	public void testSetIgnore_Nested_RunAndCollect() throws Exception {
 		final List<ObservableStub> list = new ArrayList<ObservableStub>();
 
@@ -159,6 +174,7 @@
 		assertEquals(expected, collected);
 	}
 
+	@Test
 	public void testSetIgnore_Nested_RunAndMonitor() throws Exception {
 		final IObservable[] observables = { new ObservableStub(), new ObservableStub(), new ObservableStub(),
 				new ObservableStub(), new ObservableStub() };
@@ -186,6 +202,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testSetIgnore_RunAndMonitor_UnmatchedIgnore_LogsError() {
 		final List<IStatus> log = new ArrayList<IStatus>();
 		Policy.setLog(new ILogger() {
@@ -209,6 +226,7 @@
 		assertTrue(status.getMessage().indexOf("setIgnore") != -1);
 	}
 
+	@Test
 	public void testSetIgnore_RunAndCollect_UnmatchedIgnore_LogsError() {
 		final List<IStatus> log = new ArrayList<IStatus>();
 		Policy.setLog(new ILogger() {
@@ -232,6 +250,7 @@
 		assertTrue(status.getMessage().indexOf("setIgnore") != -1);
 	}
 
+	@Test
 	public void testSetIgnore_UnmatchedUnignore() {
 		try {
 			ObservableTracker.setIgnore(false);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservablesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservablesTest.java
index 0a7f8c7..5c187fb 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservablesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/ObservablesTest.java
@@ -11,6 +11,9 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -19,8 +22,10 @@
 import org.eclipse.core.databinding.observable.list.ObservableList;
 import org.eclipse.core.internal.databinding.observable.UnmodifiableObservableList;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 public class ObservablesTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testUnmodifableObservableListExceptions() throws Exception {
 		try {
 			Observables.unmodifiableObservableList(null);
@@ -29,6 +34,7 @@
 		}
 	}
 
+	@Test
 	public void testUnmodifiableObservableList() throws Exception {
 		IObservableList unmodifiable = Observables.unmodifiableObservableList(new ObservableListStub(
 				new ArrayList<Object>(0), String.class));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/RealmTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/RealmTest.java
index 4985fde..42ef788 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/RealmTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/RealmTest.java
@@ -11,16 +11,18 @@
 
 package org.eclipse.core.tests.databinding.observable;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
-public class RealmTest extends TestCase {
+public class RealmTest {
+	@Test
 	public void testSetDefaultWithRunnable() throws Exception {
 		Realm oldRealm = new CurrentRealm(true);
 		final Realm newRealm = new CurrentRealm(true);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java
index 7d4facc..d37f30d 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/AbstractObservableListTest.java
@@ -13,14 +13,12 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.ChangeEvent;
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.DisposeEvent;
@@ -41,24 +39,30 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
-public class AbstractObservableListTest extends TestCase {
+public class AbstractObservableListTest {
 	private AbstractObservableListStub list;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 		list = new AbstractObservableListStub();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testFireChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -68,6 +72,7 @@
 		});
 	}
 
+	@Test
 	public void testFireStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -77,6 +82,7 @@
 		});
 	}
 
+	@Test
 	public void testFireListChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -86,6 +92,7 @@
 		});
 	}
 
+	@Test
 	public void testMove_FiresListChanges() throws Exception {
 		list = new MutableObservableListStub();
 		final Object element = new Object();
@@ -115,6 +122,7 @@
 		assertEquals(1, entry.getPosition());
 	}
 
+	@Test
 	public void testMove_MovesElement() throws Exception {
 		list = new MutableObservableListStub();
 		final Object element0 = new Object();
@@ -128,6 +136,7 @@
 		assertEquals(element0, list.get(1));
 	}
 
+	@Test
 	public void testAddListChangeListener_AfterDispose() {
 		list.dispose();
 		list.addListChangeListener(new IListChangeListener() {
@@ -138,6 +147,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveListChangeListener_AfterDispose() {
 		list.dispose();
 		list.removeListChangeListener(new IListChangeListener() {
@@ -148,6 +158,7 @@
 		});
 	}
 
+	@Test
 	public void testAddChangeListener_AfterDispose() {
 		list.dispose();
 		list.addChangeListener(new IChangeListener() {
@@ -158,6 +169,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveChangeListener_AfterDispose() {
 		list.dispose();
 		list.removeChangeListener(new IChangeListener() {
@@ -168,6 +180,7 @@
 		});
 	}
 
+	@Test
 	public void testAddStaleListener_AfterDispose() {
 		list.dispose();
 		list.addStaleListener(new IStaleListener() {
@@ -178,6 +191,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveStaleListener_AfterDispose() {
 		list.dispose();
 		list.removeStaleListener(new IStaleListener() {
@@ -188,6 +202,7 @@
 		});
 	}
 
+	@Test
 	public void testAddDisposeListener_AfterDispose() {
 		list.dispose();
 		list.addDisposeListener(new IDisposeListener() {
@@ -198,6 +213,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveDisposeListener_AfterDispose() {
 		list.dispose();
 		list.removeDisposeListener(new IDisposeListener() {
@@ -208,16 +224,14 @@
 		});
 	}
 
+	@Test
 	public void testHasListeners_AfterDispose() {
 		list.dispose();
 		list.hasListeners();
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(AbstractObservableListTest.class.getName());
-		suite.addTestSuite(AbstractObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ComputedListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ComputedListTest.java
index 3d11032..659f20a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ComputedListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ComputedListTest.java
@@ -12,12 +12,14 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.AbstractObservable;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -30,23 +32,30 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 public class ComputedListTest extends AbstractDefaultRealmTestCase {
 	ComputedListStub list;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		list = new ComputedListStub();
 		list.size(); // Force list to compute
 	}
 
+	@Test
 	public void testDependency_Staleness() {
 		assertFalse(list.isStale());
 		list.dependency.fireStale();
 		assertTrue(list.isStale());
 	}
 
+	@Test
 	public void testDependency_FiresListChange() {
 		assertEquals(list.nextComputation, list);
 
@@ -60,6 +69,7 @@
 		assertEquals(expectedList, list);
 	}
 
+	@Test
 	public void testDependency_NoStaleEventIfAlreadyDirty() {
 		list.dependency.fireChange();
 		list.addStaleListener(new IStaleListener() {
@@ -71,6 +81,7 @@
 		list.dependency.fireStale();
 	}
 
+	@Test
 	public void testDependency_ListChangeEventFiresOnlyWhenNotDirty() {
 		ListChangeEventTracker tracker = ListChangeEventTracker.observe(list);
 
@@ -135,11 +146,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ComputedListTest.class.getName());
-		suite.addTestSuite(ComputedListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/DecoratingObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/DecoratingObservableListTest.java
index 748d12a..2b13093 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/DecoratingObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/DecoratingObservableListTest.java
@@ -16,9 +16,6 @@
 
 import java.util.ArrayList;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -28,16 +25,15 @@
 import org.eclipse.jface.databinding.conformance.MutableObservableListContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 3.2
  *
  */
 public class DecoratingObservableListTest {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DecoratingObservableListTest.class
-				.getName());
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffTest.java
index e635edf..bde2010 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffTest.java
@@ -12,53 +12,61 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
 
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.list.ListDiff;
 import org.eclipse.core.databinding.observable.list.ListDiffEntry;
 import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests for ListDiff class
  *
  * @since 1.1
  */
-public class ListDiffTest extends TestCase {
+public class ListDiffTest {
 	ListDiffVisitorStub visitor;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		visitor = new ListDiffVisitorStub();
 	}
 
+	@Test
 	public void testAccept_Add() {
 		createListDiff(add(0, "element")).accept(visitor);
 		assertEquals("add(0,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_Remove() {
 		createListDiff(remove(0, "element")).accept(visitor);
 		assertEquals("remove(0,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_MoveForward_RemoveBeforeAdd() {
 		createListDiff(remove(0, "element"), add(1, "element")).accept(visitor);
 		assertEquals("move(0,1,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_MoveForward_AddBeforeRemove() {
 		// Add at index 2 then remove at index 0 leaves the element at index 1
 		createListDiff(add(2, "element"), remove(0, "element")).accept(visitor);
 		assertEquals("move(0,1,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_MoveBackward_RemoveBeforeAdd() {
 		createListDiff(remove(4, "element"), add(1, "element")).accept(visitor);
 		assertEquals("move(4,1,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_MoveBackward_AddBeforeRemove() {
 		// Element is originally at position 4 in this test, but we must remove
 		// it at 5 since the adding it at 1 first changes the index
@@ -66,18 +74,21 @@
 		assertEquals("move(4,1,element)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_Replace_RemoveBeforeAdd() {
 		createListDiff(remove(0, "element0"), add(0, "element1")).accept(
 				visitor);
 		assertEquals("replace(0,element0,element1)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_Replace_AddBeforeRemove() {
 		createListDiff(add(0, "element1"), remove(1, "element0")).accept(
 				visitor);
 		assertEquals("replace(0,element0,element1)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_AllPatterns() {
 		createListDiff(new ListDiffEntry[] {
 		// Replace (remove before add)
@@ -110,6 +121,7 @@
 						+ "add(12,element9), remove(12,element9)", visitor.log);
 	}
 
+	@Test
 	public void testAccept_MoveDetectionUsesEqualityNotSameness() {
 		Object element0 = new String("element");
 		Object element1 = new String("element");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffVisitorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffVisitorTest.java
index e86f3e2..8abcc7b 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffVisitorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ListDiffVisitorTest.java
@@ -11,24 +11,26 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
-import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
+import static org.junit.Assert.assertEquals;
 
-import junit.framework.TestCase;
+import org.eclipse.core.databinding.observable.list.ListDiffVisitor;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests for ListDiffVisitor class
  *
  * @since 1.1
  */
-public class ListDiffVisitorTest extends TestCase {
+public class ListDiffVisitorTest {
 	ListDiffVisitorStub visitor;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		visitor = new ListDiffVisitorStub();
 	}
 
+	@Test
 	public void testHandleMove_DelegatesByDefault() {
 		visitor.handleMove(0, 1, "element");
 		assertEquals(
@@ -36,6 +38,7 @@
 				"remove(0,element), add(1,element)", visitor.log);
 	}
 
+	@Test
 	public void testHandleReplace_DelegatesByDefault() {
 		visitor.handleReplace(2, "oldElement", "newElement");
 		assertEquals(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/MultiListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/MultiListTest.java
index 03504a6..f664fd8 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/MultiListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/MultiListTest.java
@@ -11,12 +11,14 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.IStaleListener;
@@ -29,18 +31,24 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 public class MultiListTest extends AbstractDefaultRealmTestCase {
 	MultiListStub multiList;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		WritableList[] lists = new WritableList[] { new WritableList(),
 				new WritableList() };
 		multiList = new MultiListStub(Realm.getDefault(), lists);
 	}
 
+	@Test
 	public void testIsStale_FollowsSublist() {
 		assertFalse(multiList.isStale());
 		multiList.subLists[0].setStale(true);
@@ -49,6 +57,7 @@
 		assertFalse(multiList.isStale());
 	}
 
+	@Test
 	public void testDependency_FiresListChange() {
 		List expectedList = new ArrayList();
 		assertEquals(expectedList, multiList);
@@ -59,6 +68,7 @@
 		assertEquals(expectedList, multiList);
 	}
 
+	@Test
 	public void testStaleEvent_NoFireEventIfAlreadyStale() {
 		multiList.subLists[0].setStale(true);
 		multiList.addStaleListener(new IStaleListener() {
@@ -70,6 +80,7 @@
 		multiList.subLists[1].setStale(true);
 	}
 
+	@Test
 	public void testModifySubList_FiresListChangeEventFromMultiList() {
 		ListChangeEventTracker tracker = ListChangeEventTracker
 				.observe(multiList);
@@ -132,11 +143,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(MultiListTest.class.getName());
-		suite.addTestSuite(MultiListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java
index 6f3a80e..5a335c6 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/ObservableListTest.java
@@ -13,14 +13,12 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -34,25 +32,31 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
-public class ObservableListTest extends TestCase {
+public class ObservableListTest {
 	private ObservableListStub list;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 
 		list = new ObservableListStub(new ArrayList(0), Object.class);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testIsStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -62,6 +66,7 @@
 		});
 	}
 
+	@Test
 	public void testSetStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -71,6 +76,7 @@
 		});
 	}
 
+	@Test
 	public void testMove_FiresListChanges() throws Exception {
 		list = new MutableObservableListStub();
 		final Object element = new Object();
@@ -100,6 +106,7 @@
 		assertEquals(1, entry.getPosition());
 	}
 
+	@Test
 	public void testMove_MovesElement() throws Exception {
 		list = new MutableObservableListStub();
 		final Object element0 = new Object();
@@ -113,11 +120,8 @@
 		assertEquals(element0, list.get(1));
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ObservableListTest.class.getName());
-		suite.addTestSuite(ObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */ static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java
index 3c96967..4654bae 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/list/WritableListTest.java
@@ -13,6 +13,10 @@
 
 package org.eclipse.core.tests.databinding.observable.list;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -29,26 +33,28 @@
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.swt.widgets.Display;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
-public class WritableListTest extends TestCase {
+public class WritableListTest {
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testSetRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -60,6 +66,7 @@
 		});
 	}
 
+	@Test
 	public void testAddRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -70,6 +77,7 @@
 		});
 	}
 
+	@Test
 	public void testAddByIndexRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -80,6 +88,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAllRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -90,6 +99,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAllByIndexRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -100,6 +110,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveRealmChecks() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 		final WritableList list = new WritableList();
@@ -115,6 +126,7 @@
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testRemoveByIndexRealmChecks() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 		final WritableList list = new WritableList();
@@ -131,6 +143,7 @@
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testRemoveAllRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -141,6 +154,7 @@
 		});
 	}
 
+	@Test
 	public void testRetainAllRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -151,6 +165,7 @@
 		});
 	}
 
+	@Test
 	public void testClearRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -161,6 +176,7 @@
 		});
 	}
 
+	@Test
 	public void testNullElementType() throws Exception {
 		RealmTester.setDefault(DisplayRealm.getRealm(Display.getDefault()));
 		WritableList writableList = new WritableList();
@@ -170,6 +186,7 @@
 		assertNull(writableList.getElementType());
 	}
 
+	@Test
 	public void testWithElementType() throws Exception {
 		RealmTester.setDefault(DisplayRealm.getRealm(Display.getDefault()));
 
@@ -180,6 +197,7 @@
 		assertEquals(elementType, list.getElementType());
 	}
 
+	@Test
 	public void testListConstructorsDoNotCopy_1() {
 		RealmTester.setDefault(new CurrentRealm(true));
 		List list = new ArrayList(Arrays.asList(new Object[] { "a", "b", "c" }));
@@ -190,6 +208,7 @@
 		assertEquals(3, wlist.size());
 	}
 
+	@Test
 	public void testListConstructorsDoNotCopy_2() {
 		List list = new ArrayList(Arrays.asList(new Object[] { "a", "b", "c" }));
 		WritableList wlist = new WritableList(new CurrentRealm(true), list,
@@ -200,6 +219,7 @@
 		assertEquals(3, wlist.size());
 	}
 
+	@Test
 	public void testCollectionConstructorsCopy_1() {
 		RealmTester.setDefault(new CurrentRealm(true));
 		List list = new ArrayList(Arrays.asList(new Object[] { "a", "b", "c" }));
@@ -210,6 +230,7 @@
 		assertEquals(2, wlist.size());
 	}
 
+	@Test
 	public void testCollectionConstructorsCopy_2() {
 		List list = new ArrayList(Arrays.asList(new Object[] { "a", "b", "c" }));
 		WritableList wlist = new WritableList(new CurrentRealm(true),
@@ -220,11 +241,8 @@
 		assertEquals(2, wlist.size());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(WritableListTest.class.getName());
-		suite.addTestSuite(WritableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java
index c20ec9d..bcedcb7 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/AbstractObservableMapTest.java
@@ -14,8 +14,6 @@
 
 import java.util.Set;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.observable.ChangeEvent;
 import org.eclipse.core.databinding.observable.DisposeEvent;
 import org.eclipse.core.databinding.observable.IChangeListener;
@@ -28,24 +26,28 @@
 import org.eclipse.core.databinding.observable.map.MapDiff;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
-public class AbstractObservableMapTest extends TestCase {
+public class AbstractObservableMapTest {
 	private AbstractObservableMapStub map;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 		map = new AbstractObservableMapStub();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testIsStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -55,6 +57,7 @@
 		});
 	}
 
+	@Test
 	public void testSetStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -64,6 +67,7 @@
 		});
 	}
 
+	@Test
 	public void testFireStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -73,6 +77,7 @@
 		});
 	}
 
+	@Test
 	public void testFireChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -82,6 +87,7 @@
 		});
 	}
 
+	@Test
 	public void testFireMapChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -91,6 +97,7 @@
 		});
 	}
 
+	@Test
 	public void testAddListChangeListener_AfterDispose() {
 		map.dispose();
 		map.addMapChangeListener(new IMapChangeListener() {
@@ -101,6 +108,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveListChangeListener_AfterDispose() {
 		map.dispose();
 		map.removeMapChangeListener(new IMapChangeListener() {
@@ -111,6 +119,7 @@
 		});
 	}
 
+	@Test
 	public void testAddChangeListener_AfterDispose() {
 		map.dispose();
 		map.addChangeListener(new IChangeListener() {
@@ -121,6 +130,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveChangeListener_AfterDispose() {
 		map.dispose();
 		map.removeChangeListener(new IChangeListener() {
@@ -131,6 +141,7 @@
 		});
 	}
 
+	@Test
 	public void testAddStaleListener_AfterDispose() {
 		map.dispose();
 		map.addStaleListener(new IStaleListener() {
@@ -141,6 +152,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveStaleListener_AfterDispose() {
 		map.dispose();
 		map.removeStaleListener(new IStaleListener() {
@@ -151,6 +163,7 @@
 		});
 	}
 
+	@Test
 	public void testAddDisposeListener_AfterDispose() {
 		map.dispose();
 		map.addDisposeListener(new IDisposeListener() {
@@ -161,6 +174,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveDisposeListener_AfterDispose() {
 		map.dispose();
 		map.removeDisposeListener(new IDisposeListener() {
@@ -171,6 +185,7 @@
 		});
 	}
 
+	@Test
 	public void testHasListeners_AfterDispose() {
 		map.dispose();
 		map.hasListeners();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/BidiObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/BidiObservableMapTest.java
index 703b9f9..3ac6b9b 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/BidiObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/BidiObservableMapTest.java
@@ -11,6 +11,11 @@
 
 package org.eclipse.core.tests.databinding.observable.map;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -21,6 +26,8 @@
 import org.eclipse.core.databinding.observable.map.WritableMap;
 import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -34,8 +41,8 @@
 	private Object value1;
 	private Object value2;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		wrappedMap = new WritableMap();
 		bidiMap = new BidiObservableMap(wrappedMap);
@@ -45,6 +52,7 @@
 		value2 = new Object();
 	}
 
+	@Test
 	public void testConstructor_NullArgument() {
 		try {
 			new BidirectionalMap(null);
@@ -69,6 +77,7 @@
 		// assuming tearDown() afterward
 	}
 
+	@Test
 	public void testGetKeys_Empty() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -78,6 +87,7 @@
 		});
 	}
 
+	@Test
 	public void testGetKeys_NullKey() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -89,6 +99,7 @@
 		});
 	}
 
+	@Test
 	public void testGetKeys_NullValue() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -99,6 +110,7 @@
 		});
 	}
 
+	@Test
 	public void testGetKeys_SinglePut() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -110,6 +122,7 @@
 		});
 	}
 
+	@Test
 	public void testGetKeys_ReplaceValue() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -126,6 +139,7 @@
 		});
 	}
 
+	@Test
 	public void testGetKeys_MultipleKeysWithSameValue() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
@@ -141,6 +155,7 @@
 		});
 	}
 
+	@Test
 	public void testContainsValue_PutAndRemove() throws Exception {
 		withAndWithoutListeners(new Runnable() {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/CompositeMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/CompositeMapTest.java
index 45cd537..b154b9e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/CompositeMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/CompositeMapTest.java
@@ -11,6 +11,10 @@
 
 package org.eclipse.core.tests.databinding.observable.map;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.lang.reflect.Method;
 import java.util.Collections;
 
@@ -26,6 +30,8 @@
 import org.eclipse.jface.examples.databinding.model.SimpleCart;
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -47,8 +53,8 @@
 		}
 	}
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		persons = new WritableSet();
 		first = BeansObservables.observeMap(persons,
@@ -62,6 +68,7 @@
 		});
 	}
 
+	@Test
 	public void testAddToFirstMap() {
 		MapChangeEventTracker tracker = new MapChangeEventTracker();
 		composedMap.addMapChangeListener(tracker);
@@ -78,6 +85,7 @@
 		assertEquals(Integer.valueOf(42), composedMap.get(newPerson));
 	}
 
+	@Test
 	public void testAddSharedToFirstMap() {
 		SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
 		person1.getCart().setNumItems(42);
@@ -98,6 +106,7 @@
 		assertEquals(Integer.valueOf(42), composedMap.get(person1));
 	}
 
+	@Test
 	public void testRemoveFromFirstMap() {
 		MapChangeEventTracker tracker = new MapChangeEventTracker();
 		SimplePerson newPerson = new SimplePerson("p1", "a1", "c1", "s1");
@@ -116,6 +125,7 @@
 		assertFalse("newPerson should be removed", composedMap.containsKey(newPerson));
 	}
 
+	@Test
 	public void testRemoveSharedFromFirstMap() {
 		SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
 		person1.getCart().setNumItems(42);
@@ -138,6 +148,7 @@
 		assertEquals(Integer.valueOf(42), composedMap.get(person1));
 	}
 
+	@Test
 	public void testChangeInFirstMap() {
 		SimplePerson person1 = new SimplePerson("p1", "a1", "c1", "s1");
 		person1.getCart().setNumItems(42);
@@ -156,6 +167,7 @@
 		assertEquals(Integer.valueOf(0), composedMap.get(person1));
 	}
 
+	@Test
 	public void testChangeInFirstMapToShared() {
 		SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
 		person0.getCart().setNumItems(13);
@@ -177,6 +189,7 @@
 		assertEquals(Integer.valueOf(13), composedMap.get(person1));
 	}
 
+	@Test
 	public void testChangeInFirstMapFromShared() {
 		SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
 		person0.getCart().setNumItems(13);
@@ -198,6 +211,7 @@
 		assertEquals(Integer.valueOf(0), composedMap.get(person1));
 	}
 
+	@Test
 	public void testChangeInSecondMap() {
 		SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
 		person0.getCart().setNumItems(13);
@@ -216,6 +230,7 @@
 		assertEquals(Integer.valueOf(42), composedMap.get(person0));
 	}
 
+	@Test
 	public void testDispose() {
 		SimplePerson person0 = new SimplePerson("p0", "a0", "c0", "s0");
 		person0.getCart().setNumItems(13);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ComputedObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ComputedObservableMapTest.java
index a328e6a..031eee3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ComputedObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ComputedObservableMapTest.java
@@ -12,6 +12,11 @@
 
 package org.eclipse.core.tests.databinding.observable.map;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
@@ -23,6 +28,8 @@
 import org.eclipse.core.tests.internal.databinding.beans.Bean;
 import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -34,8 +41,8 @@
 	private String propertyName;
 	private Bean bean;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		keySet = new WritableSet();
 		map = new ComputedObservableMapStub(keySet);
@@ -43,32 +50,38 @@
 		bean = new Bean("a");
 	}
 
+	@Test
 	public void testGet_ElementNotInKeySet() {
 		assertNull(map.get(bean));
 	}
 
+	@Test
 	public void testGet_ElementInKeySet() {
 		keySet.add(bean);
 		assertEquals("a", map.get(bean));
 	}
 
+	@Test
 	public void testPut_ElementNotInKeySet() {
 		assertNull(map.put(bean, "b"));
 		assertEquals("a", bean.getValue());
 	}
 
+	@Test
 	public void testPut_ElementInKeySet() {
 		keySet.add(bean);
 		assertEquals("a", map.put(bean, "b"));
 		assertEquals("b", map.get(bean));
 	}
 
+	@Test
 	public void testAddToKeySet_BeforeFirstListenerAdded_DoesNotAddListenerToKey() {
 		assertFalse(bean.hasListeners(propertyName));
 		keySet.add(bean);
 		assertFalse(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testAddToKeySet_AfterFirstListenerAdded_AddsListenerToKey() {
 		ChangeEventTracker.observe(map);
 		assertFalse(bean.hasListeners(propertyName));
@@ -76,6 +89,7 @@
 		assertTrue(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemoveFromKeySet_RemovesListenersFromKey() {
 		ChangeEventTracker.observe(map);
 		keySet.add(bean);
@@ -84,6 +98,7 @@
 		assertFalse(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemoveLastListener_DoNotDiscardKeySet() {
 		IChangeListener listener = new IChangeListener() {
 			@Override
@@ -97,6 +112,7 @@
 		assertEquals(1, map.size());
 	}
 
+	@Test
 	public void testDispose_RemoveListenersFromKeySetElements() {
 		ChangeEventTracker.observe(map);
 		keySet.add(bean);
@@ -105,12 +121,14 @@
 		assertFalse(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testDisposeKeySet_DisposesMap() {
 		assertFalse(map.isDisposed());
 		keySet.dispose();
 		assertTrue(map.isDisposed());
 	}
 
+	@Test
 	public void testDisposeKeySet_RemoveListenersFromKeySetElements() {
 		ChangeEventTracker.observe(map);
 		keySet.add(bean);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java
index faf61f8..0d03dda 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/ObservableMapTest.java
@@ -13,36 +13,41 @@
 
 package org.eclipse.core.tests.databinding.observable.map;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.observable.map.MapDiff;
 import org.eclipse.core.databinding.observable.map.ObservableMap;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class ObservableMapTest extends TestCase {
+public class ObservableMapTest {
 	ObservableMapStub map;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 		map = new ObservableMapStub(new HashMap());
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testDisposeMapChangeListeners() throws Exception {
 		MapChangeEventTracker listener = MapChangeEventTracker.observe(map);
 
@@ -61,6 +66,7 @@
 				listener.count);
 	}
 
+	@Test
 	public void testIsStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -70,6 +76,7 @@
 		});
 	}
 
+	@Test
 	public void testSetStaleRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -79,6 +86,7 @@
 		});
 	}
 
+	@Test
 	public void testFireMapChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -88,6 +96,7 @@
 		});
 	}
 
+	@Test
 	public void testEquals() {
 		assertTrue(map.equals(Collections.EMPTY_MAP));
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java
index 0a0bcd3..4e6f855 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/map/WritableMapTest.java
@@ -12,13 +12,14 @@
 
 package org.eclipse.core.tests.databinding.observable.map;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.map.MapChangeEvent;
 import org.eclipse.core.databinding.observable.map.MapDiff;
@@ -26,22 +27,26 @@
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class WritableMapTest extends TestCase {
-	@Override
-	protected void setUp() throws Exception {
+public class WritableMapTest {
+	@Before
+	public void setUp() throws Exception {
 		RealmTester.setDefault(new CurrentRealm(true));
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		RealmTester.setDefault(null);
 	}
 
+	@Test
 	public void testPutRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -52,6 +57,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -68,6 +74,7 @@
 		});
 	}
 
+	@Test
 	public void testClearRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -78,6 +85,7 @@
 		});
 	}
 
+	@Test
 	public void testPutAllRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -88,6 +96,7 @@
 		});
 	}
 
+	@Test
 	public void testPutWithExistingKeyMapChangeEvent() throws Exception {
 		WritableMap map = new WritableMap();
 		String key = "key";
@@ -113,6 +122,7 @@
 		assertEquals(newValue, event.diff.getNewValue(key));
 	}
 
+	@Test
 	public void testPutSameValue_NoMapChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
@@ -130,6 +140,7 @@
 
 	}
 
+	@Test
 	public void testPutNullKey_SingleAdditionChangeEvent() {
 		WritableMap map = new WritableMap();
 		MapChangeEventTracker tracker = MapChangeEventTracker.observe(map);
@@ -148,6 +159,7 @@
 		assertEquals(value, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testRemoveNullKey_SingleRemovalChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = null;
@@ -166,6 +178,7 @@
 		assertEquals(value, diff.getOldValue(key));
 	}
 
+	@Test
 	public void testPutNullValue_SingleAdditionChangeEvent() {
 		WritableMap map = new WritableMap();
 
@@ -185,6 +198,7 @@
 		assertEquals(value, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testPutNullOverNonNullValue_SingleChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
@@ -205,6 +219,7 @@
 		assertEquals(newValue, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testPutNonNullOverNullValue_SingleChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
@@ -225,6 +240,7 @@
 		assertEquals(newValue, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testRemoveNullValue_SingleRemovalChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
@@ -243,6 +259,7 @@
 		assertEquals(value, diff.getOldValue(key));
 	}
 
+	@Test
 	public void testPutAllNullValue_SingleAdditionChangeEvent() {
 		WritableMap map = new WritableMap();
 
@@ -262,6 +279,7 @@
 		assertEquals(value, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testPutAllNullValueToNonNullValue_SingleChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
@@ -284,6 +302,7 @@
 		assertEquals(newValue, diff.getNewValue(key));
 	}
 
+	@Test
 	public void testPutAllNonNullValueToNullValue_SingleChangeEvent() {
 		WritableMap map = new WritableMap();
 		Object key = new Object();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java
index 0c47aba..7fd659c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/AbstractObservableSetTest.java
@@ -15,10 +15,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -28,13 +24,13 @@
 import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  */
-public class AbstractObservableSetTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(AbstractObservableSetTest.class.getName());
+public class AbstractObservableSetTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableCollectionContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ComputedSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ComputedSetTest.java
index c46989f..4adf14e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ComputedSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ComputedSetTest.java
@@ -11,13 +11,15 @@
 
 package org.eclipse.core.tests.databinding.observable.set;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.AbstractObservable;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -30,23 +32,30 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.SetChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 public class ComputedSetTest extends AbstractDefaultRealmTestCase {
 	ComputedSetStub set;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		set = new ComputedSetStub();
 		set.size(); // Force set to compute
 	}
 
+	@Test
 	public void testDependency_Staleness() {
 		assertFalse(set.isStale());
 		set.dependency.fireStale();
 		assertTrue(set.isStale());
 	}
 
+	@Test
 	public void testDependency_FiresSetChange() {
 		assertEquals(set.nextComputation, set);
 
@@ -58,6 +67,7 @@
 		assertEquals(Collections.singleton(element), set);
 	}
 
+	@Test
 	public void testDependency_NoStaleEventIfAlreadyDirty() {
 		set.dependency.fireChange();
 		set.addStaleListener(new IStaleListener() {
@@ -69,6 +79,7 @@
 		set.dependency.fireStale();
 	}
 
+	@Test
 	public void testDependency_SetChangeEventFiresOnlyWhenNotDirty() {
 		SetChangeEventTracker tracker = SetChangeEventTracker.observe(set);
 
@@ -133,11 +144,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ComputedSetTest.class.getName());
-		suite.addTestSuite(ComputedSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableCollectionContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/DecoratingObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/DecoratingObservableSetTest.java
index bdd4892..db9c219 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/DecoratingObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/DecoratingObservableSetTest.java
@@ -16,9 +16,6 @@
 
 import java.util.Collections;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -28,17 +25,15 @@
 import org.eclipse.jface.databinding.conformance.MutableObservableCollectionContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 3.2
  *
  */
 public class DecoratingObservableSetTest {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DecoratingObservableSetTest.class
-				.getName());
-		suite.addTest(MutableObservableCollectionContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(MutableObservableCollectionContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java
index 6be0f0f..4f6fe63 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/ObservableSetTest.java
@@ -15,10 +15,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -29,14 +25,14 @@
 import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 1.1
  */
-public class ObservableSetTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ObservableSetTest.class.getName());
+public class ObservableSetTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableCollectionContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java
index 9589c94..2abc978 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/UnionSetTest.java
@@ -12,10 +12,6 @@
 
 package org.eclipse.core.tests.databinding.observable.set;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -25,13 +21,13 @@
 import org.eclipse.jface.databinding.conformance.ObservableCollectionContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  */
-public class UnionSetTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(UnionSetTest.class.getName());
+public class UnionSetTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableCollectionContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java
index cfb6102..e9ac0fb 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/set/WritableSetTest.java
@@ -11,10 +11,10 @@
  ******************************************************************************/
 package org.eclipse.core.tests.databinding.observable.set;
 
-import java.util.Collections;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import java.util.Collections;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -24,10 +24,14 @@
 import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  */
 public class WritableSetTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testWithElementType() throws Exception {
 		Object elementType = String.class;
 		WritableSet set = WritableSet.withElementType(elementType);
@@ -36,11 +40,8 @@
 		assertEquals(elementType, set.getElementType());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(WritableSetTest.class.getName());
-		suite.addTestSuite(WritableSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java
index fcf2d5d..9010f71 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractObservableValueTest.java
@@ -11,18 +11,33 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
 import org.eclipse.core.databinding.observable.value.ValueDiff;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
-public class AbstractObservableValueTest extends TestCase {
+public class AbstractObservableValueTest {
+
+	@Before
+	public void setUp() throws Exception {
+		RealmTester.setDefault(new CurrentRealm(true));
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		RealmTester.setDefault(null);
+	}
+
+	@Test
 	public void testSetValueRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
@@ -37,6 +52,7 @@
 		});
 	}
 
+	@Test
 	public void testSetValueInvokesDoSetValue() throws Exception {
 		class ValueStub extends ObservableValueStub {
 			int doSetValue;
@@ -58,6 +74,7 @@
 		assertEquals("doSetValue should have been invoked", 1, stub.doSetValue);
 	}
 
+	@Test
 	public void testFireValueChangeRealmChecks() throws Exception {
 		RealmTester.exerciseCurrent(new Runnable() {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java
index 5b83d74..677899b 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/AbstractVetoableValueTest.java
@@ -11,19 +11,34 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.AbstractVetoableValue;
 import org.eclipse.core.databinding.observable.value.ValueDiff;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
-public class AbstractVetoableValueTest extends TestCase {
-    public void testSetValueInvokesDoSetApprovedValue() throws Exception {
+public class AbstractVetoableValueTest {
+
+	@Before
+	public void setUp() throws Exception {
+		RealmTester.setDefault(new CurrentRealm(true));
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		RealmTester.setDefault(null);
+	}
+
+    @Test
+	public void testSetValueInvokesDoSetApprovedValue() throws Exception {
         class VetoableValue extends VetoableValueStub {
             int count;
             Object value;
@@ -50,7 +65,8 @@
         assertEquals(value, vetoableValue.value);
     }
 
-    public void testFireValueChangeRealmChecks() throws Exception {
+    @Test
+	public void testFireValueChangeRealmChecks() throws Exception {
     	RealmTester.exerciseCurrent(new Runnable() {
 			@Override
 			public void run() {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/ComputedValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/ComputedValueTest.java
index 48e50cf..850b9b1 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/ComputedValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/ComputedValueTest.java
@@ -13,6 +13,12 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -20,13 +26,15 @@
 import org.eclipse.core.databinding.observable.value.ComputedValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.0
  *
  */
 public class ComputedValueTest extends AbstractDefaultRealmTestCase {
-    public void testValueType() throws Exception {
+    @Test
+	public void testValueType() throws Exception {
         ComputedValue cv = new ComputedValue(Integer.TYPE) {
             @Override
 			protected Object calculate() {
@@ -46,7 +54,8 @@
         assertNull(cv.getValueType());
     }
 
-    public void test_getValue() throws Exception {
+    @Test
+	public void test_getValue() throws Exception {
         ComputedValue cv = new ComputedValue() {
             @Override
 			protected Object calculate() {
@@ -56,7 +65,8 @@
         assertEquals("Calculated value should be 42", Integer.valueOf(42), cv.getValue());
     }
 
-    public void testDependencyValueChange() throws Exception {
+    @Test
+	public void testDependencyValueChange() throws Exception {
         final WritableValue value = new WritableValue(Integer.valueOf(42), Integer.TYPE);
 
         ComputedValue cv = new ComputedValue() {
@@ -84,7 +94,8 @@
         }
     }
 
-    public void testHookAndUnhookDependantObservables() throws Exception {
+    @Test
+	public void testHookAndUnhookDependantObservables() throws Exception {
         final List values = new ArrayList();
 
         ComputedValue cv = new ComputedValue() {
@@ -124,7 +135,8 @@
         assertFalse("because value2 is not a part of the calculation the listeners should have been removed", value2.hasListeners());
     }
 
-    public void testSetValueUnsupportedOperationException() throws Exception {
+    @Test
+	public void testSetValueUnsupportedOperationException() throws Exception {
         ComputedValue cv = new ComputedValue() {
             @Override
 			protected Object calculate() {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DateAndTimeObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DateAndTimeObservableValueTest.java
index b494b47..9739c71 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DateAndTimeObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DateAndTimeObservableValueTest.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
 import java.util.Calendar;
 import java.util.Date;
 
@@ -19,6 +22,8 @@
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.0
@@ -30,8 +35,8 @@
 	private IObservableValue time;
 	private IObservableValue dateAndTime;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		date = WritableValue.withValueType(Date.class);
@@ -66,18 +71,21 @@
 		return calendar.getTime();
 	}
 
+	@Test
 	public void testGetValue_NullDateNullResult() {
 		date.setValue(null);
 		time.setValue(time(12, 27, 17));
 		assertNull(dateAndTime.getValue());
 	}
 
+	@Test
 	public void testGetValue_NullTimeClearsTime() {
 		date.setValue(date(2009, 3, 3));
 		time.setValue(null);
 		assertEquals(timestamp(2009, 3, 3, 0, 0, 0), dateAndTime.getValue());
 	}
 
+	@Test
 	public void testGetValue() {
 		date.setValue(timestamp(2009, 3, 3, 12, 30, 33));
 
@@ -86,6 +94,7 @@
 		assertEquals(timestamp(2009, 3, 3, 23, 59, 59), dateAndTime.getValue());
 	}
 
+	@Test
 	public void testSetValue() {
 		date.setValue(date(2009, 3, 3));
 		time.setValue(time(12, 32, 55));
@@ -96,6 +105,7 @@
 		assertEquals(time(2, 3, 5), time.getValue());
 	}
 
+	@Test
 	public void testSetValue_NullNullsDateClearsTime() {
 		date.setValue(date(2009, 3, 3));
 		time.setValue(time(12, 25, 34));
@@ -105,6 +115,7 @@
 		assertEquals(time(0, 0, 0), time.getValue());
 	}
 
+	@Test
 	public void testSetValue_PreserveTimeOfDateAndDateOfTime() {
 		date.setValue(timestamp(2009, 3, 3, 12, 32, 55));
 		time.setValue(timestamp(2009, 3, 3, 12, 32, 55));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DecoratingObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DecoratingObservableValueTest.java
index aca3431..4c93761 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DecoratingObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DecoratingObservableValueTest.java
@@ -11,9 +11,6 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.DecoratingObservableValue;
@@ -22,16 +19,15 @@
 import org.eclipse.jface.databinding.conformance.MutableObservableValueContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 3.2
  *
  */
 public class DecoratingObservableValueTest {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DecoratingObservableValueTest.class
-				.getName());
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DuplexingObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DuplexingObservableValueTest.java
index 226d59a..c848935 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DuplexingObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/DuplexingObservableValueTest.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
 import java.util.ArrayList;
 import java.util.Collection;
 
@@ -19,6 +22,8 @@
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.databinding.observable.value.DuplexingObservableValue;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.0
@@ -28,12 +33,13 @@
 	private IObservableList list;
 	private DuplexingObservableValue observable;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		list = new WritableList(new ArrayList(), String.class);
 	}
 
+	@Test
 	public void testValueType_InheritFromTargetList() throws Exception {
 		observable = new DuplexingObservableValue(list) {
 			@Override
@@ -46,6 +52,7 @@
 				String.class, observable.getValueType());
 	}
 
+	@Test
 	public void testValueType_ProvidedInConstructor() throws Exception {
 		observable = new DuplexingObservableValue(list, Object.class) {
 			@Override
@@ -57,6 +64,7 @@
 				Object.class, observable.getValueType());
 	}
 
+	@Test
 	public void test_getValue() throws Exception {
 		observable = DuplexingObservableValue.withDefaults(list, null,
 				"<Multiple Values>");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/SelectObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/SelectObservableValueTest.java
index 188e4c1..d0923d1 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/SelectObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/SelectObservableValueTest.java
@@ -11,9 +11,6 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -23,17 +20,15 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 3.2
  *
  */
 public class SelectObservableValueTest extends AbstractDefaultRealmTestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(SelectObservableValueTest.class
-				.getName());
-		// suite.addTestSuite(SelectObservableValueValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java
index 831221f..072e0c9 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/observable/value/WritableValueTest.java
@@ -13,8 +13,9 @@
 
 package org.eclipse.core.tests.databinding.observable.value;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -25,6 +26,9 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -35,6 +39,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testConstructor() throws Exception {
 		WritableValue value = new WritableValue(DisplayRealm.getRealm(Display
 				.getDefault()));
@@ -42,6 +47,7 @@
 		assertNull(value.getValueType());
 	}
 
+	@Test
 	public void testWithValueType() throws Exception {
 		Object elementType = String.class;
 		WritableValue value = WritableValue.withValueType(elementType);
@@ -50,11 +56,8 @@
 		assertEquals(elementType, value.getValueType());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(WritableValueTest.class.getName());
-		suite.addTestSuite(WritableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/util/PolicyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/util/PolicyTest.java
index 7fb365b..2f603ea 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/util/PolicyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/util/PolicyTest.java
@@ -11,27 +11,31 @@
  ******************************************************************************/
 package org.eclipse.core.tests.databinding.util;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.util.ILogger;
 import org.eclipse.core.databinding.util.Policy;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class PolicyTest extends TestCase {
+public class PolicyTest {
 
+	@Test
 	public void testConstructor() {
 		// cover the constructor too
 		new Policy();
 	}
 
+	@Test
 	public void testDummyLog() {
 		ILogger oldLog = Policy.getLog();
 		PrintStream oldErr = System.err;
@@ -60,6 +64,7 @@
 		}
 	}
 
+	@Test
 	public void testCustomLog() {
 		ILogger oldLog = Policy.getLog();
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/MultiValidatorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/MultiValidatorTest.java
index 250444d..700e371 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/MultiValidatorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/MultiValidatorTest.java
@@ -13,6 +13,13 @@
 
 package org.eclipse.core.tests.databinding.validation;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -39,14 +46,16 @@
 import org.eclipse.jface.databinding.conformance.util.StaleEventTracker;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 public class MultiValidatorTest extends AbstractDefaultRealmTestCase {
 	private DependencyObservableValue dependency;
 	private MultiValidator validator;
 	private IObservableValue validationStatus;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		dependency = new DependencyObservableValue(null, IStatus.class);
 		validator = new MultiValidator() {
@@ -58,6 +67,7 @@
 		validationStatus = validator.getValidationStatus();
 	}
 
+	@Test
 	public void testConstructor_NullArgument() {
 		try {
 			new MultiValidator(null) {
@@ -71,11 +81,13 @@
 		}
 	}
 
+	@Test
 	public void testGetValidationStatus_NullResultYieldsOKStatus() {
 		IStatus status = (IStatus) validationStatus.getValue();
 		assertTrue(status.isOK()); // null -> OK
 	}
 
+	@Test
 	public void testGetValidationStatus_ExceptionThrownYieldsErrorStatus() {
 		final RuntimeException e = new RuntimeException("message");
 		validator = new MultiValidator() {
@@ -87,18 +99,21 @@
 		assertEquals(ValidationStatus.error("message", e), validator.getValidationStatus().getValue());
 	}
 
+	@Test
 	public void testGetValidationStatus_TracksWithDependency() {
 		IStatus newStatus = ValidationStatus.error("error");
 		dependency.setValue(newStatus);
 		assertEquals(newStatus, validationStatus.getValue());
 	}
 
+	@Test
 	public void testInit_AddsValidationProducer() {
 		DataBindingContext dbc = new DataBindingContext();
 		dbc.addValidationStatusProvider(validator);
 		assertTrue(dbc.getValidationStatusProviders().contains(validator));
 	}
 
+	@Test
 	public void testObserveValidatedValue_NullArgument() {
 		try {
 			validator.observeValidatedValue(null);
@@ -107,6 +122,7 @@
 		}
 	}
 
+	@Test
 	public void testObserveValidatedValue_WrongRealm() {
 		Realm otherRealm = new CurrentRealm(true);
 		try {
@@ -116,6 +132,7 @@
 		}
 	}
 
+	@Test
 	public void testObserveValidatedValue_ReturnValue() {
 		WritableValue target = new WritableValue();
 		ValidatedObservableValue validated = (ValidatedObservableValue) validator.observeValidatedValue(target);
@@ -135,6 +152,7 @@
 		assertFalse(validated.isStale());
 	}
 
+	@Test
 	public void testBug237884_DisposeCausesNPE() {
 		MultiValidator validator = new MultiValidator() {
 			@Override
@@ -149,11 +167,13 @@
 		}
 	}
 
+	@Test
 	public void testBug237884_MultipleDispose() {
 		validator.dispose();
 		validator.dispose();
 	}
 
+	@Test
 	public void testBug237884_Comment3_ValidationStatusAsDependencyCausesStackOverflow() {
 		dependency = new DependencyObservableValue(new Object(), Object.class);
 		validator = new MultiValidator() {
@@ -188,6 +208,7 @@
 		}
 	}
 
+	@Test
 	public void testBug237884_ValidationStatusListenerCausesLoopingDependency() {
 		validationStatus.addChangeListener(new IChangeListener() {
 			@Override
@@ -201,6 +222,7 @@
 		assertFalse(validator.getTargets().contains(validationStatus));
 	}
 
+	@Test
 	public void testRevalidate() {
 		// Use this as an easy way to inject a validation status into the
 		// validator without using an observable value.
@@ -234,6 +256,7 @@
 		assertSame(status[0], validator.getValidationStatus().getValue());
 	}
 
+	@Test
 	public void testBug237884_ValidationStatusAccessDuringValidationCausesLoopingDependency() {
 		validator = new MultiValidator() {
 			@Override
@@ -247,6 +270,7 @@
 		assertFalse(validator.getTargets().contains(validationStatus));
 	}
 
+	@Test
 	public void testBug240590_ValidationStatusSetWhileTrackingDependencies() {
 		final IObservableValue noDependency = new WritableValue();
 		validationStatus.addValueChangeListener(new IValueChangeListener() {
@@ -265,6 +289,7 @@
 		assertFalse(validator.getTargets().contains(noDependency));
 	}
 
+	@Test
 	public void testValidationStaleness() {
 		ValueChangeEventTracker validationChangeCounter = ValueChangeEventTracker.observe(validationStatus);
 
@@ -303,6 +328,7 @@
 		assertEquals(1, validationStaleCounter.count);
 	}
 
+	@Test
 	public void testStatusValueChangeWhileValidationStale() {
 		// Change to a stale state.
 		dependency.setStale(true);
@@ -318,6 +344,7 @@
 		assertEquals(dependency.getValue(), validationStatus.getValue());
 	}
 
+	@Test
 	public void testValidationStatusBecomesStaleThroughNewDependency() {
 		final DependencyObservableValue nonStaleDependency = new DependencyObservableValue(ValidationStatus.ok(),
 				IStatus.class);
@@ -351,6 +378,7 @@
 		assertEquals(1, validationStaleCounter.count);
 	}
 
+	@Test
 	public void testBug251003_CompareDependenciesByIdentity() {
 		DependencyObservable dependency1 = new DependencyObservable();
 		DependencyObservable dependency2 = new DependencyObservable();
@@ -382,6 +410,7 @@
 		assertSame(dependency2, targets.get(0));
 	}
 
+	@Test
 	public void testBug251003_MissingDependencies() {
 		final WritableList emptyListDependency = new WritableList();
 		validator = new MultiValidator() {
@@ -399,6 +428,7 @@
 		assertTrue(validator.getTargets().contains(emptyListDependency));
 	}
 
+	@Test
 	public void testBug357568_MultiValidatorTargetAsDependency() {
 		validator = new MultiValidator() {
 			@Override
@@ -414,6 +444,7 @@
 		dependency.setValue(ValidationStatus.info("foo"));
 	}
 
+	@Test
 	public void testBug357568_ValidationStatusAsDependency() {
 		validator = new MultiValidator() {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/ValidationStatusTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/ValidationStatusTest.java
index 7458687..05a7a11 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/ValidationStatusTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/validation/ValidationStatusTest.java
@@ -11,15 +11,17 @@
 
 package org.eclipse.core.tests.databinding.validation;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.runtime.IStatus;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class ValidationStatusTest extends TestCase {
+public class ValidationStatusTest {
+	@Test
 	public void testEqualsAndHashCode() throws Exception {
 		String message = "error";
 		Exception e = new IllegalArgumentException();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingMessagesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingMessagesTest.java
index 84f559a..22e5bff 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingMessagesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingMessagesTest.java
@@ -1,7 +1,9 @@
 package org.eclipse.core.tests.internal.databinding;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.internal.databinding.BindingMessages;
+import org.junit.Test;
 
 /*******************************************************************************
  * Copyright (c) 2007 IBM Corporation and others.
@@ -18,13 +20,15 @@
  * @since 3.2
  *
  */
-public class BindingMessagesTest extends TestCase {
+public class BindingMessagesTest {
+	@Test
 	public void testFormatString() throws Exception {
 		String key = "Validate_NumberOutOfRangeError";
 		String result = BindingMessages.formatString(key, new Object[] {"1", "2"});
 		assertFalse("key should not be returned", key.equals(result));
 	}
 
+	@Test
 	public void testFormatStringForKeyNotFound() throws Exception {
 		String key = "key_that_does_not_exist";
 		String result = BindingMessages.formatString(key, null);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingStatusTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingStatusTest.java
index a616429..8e581df 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingStatusTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/BindingStatusTest.java
@@ -1,11 +1,15 @@
 package org.eclipse.core.tests.internal.databinding;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 
 import org.eclipse.core.databinding.util.Policy;
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.internal.databinding.BindingStatus;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.junit.Before;
+import org.junit.Test;
 
 /*******************************************************************************
  * Copyright (c) 2007 IBM Corporation and others.
@@ -21,16 +25,15 @@
 /**
  * @since 1.1
  */
-public class BindingStatusTest extends TestCase {
+public class BindingStatusTest {
 	private BindingStatus bindingStatus;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		bindingStatus = BindingStatus.ok();
 	}
 
+	@Test
 	public void testMessageIsFromStatus() throws Exception {
 		String message = "error message";
 		IStatus status = ValidationStatus.error(message);
@@ -39,6 +42,7 @@
 		assertEquals(message, bindingStatus.getMessage());
 	}
 
+	@Test
 	public void testExceptionIsFromStatus() throws Exception {
 		IllegalArgumentException e = new IllegalArgumentException();
 		Status status = new Status(0, Policy.JFACE_DATABINDING, 0, "", e);
@@ -47,6 +51,7 @@
 		assertEquals(e, bindingStatus.getException());
 	}
 
+	@Test
 	public void testPluginIsFromStatus() throws Exception {
 		String plugin = "test";
 		Status status = new Status(0, plugin, 0, "", null);
@@ -55,6 +60,7 @@
 		assertEquals(plugin, bindingStatus.getPlugin());
 	}
 
+	@Test
 	public void testCodeIsFromStatus() throws Exception {
 		int code = 1;
 		Status status = new Status(0, Policy.JFACE_DATABINDING, code, "", null);
@@ -63,6 +69,7 @@
 		assertEquals(code, status.getCode());
 	}
 
+	@Test
 	public void testSeverityIsFromStatus() throws Exception {
 		IStatus status = ValidationStatus.error("");
 
@@ -70,6 +77,7 @@
 		assertEquals(IStatus.ERROR, status.getSeverity());
 	}
 
+	@Test
 	public void testLowerSeverityDoesNotOverwriteGreaterSeverity() throws Exception {
 		String info = "info";
 		String error = "error";
@@ -88,6 +96,7 @@
 		assertEquals(IStatus.INFO, children[1].getSeverity());
 	}
 
+	@Test
 	public void testEqual() throws Exception {
 		BindingStatus status1 = BindingStatus.ok();
 		BindingStatus status2 = BindingStatus.ok();
@@ -95,6 +104,7 @@
 		assertEquals(status1, status2);
 	}
 
+	@Test
 	public void testNotEqual() throws Exception {
 		BindingStatus status1 = BindingStatus.ok();
 		BindingStatus status2 = BindingStatus.ok();
@@ -103,6 +113,7 @@
 		assertFalse(status1.equals(status2));
 	}
 
+	@Test
 	public void testHashCode() throws Exception {
 		BindingStatus status1 = BindingStatus.ok();
 		BindingStatus status2 = BindingStatus.ok();
@@ -110,6 +121,7 @@
 		assertEquals(status1.hashCode(), status2.hashCode());
 	}
 
+	@Test
 	public void testOkInitializesStatus() throws Exception {
 		BindingStatus status = BindingStatus.ok();
 		assertEquals(Policy.JFACE_DATABINDING, status.getPlugin());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/ConverterValuePropertyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/ConverterValuePropertyTest.java
index 3f123c2..7a19e02 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/ConverterValuePropertyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/ConverterValuePropertyTest.java
@@ -11,12 +11,17 @@
 
 package org.eclipse.core.tests.internal.databinding;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.BindingProperties;
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.databinding.property.value.IValueProperty;
 import org.eclipse.core.internal.databinding.ConverterValueProperty;
 import org.eclipse.core.internal.databinding.conversion.ObjectToStringConverter;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests for the {@link ConverterValueProperty} class.
@@ -25,19 +30,21 @@
 
 	private IConverter converter;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		converter = new ObjectToStringConverter(Integer.class);
 	}
 
+	@Test
 	public void testGetValue() {
 		IValueProperty property = BindingProperties.convertedValue(converter);
 
 		assertEquals("123", property.getValue(Integer.valueOf(123)));
 	}
 
+	@Test
 	public void testGetValueForNullSource() {
 		// The converter converts null to "".
 		IValueProperty property = BindingProperties.convertedValue(converter);
@@ -46,6 +53,7 @@
 		assertEquals("", property.getValue(null));
 	}
 
+	@Test
 	public void testSetValue() {
 		IValueProperty property = BindingProperties.convertedValue(converter);
 
@@ -57,6 +65,7 @@
 		}
 	}
 
+	@Test
 	public void testGetValueType() {
 		IValueProperty property = BindingProperties.convertedValue(converter);
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/DifferentRealmsBindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/DifferentRealmsBindingTest.java
index 9a342e9..602bfae 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/DifferentRealmsBindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/DifferentRealmsBindingTest.java
@@ -10,6 +10,8 @@
  ******************************************************************************/
 package org.eclipse.core.tests.internal.databinding;
 
+import static org.junit.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -22,10 +24,11 @@
 import org.eclipse.core.databinding.util.Policy;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.tests.databinding.observable.ThreadRealm;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-import junit.framework.TestCase;
-
-public class DifferentRealmsBindingTest extends TestCase {
+public class DifferentRealmsBindingTest {
 
 	ThreadRealm targetAndModelRealm = new ThreadRealm();
 	ThreadRealm validationRealm = new ThreadRealm();
@@ -42,8 +45,8 @@
 		}
 	};
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		errorStatusses.clear();
 		new Thread() {
 			@Override
@@ -58,11 +61,12 @@
 		Policy.setLog(logger);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		dbc.dispose();
 	}
 
+	@Test
 	public void testListBindingValidationRealm() throws Throwable {
 		final ObservableList model = new WritableList(targetAndModelRealm);
 		final ObservableList target = new WritableList(targetAndModelRealm);
@@ -74,6 +78,7 @@
 		assertTrue(errorStatusses.toString(), errorStatusses.isEmpty());
 	}
 
+	@Test
 	public void testSetBindingValidationRealm() throws Throwable {
 		final ObservableSet model = new WritableSet(targetAndModelRealm);
 		final ObservableSet target = new WritableSet(targetAndModelRealm);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentityMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentityMapTest.java
index 73d5648..1b5e0bc 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentityMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentityMapTest.java
@@ -14,6 +14,13 @@
 
 package org.eclipse.core.tests.internal.databinding;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -21,23 +28,22 @@
 import java.util.Map;
 import java.util.Set;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.internal.databinding.identity.IdentityMap;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.2
  */
-public class IdentityMapTest extends TestCase {
+public class IdentityMapTest {
 	IdentityMap map;
 
 	Object key;
 	Object value;
 	Map.Entry entry;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		map = new IdentityMap();
 		key = new Object();
 		value = new Object();
@@ -59,6 +65,7 @@
 		};
 	}
 
+	@Test
 	public void testConstructor_NullComparer() {
 		try {
 			new IdentityMap(null);
@@ -67,6 +74,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_NullCollection() {
 		try {
 			new IdentityMap(null);
@@ -75,6 +83,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_ContainsAllEntries() {
 		Map<Object, Object> toCopy = new HashMap<Object, Object>();
 		toCopy.put(new Object(), new Object());
@@ -82,18 +91,21 @@
 		assertEquals(toCopy, map);
 	}
 
+	@Test
 	public void testIsEmpty() {
 		assertTrue(map.isEmpty());
 		map.put(key, value);
 		assertFalse(map.isEmpty());
 	}
 
+	@Test
 	public void testSize() {
 		assertEquals(0, map.size());
 		map.put(key, value);
 		assertEquals(1, map.size());
 	}
 
+	@Test
 	public void testClear() {
 		map.put(key, value);
 		assertFalse(map.isEmpty());
@@ -101,12 +113,14 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testGet() {
 		assertNull(map.get(key));
 		map.put(key, value);
 		assertEquals(value, map.get(key));
 	}
 
+	@Test
 	public void testContainsKey() {
 		String key1 = new String("key");
 		String key2 = new String("key"); // equal but distinct instances
@@ -116,12 +130,14 @@
 		assertFalse(map.containsKey(key2));
 	}
 
+	@Test
 	public void testContainsValue() {
 		assertFalse(map.containsValue(value));
 		map.put(key, value);
 		assertTrue(map.containsValue(value));
 	}
 
+	@Test
 	public void testPutAll() {
 		Map<Object, Object> other = new HashMap<Object, Object>();
 		other.put(key, value);
@@ -133,6 +149,7 @@
 		assertEquals(value, map.get(key));
 	}
 
+	@Test
 	public void testRemove() {
 		map.put(key, value);
 		assertTrue(map.containsKey(key));
@@ -140,6 +157,7 @@
 		assertFalse(map.containsKey(key));
 	}
 
+	@Test
 	public void testValues() {
 		Collection<?> values = map.values();
 		assertTrue(values.isEmpty());
@@ -153,6 +171,7 @@
 		assertTrue(map.values().isEmpty());
 	}
 
+	@Test
 	public void testKeySet() {
 		Set<Object> keySet = map.keySet();
 		assertTrue(keySet.isEmpty());
@@ -165,6 +184,7 @@
 		assertTrue(keySet.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Add() {
 		try {
 			map.keySet().add(key);
@@ -173,6 +193,7 @@
 		}
 	}
 
+	@Test
 	public void testKeySet_AddAll() {
 		try {
 			map.keySet().addAll(Collections.singleton(key));
@@ -181,6 +202,7 @@
 		}
 	}
 
+	@Test
 	public void testKeySet_Clear() {
 		map.put(key, value);
 		Set<Object> keySet = map.keySet();
@@ -190,6 +212,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Contains() {
 		Set<Object> keySet = map.keySet();
 		assertFalse(keySet.contains(key));
@@ -197,6 +220,7 @@
 		assertTrue(keySet.contains(key));
 	}
 
+	@Test
 	public void testKeySet_ContainsAll() {
 		Set<Object> keySet = map.keySet();
 		assertFalse(keySet.containsAll(Collections.singleton(key)));
@@ -204,6 +228,7 @@
 		assertTrue(keySet.containsAll(Collections.singleton(key)));
 	}
 
+	@Test
 	public void testKeySet_IsEmpty() {
 		Set<Object> keySet = map.keySet();
 		assertTrue(keySet.isEmpty());
@@ -211,6 +236,7 @@
 		assertFalse(keySet.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Iterator() {
 		map.put(key, value);
 		Iterator<Object> iterator = map.keySet().iterator();
@@ -224,6 +250,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testKeySet_Remove() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -231,6 +258,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_RemoveAll() {
 		map.put(key, value);
 		Set<Object> keySet = map.keySet();
@@ -240,6 +268,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_RetainAll() {
 		map.put(key, value);
 		Set<Object> keySet = map.keySet();
@@ -249,6 +278,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Size() {
 		Set<Object> keySet = map.keySet();
 		assertEquals(0, keySet.size());
@@ -258,6 +288,7 @@
 		assertEquals(0, keySet.size());
 	}
 
+	@Test
 	public void testKeySet_ToArray() {
 		Set<Object> keySet = map.keySet();
 		map.put(key, value);
@@ -266,6 +297,7 @@
 		assertSame(key, array[0]);
 	}
 
+	@Test
 	public void testKeySet_ToArrayWithObjectArray() {
 		key = new String("key");
 		map.put(key, value);
@@ -274,6 +306,7 @@
 		assertSame(key, array[0]);
 	}
 
+	@Test
 	public void testKeySet_Equals() {
 		Set<Object> keySet = map.keySet();
 		assertFalse(keySet.equals(null));
@@ -284,6 +317,7 @@
 		assertTrue(keySet.equals(Collections.singleton(key)));
 	}
 
+	@Test
 	public void testKeySet_HashCode() {
 		Set<Object> keySet = map.keySet();
 		assertEquals(0, keySet.hashCode());
@@ -292,6 +326,7 @@
 		assertEquals(hash, keySet.hashCode());
 	}
 
+	@Test
 	public void testEntrySet() {
 		Set<Object> entrySet = map.entrySet();
 		assertTrue(entrySet.isEmpty());
@@ -306,6 +341,7 @@
 		assertTrue(entrySet.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Add() {
 		try {
 			map.entrySet().add(entry);
@@ -314,6 +350,7 @@
 		}
 	}
 
+	@Test
 	public void testEntrySet_AddAll() {
 		try {
 			map.entrySet().addAll(Collections.EMPTY_SET);
@@ -322,6 +359,7 @@
 		}
 	}
 
+	@Test
 	public void testEntrySet_Clear() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -329,6 +367,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Contains() {
 		map.put(key, value);
 		Set<Object> entrySet = map.entrySet();
@@ -337,6 +376,7 @@
 		assertFalse(entrySet.contains(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_ContainsAll() {
 		Set<Object> entrySet = map.entrySet();
 		assertFalse(entrySet.containsAll(Collections.singleton(new MapEntryStub(key, value))));
@@ -346,6 +386,7 @@
 		assertTrue(entrySet.containsAll(Collections.singleton(new MapEntryStub(key, value))));
 	}
 
+	@Test
 	public void testEntrySet_IsEmpty() {
 		Set<Object> entrySet = map.entrySet();
 		assertTrue(entrySet.isEmpty());
@@ -353,6 +394,7 @@
 		assertFalse(entrySet.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Iterator() {
 		map.put(key, value);
 		Iterator<Object> iterator = map.entrySet().iterator();
@@ -366,6 +408,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testEntrySet_Remove() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -374,6 +417,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_RemoveAll() {
 		Set<Object> entrySet = map.entrySet();
 		assertFalse(entrySet.removeAll(Collections.EMPTY_SET));
@@ -384,6 +428,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_RetainAll() {
 		Set<Object> entrySet = map.entrySet();
 		assertFalse(entrySet.retainAll(Collections.EMPTY_SET));
@@ -396,6 +441,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Size() {
 		Set<Object> entrySet = map.entrySet();
 		assertEquals(0, entrySet.size());
@@ -403,6 +449,7 @@
 		assertEquals(1, entrySet.size());
 	}
 
+	@Test
 	public void testEntrySet_ToArray() {
 		Set<Object> entrySet = map.entrySet();
 		assertEquals(0, entrySet.toArray().length);
@@ -413,6 +460,7 @@
 		assertTrue(array[0].equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_ToArrayWithObjectArray() {
 		Set<Object> entrySet = map.entrySet();
 		assertEquals(0, entrySet.toArray(new Object[0]).length);
@@ -423,6 +471,7 @@
 		assertTrue(array[0].equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_Equals() {
 		Set<Object> entrySet = map.entrySet();
 		assertFalse(entrySet.equals(null));
@@ -436,6 +485,7 @@
 		assertTrue(entrySet.equals(Collections.singleton(new MapEntryStub(key, value))));
 	}
 
+	@Test
 	public void testEntrySet_HashCode() {
 		// hash formula mandated by Map contract
 		Set<Object> entrySet = map.entrySet();
@@ -446,6 +496,7 @@
 		assertEquals(hash, entrySet.hashCode());
 	}
 
+	@Test
 	public void testEntrySet_Entry_SetValue() {
 		map.put(key, value);
 
@@ -458,6 +509,7 @@
 		assertEquals(newValue, map.get(key));
 	}
 
+	@Test
 	public void testEntrySet_Entry_Equals() {
 		map.put(key, value);
 
@@ -467,6 +519,7 @@
 		assertTrue(entry.equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_Entry_HashCode() {
 		map.put(key, value);
 
@@ -475,6 +528,7 @@
 		assertEquals(hash, map.entrySet().iterator().next().hashCode());
 	}
 
+	@Test
 	public void testEquals() {
 		assertFalse(map.equals(null));
 		assertTrue(map.equals(map));
@@ -491,6 +545,7 @@
 		assertTrue(map.equals(other));
 	}
 
+	@Test
 	public void testHashCode() {
 		assertEquals(0, map.hashCode());
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentitySetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentitySetTest.java
index 6a51941..37d1e91 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentitySetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/IdentitySetTest.java
@@ -13,28 +13,35 @@
 
 package org.eclipse.core.tests.internal.databinding;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.internal.databinding.identity.IdentitySet;
 import org.eclipse.jface.internal.databinding.viewers.ViewerElementSet;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.2
  */
-public class IdentitySetTest extends TestCase {
+public class IdentitySetTest {
 	IdentitySet set;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		set = new IdentitySet();
 	}
 
+	@Test
 	public void testConstructor_NullComparer() {
 		try {
 			new ViewerElementSet(null);
@@ -43,6 +50,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_NullCollection() {
 		try {
 			new ViewerElementSet(null);
@@ -51,12 +59,14 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_AddsAllElements() {
 		Collection<Object> toCopy = Collections.singleton(new Object());
 		set = new IdentitySet(toCopy);
 		assertTrue(set.containsAll(toCopy));
 	}
 
+	@Test
 	public void testAdd_ContainsHonorsComparer() {
 		Object o1 = new String("string");
 		Object o2 = new String("string"); // distinct instances
@@ -69,6 +79,7 @@
 		assertFalse(set.contains(o2));
 	}
 
+	@Test
 	public void testAdd_FilterDuplicateElements() {
 		Object o = new Object();
 
@@ -79,6 +90,7 @@
 		assertTrue(set.contains(o));
 	}
 
+	@Test
 	public void testAddAll_ContainsAllHonorsComparer() {
 		String o1 = new String("o1");
 		String o2 = new String("o2");
@@ -90,6 +102,7 @@
 		assertFalse(set.containsAll(Collections.singleton(new String("o2"))));
 	}
 
+	@Test
 	public void testAddAll_FiltersDuplicateElements() {
 		Object o = new Object();
 		set.add(o);
@@ -97,6 +110,7 @@
 		assertFalse(set.addAll(Collections.singleton(o)));
 	}
 
+	@Test
 	public void testClear() {
 		set.add(new Object());
 		assertEquals(1, set.size());
@@ -105,12 +119,14 @@
 		assertEquals(0, set.size());
 	}
 
+	@Test
 	public void testIsEmpty() {
 		assertTrue(set.isEmpty());
 		set.add(new Object());
 		assertFalse(set.isEmpty());
 	}
 
+	@Test
 	public void testIterator() {
 		Object o = new Object();
 		set.add(o);
@@ -126,6 +142,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testRemove() {
 		Object o = new Object();
 		assertFalse(set.remove(o));
@@ -137,6 +154,7 @@
 		assertFalse(set.contains(o));
 	}
 
+	@Test
 	public void testRemoveAll() {
 		assertFalse(set.removeAll(Collections.EMPTY_SET));
 
@@ -152,6 +170,7 @@
 		assertFalse(set.contains(o2));
 	}
 
+	@Test
 	public void testRetainAll() {
 		Object o1 = new Object();
 		Object o2 = new Object();
@@ -170,6 +189,7 @@
 		assertFalse(set.contains(o1));
 	}
 
+	@Test
 	public void testSize() {
 		assertEquals(0, set.size());
 
@@ -181,6 +201,7 @@
 		assertEquals(0, set.size());
 	}
 
+	@Test
 	public void testToArray() {
 		assertEquals(0, set.toArray().length);
 
@@ -189,6 +210,7 @@
 		assertTrue(Arrays.equals(new Object[] { o }, set.toArray()));
 	}
 
+	@Test
 	public void testToArrayWithObjectArray() {
 		Object o = new String("unique");
 		set.add(o);
@@ -198,6 +220,7 @@
 		assertSame(o, array[0]);
 	}
 
+	@Test
 	public void testEquals() {
 		assertTrue(set.equals(set));
 		assertFalse(set.equals(null));
@@ -212,6 +235,7 @@
 		assertFalse(set.equals(Collections.singleton(distinct)));
 	}
 
+	@Test
 	public void testHashCode() {
 		// Hash code implementation is mandated
 		assertEquals(0, set.hashCode());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/QueueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/QueueTest.java
index 1e62fb1..ee324f2 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/QueueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/QueueTest.java
@@ -11,23 +11,29 @@
 
 package org.eclipse.core.tests.internal.databinding;
 
-import org.eclipse.core.internal.databinding.observable.Queue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import junit.framework.TestCase;
+import org.eclipse.core.internal.databinding.observable.Queue;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class QueueTest extends TestCase {
+public class QueueTest {
 
 	private Queue queue;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		this.queue = new Queue();
 	}
 
+	@Test
 	public void testIsEmpty() {
 		assertTrue(queue.isEmpty());
 		queue.enqueue("foo");
@@ -40,6 +46,7 @@
 		assertTrue(queue.isEmpty());
 	}
 
+	@Test
 	public void testEnqueueAndDequeue() {
 		try {
 			queue.dequeue();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableListDecoratorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableListDecoratorTest.java
index 2bc1d6f..266ee67 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableListDecoratorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableListDecoratorTest.java
@@ -12,11 +12,9 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
-import java.beans.PropertyDescriptor;
+import static org.junit.Assert.assertSame;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import java.beans.PropertyDescriptor;
 
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.IObservable;
@@ -29,19 +27,22 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.3
  */
-public class BeanObservableListDecoratorTest extends TestCase {
+public class BeanObservableListDecoratorTest {
 	private Bean bean;
 	private PropertyDescriptor propertyDescriptor;
 	private IObservableList observableList;
 	private BeanObservableListDecorator decorator;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 
 		bean = new Bean();
 		propertyDescriptor = new PropertyDescriptor(
@@ -51,23 +52,23 @@
 		decorator = new BeanObservableListDecorator(observableList, propertyDescriptor);
 	}
 
+	@Test
 	public void testGetDelegate() throws Exception {
 		assertSame(observableList, decorator.getDecorated());
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertSame(bean, decorator.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertSame(propertyDescriptor, decorator.getPropertyDescriptor());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(BeanObservableListDecoratorTest.class.getName());
-		suite.addTestSuite(BeanObservableListDecoratorTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableSetDecoratorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableSetDecoratorTest.java
index 2e81f8e..5fbf086 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableSetDecoratorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableSetDecoratorTest.java
@@ -12,28 +12,29 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
-import java.beans.PropertyDescriptor;
+import static org.junit.Assert.assertSame;
 
-import junit.framework.TestCase;
+import java.beans.PropertyDescriptor;
 
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.core.internal.databinding.beans.BeanObservableSetDecorator;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.3
  */
-public class BeanObservableSetDecoratorTest extends TestCase {
+public class BeanObservableSetDecoratorTest {
 	private PropertyDescriptor propertyDescriptor;
 	private IObservableSet observableSet;
 	private BeanObservableSetDecorator decorator;
 	private Bean bean;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 
 		bean = new Bean();
 		propertyDescriptor = new PropertyDescriptor("set", Bean.class);
@@ -43,14 +44,17 @@
 				propertyDescriptor);
 	}
 
+	@Test
 	public void testGetDecorated() throws Exception {
 		assertSame(observableSet, decorator.getDecorated());
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertSame(bean, decorator.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertSame(propertyDescriptor, decorator.getPropertyDescriptor());
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableValueDecoratorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableValueDecoratorTest.java
index 9a432dc..541202f 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableValueDecoratorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanObservableValueDecoratorTest.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertSame;
+
 import java.beans.PropertyDescriptor;
 
 import org.eclipse.core.databinding.beans.BeansObservables;
@@ -20,6 +22,8 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.3
@@ -30,8 +34,8 @@
 	private BeanObservableValueDecorator decorator;
 	private PropertyDescriptor propertyDescriptor;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		bean = new Bean();
@@ -42,14 +46,17 @@
 				propertyDescriptor);
 	}
 
+	@Test
 	public void testGetDelegate() throws Exception {
 		assertSame(observableValue, decorator.getDecorated());
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertSame(bean, decorator.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertSame(propertyDescriptor, decorator.getPropertyDescriptor());
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyHelperTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyHelperTest.java
index c17b595..61e68fd 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyHelperTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyHelperTest.java
@@ -12,17 +12,19 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import java.beans.PropertyDescriptor;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.internal.databinding.beans.BeanPropertyHelper;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class BeanPropertyHelperTest extends TestCase {
+public class BeanPropertyHelperTest {
+	@Test
 	public void testGetPropertyDescriptor_ClassProperty()
 			throws SecurityException, NoSuchMethodException {
 		PropertyDescriptor pd = BeanPropertyHelper.getPropertyDescriptor(
@@ -33,6 +35,7 @@
 				pd.getWriteMethod());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor_InterfaceProperty()
 			throws SecurityException, NoSuchMethodException {
 		PropertyDescriptor pd = BeanPropertyHelper.getPropertyDescriptor(
@@ -43,6 +46,7 @@
 				pd.getWriteMethod());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor_SuperInterfaceProperty()
 			throws SecurityException, NoSuchMethodException {
 		PropertyDescriptor pd = BeanPropertyHelper.getPropertyDescriptor(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerSupportTest.java
index d96f023..46bfd80 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerSupportTest.java
@@ -11,6 +11,10 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
@@ -20,6 +24,8 @@
 import org.eclipse.core.internal.databinding.beans.BeanPropertyListenerSupport;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
@@ -29,14 +35,15 @@
 	private PropertyChangeListenerStub listener;
 	private String propertyName;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		listener = new PropertyChangeListenerStub();
 		propertyName = "value";
 	}
 
+	@Test
 	public void testAddPropertyChangeListenerWithPropertyName()
 			throws Exception {
 		SpecificListenerBean bean = new SpecificListenerBean();
@@ -48,6 +55,7 @@
 				.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testAddPropertyChangeListenerWithoutPropertyName()
 			throws Exception {
 		GenericListenerBean bean = new GenericListenerBean();
@@ -59,6 +67,7 @@
 				.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testLogStatusWhenAddPropertyChangeListenerMethodIsNotFound()
 			throws Exception {
 		class BeanStub {
@@ -86,6 +95,7 @@
 		assertEquals(IStatus.WARNING, log.status.getSeverity());
 	}
 
+	@Test
 	public void testRemovePropertyChangeListenerWithPropertyName()
 			throws Exception {
 		SpecificListenerBean bean = new SpecificListenerBean();
@@ -99,6 +109,7 @@
 				.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemovePropertyChangeListenerWithoutPropertyName()
 			throws Exception {
 		GenericListenerBean bean = new GenericListenerBean();
@@ -112,6 +123,7 @@
 				.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testLogStatusWhenRemovePropertyChangeListenerMethodIsNotFound()
 			throws Exception {
 		class InvalidBean {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerTest.java
index 6784d77..728c95c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanPropertyListenerTest.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyDescriptor;
 import java.util.ArrayList;
@@ -24,6 +26,8 @@
 import org.eclipse.core.databinding.property.SimplePropertyEvent;
 import org.eclipse.core.internal.databinding.beans.BeanPropertyListener;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
@@ -34,8 +38,8 @@
 	private SimplePropertyListenerStub simpleListener;
 	private BeanPropertyListenerStub listener;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		property = new PropertyStub();
 		propertyDescriptor = new PropertyDescriptor("value", Bean.class);
@@ -44,6 +48,7 @@
 				simpleListener);
 	}
 
+	@Test
 	public void testPropertyChange_ExpectedPropertyName() {
 		Object source = new Object();
 		String propertyName = "value";
@@ -59,6 +64,7 @@
 				simpleListener.log);
 	}
 
+	@Test
 	public void testPropertyChange_OtherPropertyName() {
 		Object source = new Object();
 		String propertyName = "other";
@@ -70,6 +76,7 @@
 		assertEquals(Collections.EMPTY_LIST, simpleListener.log);
 	}
 
+	@Test
 	public void testPropertyChange_NullPropertyName() {
 		Object source = new Object();
 		String propertyName = null;
@@ -84,6 +91,7 @@
 				simpleListener.log);
 	}
 
+	@Test
 	public void testPropertyChange_NullPropertyName_IgnoreOldAndNewValues() {
 		Object source = new Object();
 		String propertyName = null;
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanValuePropertyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanValuePropertyTest.java
index 37654da..85826be 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanValuePropertyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/BeanValuePropertyTest.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.observable.value.IValueChangeListener;
@@ -20,12 +22,14 @@
 import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyListenerSupportTest.GenericListenerBean;
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
 public class BeanValuePropertyTest extends AbstractDefaultRealmTestCase {
+	@Test
 	public void testChangeListenerIsOnlyNotifiedWhenWatchedPropertyChanges()
 			throws Exception {
 		GenericListenerBean bean = new GenericListenerBean();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedListTest.java
index f649866..27798af 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedListTest.java
@@ -13,6 +13,11 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyDescriptor;
@@ -22,9 +27,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.beans.IBeanObservable;
@@ -42,6 +44,10 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.1
@@ -58,7 +64,8 @@
 	private String propertyName;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		propertyName = "array";
@@ -71,14 +78,17 @@
 		beanObservable = (IBeanObservable) list;
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertSame(bean, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testRegistersListenerAfterFirstListenerIsAdded()
 			throws Exception {
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
@@ -86,6 +96,7 @@
 		assertTrue(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemovesListenerAfterLastListenerIsRemoved()
 			throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
@@ -96,6 +107,7 @@
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testFiresListChangeEvents() throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
 		list.addListChangeListener(listener);
@@ -105,6 +117,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testAddAddsElement() throws Exception {
 		int count = list.size();
 		String element = "1";
@@ -115,6 +128,7 @@
 		assertEquals(element, bean.getArray()[count]);
 	}
 
+	@Test
 	public void testAddListChangeEvent() throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
 		list.addListChangeListener(listener);
@@ -132,6 +146,7 @@
 				.singletonList("1"));
 	}
 
+	@Test
 	public void testAdd_FiresPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -141,6 +156,7 @@
 		});
 	}
 
+	@Test
 	public void testAddWithIndex() throws Exception {
 		String element = "1";
 		assertEquals(0, list.size());
@@ -149,6 +165,7 @@
 		assertEquals(element, bean.getArray()[0]);
 	}
 
+	@Test
 	public void testAddAtIndexListChangeEvent() throws Exception {
 		String element = "1";
 		assertEquals(0, list.size());
@@ -163,6 +180,7 @@
 				.singletonList("1"));
 	}
 
+	@Test
 	public void testAddAtIndexPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -172,6 +190,7 @@
 		});
 	}
 
+	@Test
 	public void testRemove() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -181,6 +200,7 @@
 		assertEquals(0, bean.getArray().length);
 	}
 
+	@Test
 	public void testRemoveListChangeEvent() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -199,6 +219,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemovePropertyChangeEvent() throws Exception {
 		list.add("0");
 
@@ -210,6 +231,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveAtIndex() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -220,6 +242,7 @@
 		assertEquals(0, bean.getArray().length);
 	}
 
+	@Test
 	public void testRemoveAtIndexListChangeEvent() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -238,6 +261,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemoveAtIndexPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -248,6 +272,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAll() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, list.size());
@@ -257,6 +282,7 @@
 		assertEquals(2, bean.getArray().length);
 	}
 
+	@Test
 	public void testAddAllListChangEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, list.size());
@@ -275,6 +301,7 @@
 				.asList(new String[] { "1", "2" }));
 	}
 
+	@Test
 	public void testAddAllPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -284,6 +311,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAllAtIndex() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -297,6 +325,7 @@
 		assertEquals(elements.get(1), bean.getArray()[1]);
 	}
 
+	@Test
 	public void testAddAllAtIndexListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -316,6 +345,7 @@
 				.asList(new Object[] { "1", "2", "1", "2" }));
 	}
 
+	@Test
 	public void testAddAllAtIndexPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -325,6 +355,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveAll() throws Exception {
 		list.addAll(Arrays.asList(new String[] { "1", "2", "3", "4" }));
 		assertEquals(4, bean.getArray().length);
@@ -336,6 +367,7 @@
 		assertEquals("3", bean.getArray()[1]);
 	}
 
+	@Test
 	public void testRemoveAllListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -355,6 +387,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemoveAllPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -365,6 +398,7 @@
 		});
 	}
 
+	@Test
 	public void testRetainAll() throws Exception {
 		List elements = Arrays.asList(new String[] { "0", "1", "2", "3" });
 		list.addAll(elements);
@@ -378,6 +412,7 @@
 		assertEquals(elements.get(1), bean.getArray()[1]);
 	}
 
+	@Test
 	public void testRetainAllListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "0", "1", "2", "3" });
 		list.addAll(elements);
@@ -397,6 +432,7 @@
 				.asList(new Object[] { "0", "1" }));
 	}
 
+	@Test
 	public void testRetainAllPropertyChangeEvent() throws Exception {
 		list.addAll(Arrays.asList(new String[] { "0", "1" }));
 
@@ -408,6 +444,7 @@
 		});
 	}
 
+	@Test
 	public void testSet() throws Exception {
 		String oldElement = "old";
 		String newElement = "new";
@@ -419,6 +456,7 @@
 		assertEquals(newElement, bean.getArray()[0]);
 	}
 
+	@Test
 	public void testMove() throws Exception {
 		String element0 = "element0";
 		String element1 = "element1";
@@ -436,6 +474,7 @@
 		assertEquals(element0, bean.getArray()[1]);
 	}
 
+	@Test
 	public void testSetListChangeEvent() throws Exception {
 		String oldElement = "old";
 		String newElement = "new";
@@ -455,6 +494,7 @@
 				Collections.singletonList(newElement));
 	}
 
+	@Test
 	public void testSetPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -465,6 +505,7 @@
 		});
 	}
 
+	@Test
 	public void testListChangeEventFiresWhenNewListIsSet() throws Exception {
 		Bean[] elements = new Bean[] { new Bean(), new Bean() };
 
@@ -476,6 +517,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -499,6 +541,7 @@
 		assertEquals(Collections.singletonList("new"), list);
 	}
 
+	@Test
 	public void testModifyObservableList_FiresListChange() {
 		Bean bean = new Bean(new Object[] { "old" });
 		IObservableList observable = BeansObservables
@@ -513,6 +556,7 @@
 				Collections.singletonList("new"));
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean(new Object[0]);
 		CurrentRealm realm = new CurrentRealm(true);
@@ -571,12 +615,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				JavaBeanObservableArrayBasedListTest.class.getName());
-		suite.addTestSuite(JavaBeanObservableArrayBasedListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedSetTest.java
index 3791b54..36a3684 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableArrayBasedSetTest.java
@@ -13,6 +13,11 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyDescriptor;
@@ -22,9 +27,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.beans.IBeanObservable;
@@ -42,6 +44,10 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.1
@@ -58,7 +64,8 @@
 	private String propertyName;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		propertyName = "array";
@@ -71,14 +78,17 @@
 		beanObservable = (IBeanObservable) set;
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertEquals(bean, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testRegistersListenerAfterFirstListenerIsAdded()
 			throws Exception {
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
@@ -86,6 +96,7 @@
 		assertTrue(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemovesListenerAfterLastListenerIsRemoved()
 			throws Exception {
 		SetChangeEventTracker listener = SetChangeEventTracker.observe(set);
@@ -95,6 +106,7 @@
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testSetBeanProperty_FiresSetChangeEvents() throws Exception {
 		SetChangeEventTracker listener = SetChangeEventTracker.observe(set);
 
@@ -103,6 +115,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testAdd_AddsElement() throws Exception {
 		assertEquals(0, set.size());
 
@@ -113,6 +126,7 @@
 		assertEquals(element, bean.getArray()[0]);
 	}
 
+	@Test
 	public void testAdd_SetChangeEvent() throws Exception {
 		SetChangeEventTracker listener = SetChangeEventTracker.observe(set);
 		assertEquals(0, listener.count);
@@ -128,6 +142,7 @@
 		assertEquals(Collections.EMPTY_SET, event.diff.getRemovals());
 	}
 
+	@Test
 	public void testAdd_FiresPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -137,6 +152,7 @@
 		});
 	}
 
+	@Test
 	public void testRemove() throws Exception {
 		String element = "1";
 		set.add(element);
@@ -146,6 +162,7 @@
 		assertEquals(0, bean.getArray().length);
 	}
 
+	@Test
 	public void testRemove_SetChangeEvent() throws Exception {
 		String element = "1";
 		set.add(element);
@@ -163,6 +180,7 @@
 		assertEquals(Collections.EMPTY_SET, event.diff.getAdditions());
 	}
 
+	@Test
 	public void testRemovePropertyChangeEvent() throws Exception {
 		set.add("0");
 
@@ -174,6 +192,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAll() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, set.size());
@@ -183,6 +202,7 @@
 		assertEquals(2, bean.getArray().length);
 	}
 
+	@Test
 	public void testAddAll_SetChangeEvent() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, set.size());
@@ -200,6 +220,7 @@
 		assertEquals(Collections.EMPTY_SET, event.diff.getRemovals());
 	}
 
+	@Test
 	public void testAddAllPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -209,6 +230,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveAll() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		set.addAll(elements);
@@ -219,6 +241,7 @@
 		assertEquals(0, bean.getArray().length);
 	}
 
+	@Test
 	public void testRemoveAll_SetChangeEvent() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		set.addAll(elements);
@@ -234,6 +257,7 @@
 		assertEquals(new HashSet(elements), event.diff.getRemovals());
 	}
 
+	@Test
 	public void testRemoveAllPropertyChangeEvent() throws Exception {
 		set.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -244,6 +268,7 @@
 		});
 	}
 
+	@Test
 	public void testRetainAll() throws Exception {
 		set.addAll(Arrays.asList(new String[] { "0", "1", "2", "3" }));
 
@@ -255,6 +280,7 @@
 		assertTrue(set.containsAll(Arrays.asList(new String[] { "1", "0" })));
 	}
 
+	@Test
 	public void testRetainAll_SetChangeEvent() throws Exception {
 		set.addAll(Arrays.asList(new String[] { "0", "1", "2", "3" }));
 
@@ -271,6 +297,7 @@
 				event.diff.getRemovals());
 	}
 
+	@Test
 	public void testRetainAllPropertyChangeEvent() throws Exception {
 		set.addAll(Arrays.asList(new String[] { "0", "1" }));
 
@@ -282,6 +309,7 @@
 		});
 	}
 
+	@Test
 	public void testSetChangeEventFiresWhenNewSetIsSet() throws Exception {
 		Bean[] elements = new Bean[] { new Bean(), new Bean() };
 
@@ -292,6 +320,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -314,6 +343,7 @@
 				.getAdditions());
 	}
 
+	@Test
 	public void testModifyObservableSet_FiresSetChange() {
 		Bean bean = new Bean(new Object[] {});
 		IObservableSet observable = BeansObservables.observeSet(bean, "array");
@@ -327,6 +357,7 @@
 				.singleton("new"));
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean(new Object[0]);
 		CurrentRealm realm = new CurrentRealm(true);
@@ -385,12 +416,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				JavaBeanObservableArrayBasedSetTest.class.getName());
-		suite.addTestSuite(JavaBeanObservableArrayBasedSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableListTest.java
index 8f69230..08a2e52 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableListTest.java
@@ -13,6 +13,11 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyDescriptor;
@@ -22,9 +27,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.beans.IBeanObservable;
@@ -44,6 +46,10 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.1
@@ -59,7 +65,8 @@
 	private String propertyName;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		propertyName = "list";
@@ -72,14 +79,17 @@
 		beanObservable = (IBeanObservable) list;
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertEquals(bean, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testRegistersListenerAfterFirstListenerIsAdded()
 			throws Exception {
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
@@ -87,6 +97,7 @@
 		assertTrue(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemovesListenerAfterLastListenerIsRemoved()
 			throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
@@ -97,6 +108,7 @@
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testFiresListChangeEvents() throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
 		list.addListChangeListener(listener);
@@ -106,6 +118,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testAddAddsElement() throws Exception {
 		int count = list.size();
 		String element = "1";
@@ -116,6 +129,7 @@
 		assertEquals(element, bean.getList().get(count));
 	}
 
+	@Test
 	public void testAddListChangeEvent() throws Exception {
 		ListChangeEventTracker listener = new ListChangeEventTracker();
 		list.addListChangeListener(listener);
@@ -133,6 +147,7 @@
 				.singletonList("1"));
 	}
 
+	@Test
 	public void testAddFiresPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -142,6 +157,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAtIndex() throws Exception {
 		String element = "1";
 		assertEquals(0, list.size());
@@ -150,6 +166,7 @@
 		assertEquals(element, bean.getList().get(0));
 	}
 
+	@Test
 	public void testAddAtIndexListChangeEvent() throws Exception {
 		String element = "1";
 		assertEquals(0, list.size());
@@ -164,6 +181,7 @@
 				.singletonList("1"));
 	}
 
+	@Test
 	public void testAddAtIndexPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -173,6 +191,7 @@
 		});
 	}
 
+	@Test
 	public void testClear() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -187,6 +206,7 @@
 		assertEquals(0, bean.getList().size());
 	}
 
+	@Test
 	public void testRemove() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -196,6 +216,7 @@
 		assertEquals(0, bean.getList().size());
 	}
 
+	@Test
 	public void testRemoveListChangeEvent() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -214,6 +235,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemovePropertyChangeEvent() throws Exception {
 		list.add("0");
 
@@ -225,6 +247,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveAtIndex() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -235,6 +258,7 @@
 		assertEquals(0, bean.getList().size());
 	}
 
+	@Test
 	public void testRemoveAtIndexListChangeEvent() throws Exception {
 		String element = "1";
 		list.add(element);
@@ -253,6 +277,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemoveAtIndexPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -263,6 +288,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAll() throws Exception {
 		Collection elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, list.size());
@@ -272,6 +298,7 @@
 		assertEquals(2, bean.getList().size());
 	}
 
+	@Test
 	public void testAddAllListChangEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		assertEquals(0, list.size());
@@ -290,6 +317,7 @@
 				.asList(new String[] { "1", "2" }));
 	}
 
+	@Test
 	public void testAddAllPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -299,6 +327,7 @@
 		});
 	}
 
+	@Test
 	public void testAddAllAtIndex() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -312,6 +341,7 @@
 		assertEquals(elements.get(1), bean.getList().get(1));
 	}
 
+	@Test
 	public void testAddAllAtIndexListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -331,6 +361,7 @@
 				.asList(new Object[] { "1", "2", "1", "2" }));
 	}
 
+	@Test
 	public void testAddAllAtIndexPropertyChangeEvent() throws Exception {
 		assertPropertyChangeEvent(bean, new Runnable() {
 			@Override
@@ -340,6 +371,7 @@
 		});
 	}
 
+	@Test
 	public void testRemoveAll() throws Exception {
 		list.addAll(Arrays.asList(new String[] { "1", "2", "3", "4" }));
 		assertEquals(4, bean.getList().size());
@@ -351,6 +383,7 @@
 		assertEquals("3", bean.getList().get(1));
 	}
 
+	@Test
 	public void testRemoveAllListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 		list.addAll(elements);
@@ -371,6 +404,7 @@
 				Collections.EMPTY_LIST);
 	}
 
+	@Test
 	public void testRemoveAllPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -381,6 +415,7 @@
 		});
 	}
 
+	@Test
 	public void testRetailAll() throws Exception {
 		List elements = Arrays.asList(new String[] { "0", "1", "2", "3" });
 		list.addAll(elements);
@@ -394,6 +429,7 @@
 		assertEquals(elements.get(1), bean.getList().get(1));
 	}
 
+	@Test
 	public void testRetainAllListChangeEvent() throws Exception {
 		List elements = Arrays.asList(new String[] { "0", "1", "2", "3" });
 		list.addAll(elements);
@@ -413,6 +449,7 @@
 				.asList(new Object[] { "0", "1" }));
 	}
 
+	@Test
 	public void testRetainAllPropertyChangeEvent() throws Exception {
 		list.addAll(Arrays.asList(new String[] { "0", "1" }));
 
@@ -424,6 +461,7 @@
 		});
 	}
 
+	@Test
 	public void testSet() throws Exception {
 		String oldElement = "old";
 		String newElement = "new";
@@ -435,6 +473,7 @@
 		assertEquals(newElement, bean.getList().get(0));
 	}
 
+	@Test
 	public void testMove() throws Exception {
 		String element0 = "element0";
 		String element1 = "element1";
@@ -452,6 +491,7 @@
 		assertEquals(element0, bean.getList().get(1));
 	}
 
+	@Test
 	public void testSetListChangeEvent() throws Exception {
 		String oldElement = "old";
 		String newElement = "new";
@@ -470,6 +510,7 @@
 				Collections.singletonList(newElement));
 	}
 
+	@Test
 	public void testSetPropertyChangeEvent() throws Exception {
 		list.add("0");
 		assertPropertyChangeEvent(bean, new Runnable() {
@@ -480,6 +521,7 @@
 		});
 	}
 
+	@Test
 	public void testListChangeEventFiresWhenNewListIsSet() throws Exception {
 		List elements = Arrays.asList(new String[] { "1", "2" });
 
@@ -491,6 +533,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testConstructor_RegistersListener() throws Exception {
 		Bean bean = new Bean();
 		IObservableList observable = BeansObservables.observeList(Realm
@@ -501,6 +544,7 @@
 		assertTrue(bean.hasListeners("list"));
 	}
 
+	@Test
 	public void testConstructor_SkipsRegisterListener() throws Exception {
 		Bean bean = new Bean();
 		IObservableList observable = PojoObservables.observeList(Realm
@@ -511,6 +555,7 @@
 		assertFalse(bean.hasListeners("list"));
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -535,6 +580,7 @@
 		assertEquals(Collections.singletonList("new"), list);
 	}
 
+	@Test
 	public void testModifyObservableList_FiresListChange() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableList observable = BeansObservables.observeList(bean, "list");
@@ -549,6 +595,7 @@
 				.singletonList(element));
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean(Collections.EMPTY_LIST);
 		CurrentRealm realm = new CurrentRealm(true);
@@ -571,6 +618,7 @@
 	 * Makes sure that the list set on the Bean model after changing the
 	 * observable list is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedBeanListIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableList observable = BeansObservables.observeList(bean, "list");
@@ -583,6 +631,7 @@
 	 * Makes sure that the list set on the Pojo model after changing the
 	 * observable list is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedPojoListIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableList observable = PojoObservables.observeList(bean, "list");
@@ -629,12 +678,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JavaBeanObservableListTest.class
-				.getName());
-		suite.addTestSuite(JavaBeanObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java
index c6215c7..b8206dd 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableMapTest.java
@@ -13,15 +13,16 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyDescriptor;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.beans.IBeanObservable;
@@ -36,6 +37,8 @@
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -54,7 +57,8 @@
 	private IBeanObservable beanObservable;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		ThreadRealm realm = new ThreadRealm();
@@ -73,18 +77,21 @@
 		beanObservable = (IBeanObservable) map;
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		assertEquals(
 				"The 'value' from the map should be the value of the property of the model.",
 				model1.getValue(), map.get(model1));
 	}
 
+	@Test
 	public void testGetValue_KeyOutOfDomain() {
 		Bean model3 = new Bean("3");
 		assertFalse(map.containsKey(model3));
 		assertFalse(model3.getValue().equals(map.get(model3)));
 	}
 
+	@Test
 	public void testSetValueNotifications() throws Exception {
 		String oldValue = model1.getValue();
 		String newValue = model1.getValue() + model1.getValue();
@@ -101,6 +108,7 @@
 		assertFalse(listener.event.diff.getRemovedKeys().contains(model1));
 	}
 
+	@Test
 	public void testPutValue() throws Exception {
 		String oldValue = model1.getValue();
 		String newValue = model1.getValue() + model1.getValue();
@@ -118,6 +126,7 @@
 		assertFalse(listener.event.diff.getRemovedKeys().contains(model1));
 	}
 
+	@Test
 	public void testAddKey() throws Exception {
 		MapChangeEventTracker listener = new MapChangeEventTracker();
 		map.addMapChangeListener(listener);
@@ -136,6 +145,7 @@
 		assertEquals(3, map.size());
 	}
 
+	@Test
 	public void testRemoveKey() throws Exception {
 		MapChangeEventTracker listener = new MapChangeEventTracker();
 		map.addMapChangeListener(listener);
@@ -149,14 +159,17 @@
 		assertEquals(1, map.size());
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertEquals(set, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testConstructor_SkipRegisterListeners() throws Exception {
 		Realm realm = new CurrentRealm(true);
 		WritableSet set = new WritableSet(realm);
@@ -171,6 +184,7 @@
 		assertFalse(bean.hasListeners("value"));
 	}
 
+	@Test
 	public void testConstructor_RegistersListeners() throws Exception {
 		Realm realm = new CurrentRealm(true);
 		WritableSet set = new WritableSet(realm);
@@ -185,6 +199,7 @@
 		assertTrue(bean.hasListeners("value"));
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -216,6 +231,7 @@
 		assertEquals("new", tracker.event.diff.getNewValue(bean));
 	}
 
+	@Test
 	public void testModifyObservableMap_FiresMapChange() {
 		Bean bean = new Bean(Collections.singletonMap("key", "oldValue"));
 		IObservableMap observable = BeansObservables.observeMap(bean, "map");
@@ -229,6 +245,7 @@
 				"oldValue"), Collections.singletonMap("key", "newValue"));
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean(Collections.EMPTY_MAP);
 		CurrentRealm realm = new CurrentRealm(true);
@@ -254,11 +271,4 @@
 		assertEquals("applying diff to list did not produce expected result",
 				newMap, oldMap);
 	}
-
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JavaBeanObservableMapTest.class
-				.getName());
-		suite.addTestSuite(JavaBeanObservableMapTest.class);
-		return suite;
-	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableSetTest.java
index e5c5602..7faa68d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableSetTest.java
@@ -13,6 +13,10 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.beans.PropertyDescriptor;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -20,9 +24,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.beans.IBeanObservable;
@@ -41,6 +42,10 @@
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.3
@@ -54,7 +59,8 @@
 	private SetChangeEventTracker listener;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		bean = new Bean();
@@ -69,18 +75,22 @@
 		listener = new SetChangeEventTracker();
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertEquals(bean, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testGetElementType() throws Exception {
 		assertEquals(Bean.class, observableSet.getElementType());
 	}
 
+	@Test
 	public void testRegistersListenerAfterFirstListenerIsAdded()
 			throws Exception {
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
@@ -88,6 +98,7 @@
 		assertTrue(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testRemovesListenerAfterLastListenerIsRemoved()
 			throws Exception {
 		observableSet.addSetChangeListener(listener);
@@ -97,6 +108,7 @@
 		assertFalse(bean.changeSupport.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testFiresChangeEvents() throws Exception {
 		observableSet.addSetChangeListener(listener);
 		assertEquals(0, listener.count);
@@ -104,6 +116,7 @@
 		assertEquals(1, listener.count);
 	}
 
+	@Test
 	public void testConstructor_RegisterListeners() throws Exception {
 		bean = new Bean();
 		observableSet = BeansObservables.observeSet(new CurrentRealm(true),
@@ -113,6 +126,7 @@
 		assertTrue(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testConstructor_SkipsRegisterListeners() throws Exception {
 		bean = new Bean();
 
@@ -123,6 +137,7 @@
 		assertFalse(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -145,6 +160,7 @@
 				.getAdditions());
 	}
 
+	@Test
 	public void testModifyObservableSet_FiresSetChange() {
 		Bean bean = new Bean(new HashSet());
 		IObservableSet observable = BeansObservables.observeSet(bean, "set");
@@ -159,6 +175,7 @@
 				.singleton(element));
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean(Collections.EMPTY_SET);
 		CurrentRealm realm = new CurrentRealm(true);
@@ -181,6 +198,7 @@
 	 * Makes sure that the set set on the Bean model after changing the
 	 * observable set is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedBeanSetIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableSet observable = BeansObservables.observeSet(bean, "set");
@@ -193,6 +211,7 @@
 	 * Makes sure that the set set on the Pojo model after changing the
 	 * observable set is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedPojoSetIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableSet observable = PojoObservables.observeSet(bean, "set");
@@ -209,12 +228,8 @@
 				newSet, oldSet);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JavaBeanObservableSetTest.class
-				.getName());
-		suite.addTestSuite(JavaBeanObservableSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableValueTest.java
index 4eab5c2..becf9c5 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanObservableValueTest.java
@@ -14,10 +14,12 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
-import java.beans.PropertyDescriptor;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import java.beans.PropertyDescriptor;
 
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
@@ -38,6 +40,10 @@
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -50,7 +56,8 @@
 	private String propertyName;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		bean = new Bean();
@@ -61,14 +68,17 @@
 		beanObservable = (IBeanObservable) observableValue;
 	}
 
+	@Test
 	public void testGetObserved() throws Exception {
 		assertEquals(bean, beanObservable.getObserved());
 	}
 
+	@Test
 	public void testGetPropertyDescriptor() throws Exception {
 		assertEquals(propertyDescriptor, beanObservable.getPropertyDescriptor());
 	}
 
+	@Test
 	public void testSetValueThrowsExceptionThrownByBean() throws Exception {
 		ThrowsSetException temp = new ThrowsSetException();
 		IObservableValue observable = BeansObservables.observeValue(temp,
@@ -82,6 +92,7 @@
 		}
 	}
 
+	@Test
 	public void testGetValueThrowsExceptionThrownByBean() throws Exception {
 		ThrowsGetException temp = new ThrowsGetException();
 		IObservableValue observable = BeansObservables.observeValue(temp,
@@ -95,6 +106,7 @@
 		}
 	}
 
+	@Test
 	public void testBug198519() {
 		final SimplePerson person = new SimplePerson();
 		final ComputedValue cv = new ComputedValue() {
@@ -115,6 +127,7 @@
 		person.setName("foo");
 	}
 
+	@Test
 	public void testConstructor_RegistersListeners() throws Exception {
 		IObservableValue observable = BeansObservables.observeValue(bean,
 				propertyName);
@@ -123,6 +136,7 @@
 		assertTrue(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testConstructor_SkipRegisterListeners() throws Exception {
 		IObservableValue observable = PojoObservables.observeValue(bean,
 				propertyName);
@@ -131,6 +145,7 @@
 		assertFalse(bean.hasListeners(propertyName));
 	}
 
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to
@@ -152,6 +167,7 @@
 		assertEquals("new", tracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testSetBeanPropertyOutsideRealm_FiresEventInsideRealm() {
 		Bean bean = new Bean("old");
 		CurrentRealm realm = new CurrentRealm(true);
@@ -169,12 +185,8 @@
 		assertEquals(Diffs.createValueDiff("old", "new"), tracker.event.diff);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(JavaBeanObservableValueTest.class
-				.getName());
-		suite.addTestSuite(JavaBeanObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanPropertyObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanPropertyObservableMapTest.java
index 40baee1..ac97984 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanPropertyObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/beans/JavaBeanPropertyObservableMapTest.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.core.tests.internal.databinding.beans;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.Collections;
 
@@ -21,6 +23,7 @@
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -28,6 +31,7 @@
  */
 public class JavaBeanPropertyObservableMapTest extends
 		AbstractDefaultRealmTestCase {
+	@Test
 	public void testSetBeanProperty_CorrectForNullOldAndNewValues() {
 		// The java bean spec allows the old and new values in a
 		// PropertyChangeEvent to be null, which indicates that an unknown
@@ -60,6 +64,7 @@
 	 * Makes sure that the map set on the Bean model after changing the
 	 * observable map is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedBeanMapIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableMap observable = BeansObservables.observeMap(bean, "map");
@@ -72,6 +77,7 @@
 	 * Makes sure that the map set on the Pojo model after changing the
 	 * observable map is modifiable (see bugs 285307 and 301774).
 	 */
+	@Test
 	public void testUpdatedPojoMapIsModifiable() {
 		Bean bean = new Bean(new ArrayList());
 		IObservableMap observable = PojoObservables.observeMap(bean, "map");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/DateConversionSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/DateConversionSupportTest.java
index 8b74e2e..98c9597 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/DateConversionSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/DateConversionSupportTest.java
@@ -12,12 +12,15 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import java.util.Date;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
 
-import junit.framework.TestCase;
+import java.util.Date;
 
 import org.eclipse.core.internal.databinding.BindingMessages;
 import org.eclipse.core.internal.databinding.conversion.DateConversionSupport;
+import org.junit.Test;
 
 import com.ibm.icu.text.DateFormat;
 import com.ibm.icu.text.SimpleDateFormat;
@@ -25,7 +28,8 @@
 /**
  * @since 1.1
  */
-public class DateConversionSupportTest extends TestCase {
+public class DateConversionSupportTest {
+	@Test
 	public void testDatePatternIsExternalized() throws Exception {
 		StubConverter stub = new StubConverter();
 		String key = "DateFormat_DateTime";
@@ -36,6 +40,7 @@
 		assertEquals(format, dateFormat.toPattern());
 	}
 
+	@Test
 	public void testTimePatternIsExternalized() throws Exception {
 		StubConverter stub = new StubConverter();
 		String key = "DateFormat_Time";
@@ -46,6 +51,7 @@
 		assertEquals(format, dateFormat.toPattern());
 	}
 
+	@Test
 	public void testFormat_NullDate() {
 		StubConverter stub = new StubConverter();
 		assertNull(stub.format(null));
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IdentityConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IdentityConverterTest.java
index 88775ac..69605e9 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IdentityConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IdentityConverterTest.java
@@ -13,24 +13,30 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.databinding.BindingException;
 import org.eclipse.core.internal.databinding.conversion.IdentityConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class IdentityConverterTest extends TestCase {
+public class IdentityConverterTest {
 
 	private IdentityConverter c;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		c = new IdentityConverter(Integer.TYPE, Integer.TYPE);
 	}
 
+	@Test
 	public void testIsPrimitiveTypeMatchedWithBoxed() throws Exception {
 		assertTrue(c.isPrimitiveTypeMatchedWithBoxed(Integer.class,
 				Integer.TYPE));
@@ -66,6 +72,7 @@
 				Integer.TYPE));
 	}
 
+	@Test
 	public void testConvert_NullToPrimitive() {
 		IdentityConverter p2b = new IdentityConverter(Float.TYPE, Float.TYPE);
 		try {
@@ -76,21 +83,25 @@
 		}
 	}
 
+	@Test
 	public void testConvert_PrimitiveToBoxed() throws Exception {
 		IdentityConverter p2b = new IdentityConverter(Float.TYPE, Float.class);
 		assertEquals("4.2", new Float(4.2), p2b.convert(new Float(4.2)));
 	}
 
+	@Test
 	public void testConvert_BoxedToPrimitive() throws Exception {
 		IdentityConverter p2b = new IdentityConverter(Float.class, Float.TYPE);
 		assertEquals("4.2", new Float(4.2), p2b.convert(new Float(4.2)));
 	}
 
+	@Test
 	public void testConvert_PrimitiveToPrimitive() throws Exception {
 		IdentityConverter p2b = new IdentityConverter(Float.TYPE, Float.TYPE);
 		assertEquals("4.2", new Float(4.2), p2b.convert(new Float(4.2)));
 	}
 
+	@Test
 	public void testConvert_BoxedToBoxed() throws Exception {
 		IdentityConverter p2b = new IdentityConverter(Float.class, Float.class);
 		assertEquals("4.2", new Float(4.2), p2b.convert(new Float(4.2)));
@@ -104,6 +115,7 @@
 		public String name = "fido";
 	}
 
+	@Test
 	public void test_Convert_ValidAssignment() throws Exception {
 		IdentityConverter pc = new IdentityConverter(Object.class, Person.class);
 		Person orig = new Person();
@@ -112,6 +124,7 @@
 		assertTrue("Need correct Person", person.equals(orig));
 	}
 
+	@Test
 	public void test_Convert_ValidAssignment2() throws Exception {
 		IdentityConverter pc = new IdentityConverter(Person.class, Object.class);
 		Person orig = new Person();
@@ -120,6 +133,7 @@
 		assertTrue("Need correct Person", person.equals(orig));
 	}
 
+	@Test
 	public void testConvert_InvalidAssignment() throws Exception {
 		IdentityConverter pc = new IdentityConverter(Object.class, Person.class);
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IntegerToStringConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IntegerToStringConverterTest.java
index ff7e5a4..822a6b6 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IntegerToStringConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/IntegerToStringConverterTest.java
@@ -12,6 +12,8 @@
 package org.eclipse.core.tests.internal.databinding.conversion;
 
 import org.eclipse.core.internal.databinding.conversion.IntegerToStringConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -24,12 +26,14 @@
 	private NumberFormat integerFormat;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		integerFormat = NumberFormat.getIntegerInstance();
 	}
 
+	@Test
 	public void testFromTypeShort() throws Exception {
 		assertEquals(Short.class, IntegerToStringConverter.fromShort(false)
 				.getFromType());
@@ -41,11 +45,13 @@
 				.getFromType());
 	}
 
+	@Test
 	public void testToTypeIsStringClass() throws Exception {
 		assertEquals(String.class, IntegerToStringConverter.fromShort(false)
 				.getToType());
 	}
 
+	@Test
 	public void testConvertShortToString() throws Exception {
 		Short value = Short.valueOf((short) 1);
 		String expected = integerFormat.format(value);
@@ -56,6 +62,7 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testConvertByteToString() throws Exception {
 		Byte value = Byte.valueOf((byte) 1);
 		String expected = integerFormat.format(value);
@@ -66,12 +73,14 @@
 		assertEquals(expected, result);
 	}
 
+	@Test
 	public void testNullSourceConvertsToEmptyString() throws Exception {
 		IntegerToStringConverter converter = IntegerToStringConverter
 				.fromByte(false);
 		assertEquals("", converter.convert(null));
 	}
 
+	@Test
 	public void testIllegalArgumentExceptionIfSourceIsNotExpectedType() throws Exception {
 		IntegerToStringConverter converter = IntegerToStringConverter.fromByte(false);
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToBigIntegerConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToBigIntegerConverterTest.java
index b217d9d..94d0a5d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToBigIntegerConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToBigIntegerConverterTest.java
@@ -25,11 +25,6 @@
 	private NumberFormat numberFormat;
 
 	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	@Override
 	protected Number doGetOutOfRangeNumber() {
 		return null;
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToByteConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToByteConverterTest.java
index 2427049..acaffff 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToByteConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToByteConverterTest.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.internal.databinding.conversion.NumberToByteConverter;
+import org.junit.Before;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -22,10 +23,8 @@
 public class NumberToByteConverterTest extends NumberToNumberTestHarness {
 	private NumberFormat numberFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getInstance();
 	}
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToFloatConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToFloatConverterTest.java
index d848398..afc6494 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToFloatConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToFloatConverterTest.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.internal.databinding.conversion.NumberToFloatConverter;
+import org.junit.Before;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -22,10 +23,8 @@
 public class NumberToFloatConverterTest extends NumberToNumberTestHarness {
 	private NumberFormat numberFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getInstance();
 	}
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToIntegerConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToIntegerConverterTest.java
index 5cedd48..a6b3331 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToIntegerConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToIntegerConverterTest.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.internal.databinding.conversion.NumberToIntegerConverter;
+import org.junit.Before;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -22,10 +23,8 @@
 public class NumberToIntegerConverterTest extends NumberToNumberTestHarness {
 	private NumberFormat numberFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getInstance();
 	}
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToLongConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToLongConverterTest.java
index 5946c05..597b22f 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToLongConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToLongConverterTest.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.internal.databinding.conversion.NumberToLongConverter;
+import org.junit.Before;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -22,10 +23,8 @@
 public class NumberToLongConverterTest extends NumberToNumberTestHarness {
 	private NumberFormat numberFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getInstance();
 	}
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToNumberTestHarness.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToNumberTestHarness.java
index 00270d4..dcaa322 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToNumberTestHarness.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToNumberTestHarness.java
@@ -11,14 +11,20 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.databinding.conversion.IConverter;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public abstract class NumberToNumberTestHarness extends TestCase {
+public abstract class NumberToNumberTestHarness {
 
 	/**
 	 * Invoked when a to primitive validator is needed.
@@ -51,11 +57,13 @@
 	 */
 	protected abstract Number doGetOutOfRangeNumber();
 
+	@Test
 	public void testFromType() throws Exception {
 		Class from = Integer.class;
 		assertEquals(from, doGetToBoxedTypeValidator(from).getFromType());
 	}
 
+	@Test
 	public void testToTypeIsPrimitive() throws Exception {
 		Class toType = doGetToType(true);
 
@@ -68,6 +76,7 @@
 		assertTrue("to type was not primitive", toType.isPrimitive());
 	}
 
+	@Test
 	public void testToTypeIsBoxedType() throws Exception {
 		Class toType = doGetToType(false);
 		assertEquals(toType, doGetToBoxedTypeValidator(Integer.class)
@@ -75,6 +84,7 @@
 		assertFalse(toType.isPrimitive());
 	}
 
+	@Test
 	public void testValidConversion() throws Exception {
 		Integer value = Integer.valueOf(1);
 		Number result = (Number) doGetToBoxedTypeValidator(Integer.class)
@@ -88,6 +98,7 @@
 		assertEquals(value, Integer.valueOf(result.intValue()));
 	}
 
+	@Test
 	public void testOutOfRangeConversion() throws Exception {
 		Number outOfRange = doGetOutOfRangeNumber();
 
@@ -102,6 +113,7 @@
 		}
 	}
 
+	@Test
 	public void testConvertNullValueForPrimitiveThrowsIllegalArgumentException()
 			throws Exception {
 		if (doGetToType(true) == null) {
@@ -117,10 +129,12 @@
 		}
 	}
 
+	@Test
 	public void testConvertNullValueForBoxedTypeReturnsNull() throws Exception {
 		assertNull(doGetToBoxedTypeValidator(Integer.class).convert(null));
 	}
 
+	@Test
 	public void testNonNumberThrowsIllegalArgumentException() throws Exception {
 		try {
 			doGetToBoxedTypeValidator(Integer.class).convert("");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToShortConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToShortConverterTest.java
index cd11091..cd26c3d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToShortConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/NumberToShortConverterTest.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.core.databinding.conversion.IConverter;
 import org.eclipse.core.internal.databinding.conversion.NumberToShortConverter;
+import org.junit.Before;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -22,10 +23,8 @@
 public class NumberToShortConverterTest extends NumberToNumberTestHarness {
 	private NumberFormat numberFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getInstance();
 	}
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/ObjectToPrimitiveValidatorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/ObjectToPrimitiveValidatorTest.java
index b99246b..c004c08 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/ObjectToPrimitiveValidatorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/ObjectToPrimitiveValidatorTest.java
@@ -11,21 +11,24 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.internal.databinding.validation.ObjectToPrimitiveValidator;
 import org.eclipse.core.runtime.IStatus;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class ObjectToPrimitiveValidatorTest extends TestCase {
+public class ObjectToPrimitiveValidatorTest {
 
 	private ObjectToPrimitiveValidator objectToPrimitiveValidator;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		this.objectToPrimitiveValidator = new ObjectToPrimitiveValidator(
 				Integer.TYPE);
 	}
@@ -34,6 +37,7 @@
 	 * Test method for
 	 * {@link org.eclipse.jface.internal.databinding.provisional.validation.ObjectToPrimitiveValidator#isValid(java.lang.Object)}.
 	 */
+	@Test
 	public void testIsValid() {
 		IStatus result = this.objectToPrimitiveValidator.validate(null);
 		assertEquals("The wrong validation error was found.", result
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StatusToStringConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StatusToStringConverterTest.java
index a4415c7..227892a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StatusToStringConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StatusToStringConverterTest.java
@@ -11,39 +11,44 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.internal.databinding.conversion.StatusToStringConverter;
 import org.eclipse.core.runtime.IStatus;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class StatusToStringConverterTest extends TestCase {
+public class StatusToStringConverterTest {
 	private StatusToStringConverter converter;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		converter = new StatusToStringConverter();
 	}
 
+	@Test
 	public void testConvertedValueIsMessageOfStatus() throws Exception {
 		String message = "this is my message";
 		IStatus status = ValidationStatus.error(message);
 		assertEquals(message, converter.convert(status));
 	}
 
+	@Test
 	public void testFromTypeIsIStatus() throws Exception {
 		assertEquals(IStatus.class, converter.getFromType());
 	}
 
+	@Test
 	public void testToTypeIsString() throws Exception {
 		assertEquals(String.class, converter.getToType());
 	}
 
+	@Test
 	public void testIllegalArgumentExceptionIsThrownWithNullInput() throws Exception {
 		try {
 			converter.convert(null);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToBooleanConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToBooleanConverterTest.java
index 27a2c00..da340db 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToBooleanConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToBooleanConverterTest.java
@@ -11,29 +11,31 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-
 import org.eclipse.core.internal.databinding.BindingMessages;
 import org.eclipse.core.internal.databinding.conversion.StringToBooleanConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class StringToBooleanConverterTest extends TestCase {
+public class StringToBooleanConverterTest {
 	private StringToBooleanConverter converter;
 
 	private List trueValues;
 
 	private List falseValues;
 
-	@Override
-	public void run(TestResult result) {
+	@Before
+	public void setUp() {
 		trueValues = Collections.unmodifiableList(toValues(BindingMessages
 				.getString("ValueDelimiter"), BindingMessages
 				.getString("TrueStringValues")));
@@ -41,7 +43,9 @@
 				.getString("ValueDelimiter"), BindingMessages
 				.getString("FalseStringValues")));
 
-		super.run(result);
+		converter = new StringToBooleanConverter();
+		assertTrue(trueValues.size() > 0);
+		assertTrue(falseValues.size() > 0);
 	}
 
 	private List toValues(String delimiter, String values) {
@@ -55,31 +59,26 @@
 		return result;
 	}
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
-		converter = new StringToBooleanConverter();
-		assertTrue(trueValues.size() > 0);
-		assertTrue(falseValues.size() > 0);
-	}
-
+	@Test
 	public void testConvertsToTrue() throws Exception {
 		Boolean result = (Boolean) converter.convert(trueValues.get(0));
 		assertTrue(result.booleanValue());
 	}
 
+	@Test
 	public void testConvertsToFalse() throws Exception {
 		Boolean result = (Boolean) converter.convert(falseValues.get(0));
 		assertFalse(result.booleanValue());
 	}
 
+	@Test
 	public void testUpperCaseStringConvertsToTrue() throws Exception {
 		Boolean result = (Boolean) converter.convert(((String) trueValues.get(0))
 				.toUpperCase());
 		assertTrue(result.booleanValue());
 	}
 
+	@Test
 	public void testUpperCaseStringConvertsToFalse() throws Exception {
 		Boolean result = (Boolean) converter.convert(((String) falseValues.get(0))
 				.toUpperCase());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToByteConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToByteConverterTest.java
index fb77518..a07f092 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToByteConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToByteConverterTest.java
@@ -11,26 +11,30 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.internal.databinding.conversion.StringToByteConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
-import junit.framework.TestCase;
-
 /**
  * @since 1.1
  */
-public class StringToByteConverterTest extends TestCase {
+public class StringToByteConverterTest {
 	private NumberFormat numberFormat;
 	private StringToByteConverter converter;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getIntegerInstance();
 		converter = StringToByteConverter.toByte(numberFormat, false);
 	}
 
+	@Test
 	public void testConvertsToByte() throws Exception {
 		Byte value = Byte.valueOf((byte) 1);
 		Byte result = (Byte) converter.convert(numberFormat.format(value));
@@ -38,6 +42,7 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testConvertsToBytePrimitive() throws Exception {
 		converter = StringToByteConverter.toByte(numberFormat, true);
 		Byte value = Byte.valueOf((byte) 1);
@@ -45,23 +50,28 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testFromTypeIsString() throws Exception {
 		assertEquals(String.class, converter.getFromType());
 	}
 
+	@Test
 	public void testToTypeIsShort() throws Exception {
 		assertEquals(Byte.class, converter.getToType());
 	}
 
+	@Test
 	public void testToTypeIsBytePrimitive() throws Exception {
 		converter = StringToByteConverter.toByte(true);
 		assertEquals(Byte.TYPE, converter.getToType());
 	}
 
+	@Test
 	public void testReturnsNullBoxedTypeForEmptyString() throws Exception {
 		assertNull(converter.convert(""));
 	}
 
+	@Test
 	public void testThrowsIllegalArgumentExceptionIfAskedToConvertNonString()
 			throws Exception {
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToCharacterConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToCharacterConverterTest.java
index a830a8b..3852675 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToCharacterConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToCharacterConverterTest.java
@@ -11,25 +11,29 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import org.eclipse.core.internal.databinding.conversion.StringToCharacterConverter;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
-import junit.framework.TestCase;
+import org.eclipse.core.internal.databinding.conversion.StringToCharacterConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class StringToCharacterConverterTest extends TestCase {
+public class StringToCharacterConverterTest {
 
 	private StringToCharacterConverter converter;
 	private StringToCharacterConverter primitiveConverter;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		converter = StringToCharacterConverter.toCharacter(false);
 		primitiveConverter = StringToCharacterConverter.toCharacter(true);
 	}
 
+	@Test
 	public void testConvertsToCharacter() throws Exception {
 		Character value = Character.valueOf('X');
 		Character result = (Character) converter.convert(Character
@@ -38,6 +42,7 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testConvertsToCharacterPrimitive() throws Exception {
 		Character value = Character.valueOf('Y');
 		Character result = (Character) primitiveConverter.convert(String
@@ -45,26 +50,32 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testFromTypeIsString() throws Exception {
 		assertEquals(String.class, converter.getFromType());
 	}
 
+	@Test
 	public void testToTypeIsCharacter() throws Exception {
 		assertEquals(Character.class, converter.getToType());
 	}
 
+	@Test
 	public void testToTypeIsCharacterPrimitive() throws Exception {
 		assertEquals(Character.TYPE, primitiveConverter.getToType());
 	}
 
+	@Test
 	public void testReturnsNullBoxedTypeForEmptyString() throws Exception {
 		assertNull(converter.convert(""));
 	}
 
+	@Test
 	public void testNullCharacterIsOK() throws Exception {
 		assertNull(converter.convert(null));
 	}
 
+	@Test
 	public void testNullCharacterIsNotOKForPrimitive() throws Exception {
 		try {
 			primitiveConverter.convert(null);
@@ -73,6 +84,7 @@
 		}
 	}
 
+	@Test
 	public void testThrowsIllegalArgumentExceptionIfAskedToConvertNonString()
 			throws Exception {
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTest.java
index 54127c4..9c45011 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTest.java
@@ -11,26 +11,30 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.internal.databinding.conversion.StringToNumberParser;
 import org.eclipse.core.internal.databinding.conversion.StringToNumberParser.ParseResult;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
 /**
  * @since 1.1
  */
-public class StringToNumberParserTest extends TestCase {
+public class StringToNumberParserTest {
 	private NumberFormat integerFormat;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		integerFormat = NumberFormat.getIntegerInstance();
 	}
 
+	@Test
 	public void testParseNonStringThrowsIllegalArgumentException()
 			throws Exception {
 		try {
@@ -40,12 +44,14 @@
 		}
 	}
 
+	@Test
 	public void testEmptyStringReturnsNullIfNotPrimitive() throws Exception {
 		ParseResult result = StringToNumberParser.parse("",
 				integerFormat, false);
 		assertNull(result.getNumber());
 	}
 
+	@Test
 	public void testReturnsParsePositionWhenValueCannotBeParsed()
 			throws Exception {
 		ParseResult result = StringToNumberParser.parse("adsf",
@@ -54,6 +60,7 @@
 		assertNull(result.getNumber());
 	}
 
+	@Test
 	public void testReturnsNumberWhenSuccessfullyParsed() throws Exception {
 		Integer number = Integer.valueOf(5);
 		ParseResult result = StringToNumberParser.parse(integerFormat
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTestHarness.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTestHarness.java
index 8caa7e8..7aeb964 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTestHarness.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToNumberParserTestHarness.java
@@ -11,17 +11,20 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
 import org.eclipse.core.internal.databinding.conversion.StringToNumberParser;
-
-import junit.framework.TestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public abstract class StringToNumberParserTestHarness extends TestCase {
+public abstract class StringToNumberParserTestHarness {
 
 	protected abstract Number getValidMax();
 
@@ -29,6 +32,7 @@
 
 	protected abstract boolean assertValid(Number number);
 
+	@Test
 	public void testRanges() throws Exception {
 		Number min = getValidMin();
 		Number max = getValidMax();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToShortConverterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToShortConverterTest.java
index 1d1db63..9073e9c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToShortConverterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/conversion/StringToShortConverterTest.java
@@ -11,26 +11,30 @@
 
 package org.eclipse.core.tests.internal.databinding.conversion;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.internal.databinding.conversion.StringToShortConverter;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
 /**
  * @since 1.1
  */
-public class StringToShortConverterTest extends TestCase {
+public class StringToShortConverterTest {
 	private NumberFormat numberFormat;
 	private StringToShortConverter converter;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		numberFormat = NumberFormat.getIntegerInstance();
 		converter = StringToShortConverter.toShort(numberFormat, false);
 	}
 
+	@Test
 	public void testConvertsToShort() throws Exception {
 		Short value = Short.valueOf((short) 1);
 		Short result = (Short) converter.convert(numberFormat.format(value));
@@ -38,6 +42,7 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testConvertsToShortPrimitive() throws Exception {
 		converter = StringToShortConverter.toShort(numberFormat, true);
 		Short value = Short.valueOf((short) 1);
@@ -45,23 +50,28 @@
 		assertEquals(value, result);
 	}
 
+	@Test
 	public void testFromTypeIsString() throws Exception {
 		assertEquals(String.class, converter.getFromType());
 	}
 
+	@Test
 	public void testToTypeIsShort() throws Exception {
 		assertEquals(Short.class, converter.getToType());
 	}
 
+	@Test
 	public void testToTypeIsShortPrimitive() throws Exception {
 		converter = StringToShortConverter.toShort(true);
 		assertEquals(Short.TYPE, converter.getToType());
 	}
 
+	@Test
 	public void testReturnsNullBoxedTypeForEmptyString() throws Exception {
 		assertNull(converter.convert(""));
 	}
 
+	@Test
 	public void testThrowsIllegalArgumentExceptionIfAskedToConvertNonString()
 			throws Exception {
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ConstantObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ConstantObservableValueTest.java
index 873a205..08e87fa 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ConstantObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ConstantObservableValueTest.java
@@ -20,8 +20,8 @@
 import org.eclipse.jface.databinding.conformance.delegate.IObservableValueContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
@@ -30,20 +30,15 @@
  * @since 1.1
  */
 public class ConstantObservableValueTest extends AbstractDefaultRealmTestCase {
+
+	@Test(expected = RuntimeException.class)
 	public void testConstructor_NullRealm() {
-		try {
-			new ConstantObservableValue(null, null, null);
-			fail("Constructor should throw an exception when null realm is passed in");
-		} catch (RuntimeException expected) {
-		}
+		new ConstantObservableValue(null, null, null);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite("ConstantValueTest");
-		suite.addTestSuite(ConstantObservableValueTest.class);
-		suite.addTest(UnchangeableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(new SuiteBuilder()
+				.addObservableContractTest(UnchangeableObservableValueContractTest.class, new Delegate()).build());
 	}
 
 	private static class Delegate extends
@@ -71,80 +66,88 @@
 		}
 
 		@Override
-		public void testChange_OrderOfNotifications() {
+		@Test
+	public void testChange_OrderOfNotifications() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ValueChangeEvent() {
+		@Test
+	public void testChange_ValueChangeEvent() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ValueChangeEventDiff() {
+		@Test
+	public void testChange_ValueChangeEventDiff() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ValueChangeEventFiredAfterValueIsSet() {
+		@Test
+	public void testChange_ValueChangeEventFiredAfterValueIsSet() {
 			// disabled
 		}
 
 		@Override
-		public void testRemoveValueChangeListener_RemovesListener()
+		@Test
+	public void testRemoveValueChangeListener_RemovesListener()
 				throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ChangeEvent() {
+		@Test
+	public void testChange_ChangeEvent() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_EventObservable() {
+		@Test
+	public void testChange_EventObservable() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ObservableRealmIsTheCurrentRealm() {
+		@Test
+	public void testChange_ObservableRealmIsTheCurrentRealm() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_RealmCheck() {
+		@Test
+	public void testChange_RealmCheck() {
 			// disabled
 		}
 
 		@Override
-		public void testRemoveChangeListener_RemovesListener() {
+		@Test
+	public void testRemoveChangeListener_RemovesListener() {
 			// disabled
 		}
 
 		@Override
-		public void testIsStale_RealmChecks() {
+		@Test
+	public void testIsStale_RealmChecks() {
 			// disabled
 		}
 
 		@Override
-		public void testIsStale_GetterCalled() throws Exception {
+		@Test
+	public void testIsStale_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testIsDisposed() throws Exception {
+		@Test
+	public void testIsDisposed() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testAddDisposeListener_HandleDisposeInvoked() {
+		@Test
+	public void testAddDisposeListener_HandleDisposeInvoked() {
 			// disabled
 		}
-
-		public static Test suite(IObservableValueContractDelegate delegate) {
-			return new SuiteBuilder().addObservableContractTest(
-					UnchangeableObservableValueContractTest.class, delegate)
-					.build();
-		}
 	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/DelayedObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/DelayedObservableValueTest.java
index 81feda6..e0495c6 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/DelayedObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/DelayedObservableValueTest.java
@@ -12,8 +12,9 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
@@ -26,6 +27,11 @@
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Display;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for DelayedObservableValue
@@ -39,7 +45,8 @@
 	private IObservableValue delayed;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		target = new ObservableValueStub(Realm.getDefault());
 		oldValue = new Object();
@@ -49,12 +56,14 @@
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		target.dispose();
 		target = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testIsStale_WhenTargetIsStale() {
 		assertFalse(target.isStale());
 		assertFalse(delayed.isStale());
@@ -65,6 +74,7 @@
 		assertTrue(delayed.isStale());
 	}
 
+	@Test
 	public void testIsStale_DuringDelay() {
 		assertFalse(target.isStale());
 		assertFalse(delayed.isStale());
@@ -75,10 +85,12 @@
 		assertTrue(delayed.isStale());
 	}
 
+	@Test
 	public void testGetValueType_SameAsTarget() {
 		assertEquals(target.getValueType(), delayed.getValueType());
 	}
 
+	@Test
 	public void testGetValue_FiresPendingValueChange() {
 		assertFiresPendingValueChange(new Runnable() {
 			@Override
@@ -89,6 +101,7 @@
 		});
 	}
 
+	@Test
 	public void testSetValue_PropagatesToTarget() {
 		assertEquals(oldValue, delayed.getValue());
 		assertEquals(oldValue, target.getValue());
@@ -99,6 +112,7 @@
 		assertEquals(newValue, delayed.getValue());
 	}
 
+	@Test
 	public void testSetValue_CachesGetValueFromTarget() {
 		Object overrideValue = target.overrideValue = new Object();
 
@@ -111,6 +125,7 @@
 		assertEquals(overrideValue, delayed.getValue());
 	}
 
+	@Test
 	public void testSetValue_FiresValueChangeEvent() {
 		ValueChangeEventTracker targetTracker = ValueChangeEventTracker
 				.observe(target);
@@ -128,6 +143,7 @@
 		assertEquals(newValue, delayedTracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testWait_FiresPendingValueChange() {
 		assertFiresPendingValueChange(new Runnable() {
 			@Override
@@ -218,13 +234,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DelayedObservableValueTest.class
-				.getName());
-		suite.addTestSuite(DelayedObservableValueTest.class);
-		suite.addTest(MutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableListTest.java
index 21b49dd..0fa0b18 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableListTest.java
@@ -19,8 +19,8 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.junit.Test;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
@@ -28,19 +28,14 @@
  *
  */
 public class EmptyObservableListTest {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(EmptyObservableListTest.class.getName());
-		suite.addTest(ImmutableObservableListContractTest.suite(new Delegate()));
-		return suite;
+
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(new SuiteBuilder()
+				.addObservableContractTest(ImmutableObservableListContractTest.class, new Delegate()).build());
 	}
 
 	public static class ImmutableObservableListContractTest extends
 			ObservableListContractTest {
-		public static Test suite(IObservableCollectionContractDelegate delegate) {
-			return new SuiteBuilder().addObservableContractTest(
-					ImmutableObservableListContractTest.class, delegate)
-					.build();
-		}
 
 		public ImmutableObservableListContractTest(
 				IObservableCollectionContractDelegate delegate) {
@@ -53,117 +48,140 @@
 		}
 
 		@Override
-		public void testGet_GetterCalled() {
+		@Test
+	public void testGet_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testSubList_GetterCalled() {
+		@Test
+	public void testSubList_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ChangeEvent() {
+		@Test
+	public void testChange_ChangeEvent() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_EventObservable() {
+		@Test
+	public void testChange_EventObservable() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ObservableRealmIsTheCurrentRealm() {
+		@Test
+	public void testChange_ObservableRealmIsTheCurrentRealm() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_RealmCheck() {
+		@Test
+	public void testChange_RealmCheck() {
 			// disabled
 		}
 
 		@Override
-		public void testRemoveChangeListener_RemovesListener() {
+		@Test
+	public void testRemoveChangeListener_RemovesListener() {
 			// disabled
 		}
 
 		@Override
-		public void testIndexOf_GetterCalled() {
+		@Test
+	public void testIndexOf_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testLastIndexOf_GetterCalled() {
+		@Test
+	public void testLastIndexOf_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testListIterator_GetterCalled() {
+		@Test
+	public void testListIterator_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testListIteratorAtIndex_GetterCalled() {
+		@Test
+	public void testListIteratorAtIndex_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testContains_GetterCalled() {
+		@Test
+	public void testContains_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testContainsAll_GetterCalled() {
+		@Test
+	public void testContainsAll_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testEquals_GetterCalled() {
+		@Test
+	public void testEquals_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testHashCode_GetterCalled() {
+		@Test
+	public void testHashCode_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testIsEmpty_GetterCalled() {
+		@Test
+	public void testIsEmpty_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testIterator_GetterCalled() {
+		@Test
+	public void testIterator_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testSize_GetterCalled() throws Exception {
+		@Test
+	public void testSize_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testToArray_GetterCalled() throws Exception {
+		@Test
+	public void testToArray_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testToArrayWithObjectArray_GetterCalled() throws Exception {
+		@Test
+	public void testToArrayWithObjectArray_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testIsStale_GetterCalled() throws Exception {
+		@Test
+	public void testIsStale_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testIsDisposed() throws Exception {
+		@Test
+	public void testIsDisposed() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testAddDisposeListener_HandleDisposeInvoked() {
+		@Test
+	public void testAddDisposeListener_HandleDisposeInvoked() {
 			// disabled
 		}
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableSetTest.java
index ec23508..0ca34c3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/EmptyObservableSetTest.java
@@ -19,8 +19,8 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.delegate.IObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.SuiteBuilder;
+import org.junit.Test;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
@@ -28,18 +28,14 @@
  *
  */
 public class EmptyObservableSetTest {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(EmptyObservableSetTest.class.getName());
-		suite.addTest(ImmutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
+
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(new SuiteBuilder()
+				.addObservableContractTest(ImmutableObservableSetContractTest.class, new Delegate()).build());
 	}
 
 	public static class ImmutableObservableSetContractTest extends
 			ObservableCollectionContractTest {
-		public static Test suite(IObservableCollectionContractDelegate delegate) {
-			return new SuiteBuilder().addObservableContractTest(
-					ImmutableObservableSetContractTest.class, delegate).build();
-		}
 
 		public ImmutableObservableSetContractTest(
 				IObservableCollectionContractDelegate delegate) {
@@ -52,87 +48,104 @@
 		}
 
 		@Override
-		public void testChange_ChangeEvent() {
+		@Test
+	public void testChange_ChangeEvent() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_EventObservable() {
+		@Test
+	public void testChange_EventObservable() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_ObservableRealmIsTheCurrentRealm() {
+		@Test
+	public void testChange_ObservableRealmIsTheCurrentRealm() {
 			// disabled
 		}
 
 		@Override
-		public void testChange_RealmCheck() {
+		@Test
+	public void testChange_RealmCheck() {
 			// disabled
 		}
 
 		@Override
-		public void testRemoveChangeListener_RemovesListener() {
+		@Test
+	public void testRemoveChangeListener_RemovesListener() {
 			// disabled
 		}
 
 		@Override
-		public void testContains_GetterCalled() {
+		@Test
+	public void testContains_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testContainsAll_GetterCalled() {
+		@Test
+	public void testContainsAll_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testEquals_GetterCalled() {
+		@Test
+	public void testEquals_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testHashCode_GetterCalled() {
+		@Test
+	public void testHashCode_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testIsEmpty_GetterCalled() {
+		@Test
+	public void testIsEmpty_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testIterator_GetterCalled() {
+		@Test
+	public void testIterator_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testSize_GetterCalled() {
+		@Test
+	public void testSize_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testToArray_GetterCalled() {
+		@Test
+	public void testToArray_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testToArrayWithObjectArray_GetterCalled() {
+		@Test
+	public void testToArrayWithObjectArray_GetterCalled() {
 			// disabled
 		}
 
 		@Override
-		public void testIsStale_GetterCalled() throws Exception {
+		@Test
+	public void testIsStale_GetterCalled() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testIsDisposed() throws Exception {
+		@Test
+	public void testIsDisposed() throws Exception {
 			// disabled
 		}
 
 		@Override
-		public void testAddDisposeListener_HandleDisposeInvoked() {
+		@Test
+	public void testAddDisposeListener_HandleDisposeInvoked() {
 			// disabled
 		}
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/IdentityObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/IdentityObservableSetTest.java
index 06125c7..89c4c5d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/IdentityObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/IdentityObservableSetTest.java
@@ -14,10 +14,6 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -26,12 +22,11 @@
 import org.eclipse.jface.databinding.conformance.MutableObservableSetContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 
-public class IdentityObservableSetTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(IdentityObservableSetTest.class
-				.getName());
+import junit.framework.TestSuite;
+
+public class IdentityObservableSetTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/MapEntryObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/MapEntryObservableValueTest.java
index 0575dac..5370262 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/MapEntryObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/MapEntryObservableValueTest.java
@@ -12,8 +12,9 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Observables;
@@ -29,6 +30,10 @@
 import org.eclipse.jface.databinding.conformance.ObservableStaleContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.2
@@ -44,7 +49,8 @@
 	private MapEntryObservableValue observedValue;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		this.map = new WritableMap();
 		this.observedValue = (MapEntryObservableValue) Observables
@@ -57,6 +63,7 @@
 		this.diff = p_event.diff;
 	}
 
+	@Test
 	public void testNullValue() {
 		// test entry added with value null
 		this.map.put(this.key, null);
@@ -72,6 +79,7 @@
 		assertNull(this.observedValue.getValue());
 	}
 
+	@Test
 	public void testNonNullValue() {
 		// test add non-null value
 		this.map.put(this.key, VALUE1);
@@ -89,6 +97,7 @@
 		assertSame(VALUE2, this.observedValue.getValue());
 	}
 
+	@Test
 	public void testTransitionBetweenNullAndNonNull() {
 		this.map.put(this.key, null);
 
@@ -107,6 +116,7 @@
 		assertNull(this.diff.getNewValue());
 	}
 
+	@Test
 	public void testRemoveKey() {
 		this.map.put(this.key, VALUE1);
 
@@ -117,6 +127,7 @@
 		assertNull(this.diff.getNewValue());
 	}
 
+	@Test
 	public void testGetAndSetValue() {
 		// test set null value
 		this.observedValue.setValue(null);
@@ -139,12 +150,9 @@
 		assertSame(VALUE2, this.diff.getNewValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(MapEntryObservableValueTest.class.getName());
-		suite.addTestSuite(MapEntryObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
 		suite.addTest(ObservableStaleContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/StalenessObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/StalenessObservableValueTest.java
index 61ecb2f..d199fb3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/StalenessObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/StalenessObservableValueTest.java
@@ -20,8 +20,6 @@
 import org.eclipse.jface.databinding.conformance.ObservableValueContractTest;
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 /**
@@ -29,11 +27,9 @@
  *
  * @since 1.1
  */
-public class StalenessObservableValueTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(StalenessObservableValueTest.class.getName());
+public class StalenessObservableValueTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class ObservableStub extends AbstractObservable {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableListTest.java
index 2877c4c..97c1b6a 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableListTest.java
@@ -13,12 +13,13 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -35,6 +36,10 @@
 import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.StaleEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 public class UnmodifiableObservableListTest extends
 		AbstractDefaultRealmTestCase {
@@ -42,7 +47,8 @@
 	ObservableList mutable;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		List list = new ArrayList();
@@ -53,6 +59,7 @@
 		unmodifiable = Observables.unmodifiableObservableList(mutable);
 	}
 
+	@Test
 	public void testFiresChangeEvents() throws Exception {
 		ChangeEventTracker mutableListener = new ChangeEventTracker();
 		ChangeEventTracker unmodifiableListener = new ChangeEventTracker();
@@ -67,6 +74,7 @@
 		assertEquals(1, unmodifiableListener.count);
 	}
 
+	@Test
 	public void testFiresListChangeEvents() throws Exception {
 		ListChangeEventTracker mutableListener = new ListChangeEventTracker();
 		ListChangeEventTracker unmodifiableListener = new ListChangeEventTracker();
@@ -98,6 +106,7 @@
 		assertEquals(3, unmodifiable.size());
 	}
 
+	@Test
 	public void testFiresStaleEvents() throws Exception {
 		StaleEventTracker mutableListener = new StaleEventTracker();
 		StaleEventTracker unmodifiableListener = new StaleEventTracker();
@@ -116,6 +125,7 @@
 		assertTrue(unmodifiable.isStale());
 	}
 
+	@Test
 	public void testIsStale() throws Exception {
 		assertFalse(mutable.isStale());
 		assertFalse(unmodifiable.isStale());
@@ -143,11 +153,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(UnmodifiableObservableListTest.class.getName());
-		suite.addTestSuite(UnmodifiableObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableSetTest.java
index 693a002..d23677c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableSetTest.java
@@ -14,13 +14,14 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -36,13 +37,18 @@
 import org.eclipse.jface.databinding.conformance.util.SetChangeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.StaleEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 public class UnmodifiableObservableSetTest extends AbstractDefaultRealmTestCase {
 	UnmodifiableObservableSet unmodifiable;
 	MutableObservableSet mutable;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		Set set = new HashSet();
@@ -54,6 +60,7 @@
 				.unmodifiableObservableSet(mutable);
 	}
 
+	@Test
 	public void testFiresChangeEvents() throws Exception {
 		ChangeEventTracker mutableListener = new ChangeEventTracker();
 		ChangeEventTracker unmodifiableListener = new ChangeEventTracker();
@@ -68,6 +75,7 @@
 		assertEquals(1, unmodifiableListener.count);
 	}
 
+	@Test
 	public void testFiresSetChangeEvents() throws Exception {
 		SetChangeEventTracker mutableListener = new SetChangeEventTracker();
 		SetChangeEventTracker unmodifiableListener = new SetChangeEventTracker();
@@ -97,6 +105,7 @@
 		assertEquals(3, unmodifiable.size());
 	}
 
+	@Test
 	public void testFiresStaleEvents() throws Exception {
 		StaleEventTracker mutableListener = new StaleEventTracker();
 		StaleEventTracker unmodifiableListener = new StaleEventTracker();
@@ -115,6 +124,7 @@
 		assertTrue(unmodifiable.isStale());
 	}
 
+	@Test
 	public void testIsStale() throws Exception {
 		assertFalse(mutable.isStale());
 		assertFalse(unmodifiable.isStale());
@@ -142,11 +152,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(UnmodifiableObservableSetTest.class.getName());
-		suite.addTestSuite(UnmodifiableObservableSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableCollectionContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableValueTest.java
index f874867..e2e365c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/UnmodifiableObservableValueTest.java
@@ -13,8 +13,9 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
@@ -27,6 +28,10 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.StaleEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -37,15 +42,13 @@
 
 	private UnmodifiableObservableValueStub unmodifiable;
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(UnmodifiableObservableValueTest.class.getName());
-		suite.addTestSuite(UnmodifiableObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		WrappedObservableValue wrapped = new WrappedObservableValue(Realm
@@ -53,6 +56,7 @@
 		unmodifiable = new UnmodifiableObservableValueStub(wrapped);
 	}
 
+	@Test
 	public void testFiresStaleEvents() {
 		StaleEventTracker wrappedListener = new StaleEventTracker();
 		StaleEventTracker unmodifiableListener = new StaleEventTracker();
@@ -72,6 +76,7 @@
 		assertTrue(unmodifiable.isStale());
 	}
 
+	@Test
 	public void testIsStale() {
 		assertFalse(unmodifiable.wrappedValue.isStale());
 		assertFalse(unmodifiable.isStale());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableListTest.java
index 5a4867d..6a8e4d2 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableListTest.java
@@ -13,8 +13,6 @@
 
 import java.util.ArrayList;
 
-import junit.framework.Test;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -29,9 +27,11 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 
+import junit.framework.TestSuite;
+
 public class ValidatedObservableListTest extends AbstractDefaultRealmTestCase {
-	public static Test suite() {
-		return MutableObservableListContractTest.suite(new Delegate());
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableSetTest.java
index 5619d63..9d4478c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableSetTest.java
@@ -13,8 +13,6 @@
 
 import java.util.Collections;
 
-import junit.framework.Test;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -29,9 +27,11 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 
+import junit.framework.TestSuite;
+
 public class ValidatedObservableSetTest extends AbstractDefaultRealmTestCase {
-	public static Test suite() {
-		return MutableObservableSetContractTest.suite(new Delegate());
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableValueTest.java
index 7083156..b0ff53a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/ValidatedObservableValueTest.java
@@ -11,8 +11,10 @@
 
 package org.eclipse.core.tests.internal.databinding.observable;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.databinding.observable.Diffs;
 import org.eclipse.core.databinding.observable.IObservable;
@@ -28,6 +30,10 @@
 import org.eclipse.jface.databinding.conformance.util.CurrentRealm;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -42,7 +48,8 @@
 	private Object newValue;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		oldValue = new Object();
 		newValue = new Object();
@@ -53,6 +60,7 @@
 		validated = new ValidatedObservableValue(target, validationStatus);
 	}
 
+	@Test
 	public void testConstructor_RequireObservablesOnSameRealm() {
 		CurrentRealm realm1 = new CurrentRealm(true);
 		CurrentRealm realm2 = new CurrentRealm(true);
@@ -65,6 +73,7 @@
 		}
 	}
 
+	@Test
 	public void testIsStale_WhenTargetIsStale() {
 		assertFalse(target.isStale());
 		assertFalse(validated.isStale());
@@ -75,6 +84,7 @@
 		assertTrue(validated.isStale());
 	}
 
+	@Test
 	public void testIsStale_WhileChangesPending() {
 		assertFalse(target.isStale());
 		assertFalse(validated.isStale());
@@ -96,15 +106,18 @@
 		assertFalse(validated.isStale());
 	}
 
+	@Test
 	public void testGetValueType_SameAsTarget() {
 		assertEquals(target.getValueType(), validated.getValueType());
 	}
 
+	@Test
 	public void testGetValue_InitialValue() {
 		assertEquals(oldValue, target.getValue());
 		assertEquals(oldValue, validated.getValue());
 	}
 
+	@Test
 	public void testGetValue_WhileChangesPending() {
 		assertEquals(oldValue, target.getValue());
 		assertEquals(oldValue, validated.getValue());
@@ -124,6 +137,7 @@
 		assertEquals(newValue, validated.getValue());
 	}
 
+	@Test
 	public void testSetValue_PropagatesToTarget() {
 		validated.setValue(newValue);
 
@@ -131,6 +145,7 @@
 		assertEquals(newValue, target.getValue());
 	}
 
+	@Test
 	public void testSetValue_PropagatesToTargetWhileStatusNotOK() {
 		validationStatus.setValue(ValidationStatus.error("error"));
 
@@ -141,6 +156,7 @@
 		assertFalse(validated.isStale());
 	}
 
+	@Test
 	public void testSetValue_CachesGetValueFromTarget() {
 		Object overrideValue = target.overrideValue = new Object();
 
@@ -155,6 +171,7 @@
 		assertEquals(overrideValue, validated.getValue());
 	}
 
+	@Test
 	public void testSetValue_SingleValueChangeEvent() {
 		ValueChangeEventTracker tracker = ValueChangeEventTracker
 				.observe(validated);
@@ -165,6 +182,7 @@
 		assertEquals(newValue, tracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testSetValue_SingleValueChangeEventWhileInvalid() {
 		ValueChangeEventTracker tracker = ValueChangeEventTracker
 				.observe(validated);
@@ -176,6 +194,7 @@
 		assertEquals(newValue, tracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testSetValue_FiresSingleValueChangeEventWithTargetOverride() {
 		ValueChangeEventTracker tracker = ValueChangeEventTracker
 				.observe(validated);
@@ -189,6 +208,7 @@
 		assertEquals(overrideValue, tracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testSetValue_FiresValueChangeEvent() {
 		ValueChangeEventTracker targetTracker = ValueChangeEventTracker
 				.observe(target);
@@ -206,6 +226,7 @@
 		assertEquals(newValue, validatedTracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testIsStale_MatchTargetStaleness() {
 		target.forceStale = true;
 		target.fireStale();
@@ -262,11 +283,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ValidatedObservableValueTest.class.getName());
-		suite.addTestSuite(ValidatedObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableListTest.java
index fa556e2..8a2987b 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableListTest.java
@@ -14,12 +14,15 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -37,6 +40,9 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.DisposeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -48,6 +54,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testElementTypeNull() throws Exception {
 		WritableValue observableValue = new WritableValue(new WritableList(
 				new ArrayList(), Object.class), null);
@@ -69,6 +76,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testElementTypeNotNull() throws Exception {
 		WritableValue observableValue = new WritableValue(new WritableList(
 				new ArrayList(), Object.class), null);
@@ -91,6 +99,7 @@
 	 * Asserts that the master observable value is not disposed upon disposing
 	 * its detail observable value (bug 241318).
 	 */
+	@Test
 	public void testMasterNotDisposedWhenDetailDisposed() {
 		class OuterObservable extends WritableValue {
 			boolean disposed = false;
@@ -113,6 +122,7 @@
 		assertFalse(outerObservable.disposed);
 	}
 
+	@Test
 	public void testDisposeMasterDisposesDetail() {
 		IObservableValue master = new WritableValue();
 		WritableListFactory factory = new WritableListFactory();
@@ -129,6 +139,7 @@
 		assertTrue(detailObservable.isDisposed());
 	}
 
+	@Test
 	public void testDisposeWhileFiringEvents() {
 		IObservableValue master = new WritableValue();
 		WritableListFactory factory = new WritableListFactory();
@@ -158,12 +169,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DetailObservableListTest.class
-				.getName());
-		suite.addTestSuite(DetailObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableMapTest.java
index 8df8aa4..2ec7ec8 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableMapTest.java
@@ -14,6 +14,12 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.map.IObservableMap;
 import org.eclipse.core.databinding.observable.map.WritableMap;
@@ -27,6 +33,7 @@
 import org.eclipse.core.runtime.AssertionFailedException;
 import org.eclipse.jface.databinding.conformance.util.DisposeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -39,6 +46,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testKeyValueTypeNull() throws Exception {
 		WritableValue observableValue = new WritableValue();
 
@@ -68,6 +76,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testKeyValueTypeNotNull() throws Exception {
 		WritableValue observableValue = new WritableValue();
 
@@ -90,6 +99,7 @@
 	 * Asserts that the master observable value is not disposed upon disposing
 	 * its detail observable value (bug 241318).
 	 */
+	@Test
 	public void testMasterNotDisposedWhenDetailDisposed() {
 		class OuterObservable extends WritableValue {
 			boolean disposed = false;
@@ -112,6 +122,7 @@
 		assertFalse(outerObservable.disposed);
 	}
 
+	@Test
 	public void testDisposeMasterDisposesDetail() {
 		IObservableValue master = new WritableValue();
 		WritableMapFactory factory = new WritableMapFactory();
@@ -128,6 +139,7 @@
 		assertTrue(detailObservable.isDisposed());
 	}
 
+	@Test
 	public void testDisposeWhileFiringEvents() {
 		IObservableValue master = new WritableValue();
 		WritableMapFactory factory = new WritableMapFactory();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableSetTest.java
index a8c5200..7ec640e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableSetTest.java
@@ -14,13 +14,16 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
 import org.eclipse.core.databinding.observable.Realm;
@@ -38,6 +41,9 @@
 import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableCollectionContractDelegate;
 import org.eclipse.jface.databinding.conformance.util.DisposeEventTracker;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -50,6 +56,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testElementTypeNull() throws Exception {
 		WritableValue observableValue = new WritableValue(new WritableSet(
 				new HashSet(), Object.class), null);
@@ -77,6 +84,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testElementTypeNotNull() throws Exception {
 		WritableValue observableValue = new WritableValue(new WritableSet(
 				new HashSet(), Object.class), null);
@@ -99,6 +107,7 @@
 	 * Asserts that the master observable value is not disposed upon disposing
 	 * its detail observable value (bug 241318).
 	 */
+	@Test
 	public void testMasterNotDisposedWhenDetailDisposed() {
 		class OuterObservable extends WritableValue {
 			boolean disposed = false;
@@ -121,6 +130,7 @@
 		assertFalse(outerObservable.disposed);
 	}
 
+	@Test
 	public void testDisposeMasterDisposesDetail() {
 		IObservableValue master = new WritableValue();
 		WritableSetFactory factory = new WritableSetFactory();
@@ -137,6 +147,7 @@
 		assertTrue(detailObservable.isDisposed());
 	}
 
+	@Test
 	public void testDisposeWhileFiringEvents() {
 		IObservableValue master = new WritableValue();
 		WritableSetFactory factory = new WritableSetFactory();
@@ -166,11 +177,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DetailObservableSetTest.class.getName());
-		suite.addTestSuite(DetailObservableSetTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableCollectionContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableValueTest.java
index 40f3227..402c053 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/DetailObservableValueTest.java
@@ -15,8 +15,10 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -33,6 +35,10 @@
 import org.eclipse.jface.databinding.conformance.util.DisposeEventTracker;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -41,11 +47,13 @@
 	private WritableValue outerObservable;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		outerObservable = new WritableValue();
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		WritableValueFactory factory = new WritableValueFactory();
 		outerObservable.setValue("");
@@ -60,6 +68,7 @@
 		assertEquals("inner value", value, innerObservable.getValue());
 	}
 
+	@Test
 	public void testGetValueType() throws Exception {
 		DetailObservableValue detailObservable = new DetailObservableValue(
 				outerObservable, null, String.class);
@@ -71,6 +80,7 @@
 	 * type checking is performed and the value type is always <code>null</code>
 	 * .
 	 */
+	@Test
 	public void testGetValueTypeNullValueType() throws Exception {
 		WritableValueFactory factory = new WritableValueFactory();
 		DetailObservableValue detailObservable = new DetailObservableValue(
@@ -95,6 +105,7 @@
 	 * Asserts that the master observable value is not disposed upon disposing
 	 * its detail observable value (bug 241318).
 	 */
+	@Test
 	public void testMasterNotDisposedWhenDetailDisposed() {
 		class OuterObservable extends WritableValue {
 			boolean disposed = false;
@@ -117,6 +128,7 @@
 		assertFalse(outerObservable.disposed);
 	}
 
+	@Test
 	public void testDisposeMasterDisposesDetail() {
 		IObservableValue master = new WritableValue();
 		WritableValueFactory factory = new WritableValueFactory();
@@ -133,6 +145,7 @@
 		assertTrue(detailObservable.isDisposed());
 	}
 
+	@Test
 	public void testDisposeWhileFiringEvents() {
 		IObservableValue master = new WritableValue();
 		WritableValueFactory factory = new WritableValueFactory();
@@ -168,12 +181,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(DetailObservableValueTest.class
-				.getName());
-		suite.addTestSuite(DetailObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class DetailObservableValueStub extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/ListDetailValueObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/ListDetailValueObservableListTest.java
index 13ecbce..f66de7e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/ListDetailValueObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/ListDetailValueObservableListTest.java
@@ -11,13 +11,17 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.IObservableCollection;
@@ -34,6 +38,9 @@
 import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.3
@@ -41,14 +48,11 @@
 public class ListDetailValueObservableListTest extends
 		AbstractDefaultRealmTestCase {
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				ListDetailValueObservableListTest.class.getName());
-		suite.addTestSuite(ListDetailValueObservableListTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(ObservableListContractTest.suite(new Delegate()));
-		return suite;
 	}
 
+	@Test
 	public void testUnmodifiability() {
 		WritableList masterObservableList = new WritableList();
 		masterObservableList.add(new SimplePerson());
@@ -93,6 +97,7 @@
 		}
 	}
 
+	@Test
 	public void testGetElementType() {
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
 				new WritableList(), BeansObservables.valueFactory("name"),
@@ -101,6 +106,7 @@
 		assertSame(String.class, ldol.getElementType());
 	}
 
+	@Test
 	public void testGetObserved() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -110,6 +116,7 @@
 		assertSame(masterList, ldol.getObserved());
 	}
 
+	@Test
 	public void testMasterListInitiallyNotEmpty() {
 		WritableList masterList = new WritableList();
 		SimplePerson person = new SimplePerson();
@@ -123,6 +130,7 @@
 		assertEquals(person.getName(), ldol.get(0));
 	}
 
+	@Test
 	public void testAddRemove() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -156,6 +164,7 @@
 		assertTrue(ldol.isEmpty());
 	}
 
+	@Test
 	public void testChangeDetail() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -176,6 +185,7 @@
 		assertEquals(p2.getName(), ldol.get(0));
 	}
 
+	@Test
 	public void testSet() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -194,6 +204,7 @@
 		assertEquals(person.getName(), ldol.get(0));
 	}
 
+	@Test
 	public void testDuplicateMasterElements() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -228,6 +239,7 @@
 		assertEquals("name3", master.getName());
 	}
 
+	@Test
 	public void testDetailObservableChangeEvent() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -291,6 +303,7 @@
 		}
 	}
 
+	@Test
 	public void testMasterNull() {
 		WritableList masterObservableList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
@@ -303,6 +316,7 @@
 		assertNull(ldol.get(0));
 	}
 
+	@Test
 	public void testDetailObservableValuesAreDisposed() {
 		final List detailObservables = new ArrayList();
 		IObservableFactory detailValueFactory = new IObservableFactory() {
@@ -340,6 +354,7 @@
 		assertTrue(((WritableValue) detailObservables.get(1)).isDisposed());
 	}
 
+	@Test
 	public void testDisposeOnMasterDisposed() {
 		WritableList masterList = new WritableList();
 		ListDetailValueObservableList ldol = new ListDetailValueObservableList(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/MapDetailValueObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/MapDetailValueObservableMapTest.java
index 5140e98..52433de 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/MapDetailValueObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/MapDetailValueObservableMapTest.java
@@ -11,12 +11,15 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.map.WritableMap;
@@ -26,6 +29,7 @@
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.3
@@ -33,13 +37,7 @@
 public class MapDetailValueObservableMapTest extends
 		AbstractDefaultRealmTestCase {
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				MapDetailValueObservableMapTest.class.getName());
-		suite.addTestSuite(MapDetailValueObservableMapTest.class);
-		return suite;
-	}
-
+	@Test
 	public void testGetKeyType() {
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
 				new WritableMap(SimplePerson.class, SimplePerson.class),
@@ -48,6 +46,7 @@
 		assertSame(SimplePerson.class, mdom.getKeyType());
 	}
 
+	@Test
 	public void testGetValueType() {
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
 				new WritableMap(), BeansObservables.valueFactory("name"),
@@ -56,6 +55,7 @@
 		assertSame(String.class, mdom.getValueType());
 	}
 
+	@Test
 	public void testGetObserved() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -65,6 +65,7 @@
 		assertSame(masterMap, mdom.getObserved());
 	}
 
+	@Test
 	public void testMasterSetInitiallyNotEmpty() {
 		WritableMap masterMap = new WritableMap();
 		SimplePerson person = new SimplePerson();
@@ -78,6 +79,7 @@
 		assertEquals(person.getName(), mdom.get(person));
 	}
 
+	@Test
 	public void testAddRemove() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -111,6 +113,7 @@
 		assertTrue(mdom.isEmpty());
 	}
 
+	@Test
 	public void testChangeDetail() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -131,6 +134,7 @@
 		assertEquals(p2.getName(), mdom.get(p1));
 	}
 
+	@Test
 	public void testPut() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -149,6 +153,7 @@
 		assertEquals(person.getName(), mdom.get(person));
 	}
 
+	@Test
 	public void testContainsValue() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -168,6 +173,7 @@
 		assertFalse(mdom.containsValue(person.getName()));
 	}
 
+	@Test
 	public void testRemove() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -194,6 +200,7 @@
 		assertTrue(mdom.containsKey(p2));
 	}
 
+	@Test
 	public void testDetailObservableChangeEvent() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -232,6 +239,7 @@
 		assertEquals("new name", changeTracker.event.diff.getNewValue(person));
 	}
 
+	@Test
 	public void testMasterNull() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
@@ -243,6 +251,7 @@
 		assertNull(mdom.get(null));
 	}
 
+	@Test
 	public void testDetailObservableValuesAreDisposed() {
 		final Map detailObservables = new HashMap();
 		IObservableFactory detailValueFactory = new IObservableFactory() {
@@ -292,6 +301,7 @@
 				.isDisposed());
 	}
 
+	@Test
 	public void testDisposeOnMasterDisposed() {
 		WritableMap masterMap = new WritableMap();
 		MapDetailValueObservableMap mdom = new MapDetailValueObservableMap(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/SetDetailValueObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/SetDetailValueObservableMapTest.java
index b06950c..3fd7325 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/SetDetailValueObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/observable/masterdetail/SetDetailValueObservableMapTest.java
@@ -11,12 +11,15 @@
 
 package org.eclipse.core.tests.internal.databinding.observable.masterdetail;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.util.HashMap;
 import java.util.Map;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory;
@@ -26,6 +29,7 @@
 import org.eclipse.jface.databinding.conformance.util.MapChangeEventTracker;
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.3
@@ -33,13 +37,7 @@
 public class SetDetailValueObservableMapTest extends
 		AbstractDefaultRealmTestCase {
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(SetDetailValueObservableMapTest.class
-				.getName());
-		suite.addTestSuite(SetDetailValueObservableMapTest.class);
-		return suite;
-	}
-
+	@Test
 	public void testGetValueType() {
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
 				new WritableSet(), BeansObservables.valueFactory("name"),
@@ -48,6 +46,7 @@
 		assertSame(String.class, sdom.getValueType());
 	}
 
+	@Test
 	public void testGetObserved() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -58,6 +57,7 @@
 		assertSame(masterKeySet, sdom.getObserved());
 	}
 
+	@Test
 	public void testMasterSetInitiallyNotEmpty() {
 		WritableSet masterKeySet = new WritableSet();
 		SimplePerson person = new SimplePerson();
@@ -72,6 +72,7 @@
 		assertEquals(person.getName(), sdom.get(person));
 	}
 
+	@Test
 	public void testAddRemove() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -106,6 +107,7 @@
 		assertTrue(sdom.isEmpty());
 	}
 
+	@Test
 	public void testChangeDetail() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -127,6 +129,7 @@
 		assertEquals(p2.getName(), sdom.get(p2));
 	}
 
+	@Test
 	public void testPut() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -146,6 +149,7 @@
 		assertEquals(person.getName(), sdom.get(person));
 	}
 
+	@Test
 	public void testContainsValue() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -166,6 +170,7 @@
 		assertFalse(sdom.containsValue(person.getName()));
 	}
 
+	@Test
 	public void testRemove() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -193,6 +198,7 @@
 		assertTrue(sdom.containsKey(p2));
 	}
 
+	@Test
 	public void testDetailObservableChangeEvent() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -232,6 +238,7 @@
 		assertEquals("new name", changeTracker.event.diff.getNewValue(person));
 	}
 
+	@Test
 	public void testMasterNull() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
@@ -244,6 +251,7 @@
 		assertNull(sdom.get(null));
 	}
 
+	@Test
 	public void testDetailObservableValuesAreDisposed() {
 		final Map detailObservables = new HashMap();
 		IObservableFactory detailValueFactory = new IObservableFactory() {
@@ -293,6 +301,7 @@
 				.isDisposed());
 	}
 
+	@Test
 	public void testDisposeOnMasterDisposed() {
 		WritableSet masterKeySet = new WritableSet();
 		SetDetailValueObservableMap sdom = new SetDetailValueObservableMap(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java
index 8a02d8f..c1b7912 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/ListSimpleValueObservableListTest.java
@@ -15,10 +15,12 @@
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.core.tests.internal.databinding.beans.Bean;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 public class ListSimpleValueObservableListTest extends
 		AbstractDefaultRealmTestCase {
 
+	@Test
 	public void testBug301410() {
 		BeanProperties.value(Bean.class, "value").observeDetail(
 				new WritableList()).dispose();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/MapSimpleValueObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/MapSimpleValueObservableMapTest.java
index 727b2ad..5c811ae 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/MapSimpleValueObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/MapSimpleValueObservableMapTest.java
@@ -12,14 +12,19 @@
 
 package org.eclipse.core.tests.internal.databinding.property.value;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
 import org.eclipse.core.databinding.observable.map.WritableMap;
 import org.eclipse.core.internal.databinding.property.value.MapSimpleValueObservableMap;
 import org.eclipse.core.internal.databinding.property.value.SelfValueProperty;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 public class MapSimpleValueObservableMapTest extends
 		AbstractDefaultRealmTestCase {
 
+	@Test
 	public void testGetKeyValueType() {
 		WritableMap masterMap = new WritableMap(String.class, Integer.class);
 		SelfValueProperty detailProperty = new SelfValueProperty(Object.class);
@@ -31,6 +36,7 @@
 		assertEquals(detailProperty.getValueType(), detailMap.getValueType());
 	}
 
+	@Test
 	public void testPut_ReplacedOldValue() {
 		// Create any simple master map and detail property.
 		WritableMap masterMap = new WritableMap(String.class, Integer.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/SetSimpleValueObservableMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/SetSimpleValueObservableMapTest.java
index c92e9b3..7a2443e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/SetSimpleValueObservableMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/property/value/SetSimpleValueObservableMapTest.java
@@ -11,14 +11,18 @@
 
 package org.eclipse.core.tests.internal.databinding.property.value;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.set.WritableSet;
 import org.eclipse.core.internal.databinding.property.value.SelfValueProperty;
 import org.eclipse.core.internal.databinding.property.value.SetSimpleValueObservableMap;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 public class SetSimpleValueObservableMapTest extends
 		AbstractDefaultRealmTestCase {
 
+	@Test
 	public void testGetKeyValueType() {
 		WritableSet masterSet = WritableSet.withElementType(String.class);
 		SelfValueProperty detailProperty = new SelfValueProperty(Object.class);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java
index 4cd3abb..d1c87f7 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/AbstractStringToNumberValidatorTest.java
@@ -11,12 +11,14 @@
 
 package org.eclipse.core.tests.internal.databinding.validation;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 
 import org.eclipse.core.databinding.conversion.StringToNumberConverter;
 import org.eclipse.core.internal.databinding.validation.AbstractStringToNumberValidator;
 import org.eclipse.core.internal.databinding.validation.NumberFormatConverter;
 import org.eclipse.core.runtime.IStatus;
+import org.junit.Test;
 
 /**
  * Tests for AbstractStringToNumberValidator. Most tests should be included in
@@ -24,12 +26,13 @@
  *
  * @since 3.2
  */
-public class AbstractStringToNumberValidatorTest extends TestCase {
+public class AbstractStringToNumberValidatorTest {
 	/**
 	 * Test for bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=194353.
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testErrorMessagesAreNotCached() throws Exception {
 		NumberFormatConverter c = StringToNumberConverter.toInteger(false);
 		ValidatorStub v = new ValidatorStub(c);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/NumberToNumberValidatorTestHarness.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/NumberToNumberValidatorTestHarness.java
index abd3cd1..4ed2832 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/NumberToNumberValidatorTestHarness.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/NumberToNumberValidatorTestHarness.java
@@ -11,25 +11,30 @@
 
 package org.eclipse.core.tests.internal.databinding.validation;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.eclipse.core.databinding.validation.IValidator;
 import org.eclipse.core.internal.databinding.validation.NumberToNumberValidator;
 import org.eclipse.core.runtime.IStatus;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public abstract class NumberToNumberValidatorTestHarness extends TestCase {
+public abstract class NumberToNumberValidatorTestHarness {
 	protected abstract NumberToNumberValidator doGetToPrimitiveValidator(Class fromType);
 	protected abstract NumberToNumberValidator doGetToBoxedTypeValidator(Class fromType);
 	protected abstract Number doGetOutOfRangeNumber();
 
+	@Test
 	public void testValidateNullForBoxedTypeIsOK() throws Exception {
 		IStatus status = doGetToBoxedTypeValidator(Integer.class).validate(null);
 		assertTrue(status.isOK());
 	}
 
+	@Test
 	public void testValidateNullForPrimitiveThrowsIllegalArgumentException()
 			throws Exception {
 		IValidator validator = doGetToPrimitiveValidator(Integer.class);
@@ -47,10 +52,12 @@
 		}
 	}
 
+	@Test
 	public void testValidReturnsOK() throws Exception {
 		assertTrue(doGetToBoxedTypeValidator(Integer.class).validate(Integer.valueOf(1)).isOK());
 	}
 
+	@Test
 	public void testOutOfRangeReturnsError() throws Exception {
 		Number number = doGetOutOfRangeNumber();
 
@@ -65,6 +72,7 @@
 		assertTrue(status.getMessage() != null);
 	}
 
+	@Test
 	public void testValidateIncorrectTypeThrowsIllegalArgumentException() throws Exception {
 		try {
 			doGetToBoxedTypeValidator(Integer.class).validate("");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToCharacterValidatorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToCharacterValidatorTest.java
index 7e30325..5492be4 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToCharacterValidatorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToCharacterValidatorTest.java
@@ -11,22 +11,24 @@
 
 package org.eclipse.core.tests.internal.databinding.validation;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.internal.databinding.conversion.StringToCharacterConverter;
 import org.eclipse.core.internal.databinding.validation.StringToCharacterValidator;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
-public class StringToCharacterValidatorTest extends TestCase {
+public class StringToCharacterValidatorTest {
 
 	private StringToCharacterValidator validator;
 	private StringToCharacterValidator primitiveValidator;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		StringToCharacterConverter converter = StringToCharacterConverter
 				.toCharacter(false);
 		StringToCharacterConverter primitiveConverter = StringToCharacterConverter
@@ -35,30 +37,37 @@
 		primitiveValidator = new StringToCharacterValidator(primitiveConverter);
 	}
 
+	@Test
 	public void testValidatesCharacter() throws Exception {
 		assertTrue(validator.validate("X").isOK());
 	}
 
+	@Test
 	public void testValidatesCharacterPrimitive() throws Exception {
 		assertTrue(primitiveValidator.validate("X").isOK());
 	}
 
+	@Test
 	public void testNullCharacterIsValid() throws Exception {
 		assertTrue(validator.validate(null).isOK());
 	}
 
+	@Test
 	public void testEmptyStringCharacterIsValid() throws Exception {
 		assertTrue(validator.validate("").isOK());
 	}
 
+	@Test
 	public void testNullCharacterIsInvalidForPrimitive() throws Exception {
 		assertFalse(primitiveValidator.validate(null).isOK());
 	}
 
+	@Test
 	public void testNonStringIsInvalid() throws Exception {
 		assertFalse(primitiveValidator.validate(Integer.valueOf(4)).isOK());
 	}
 
+	@Test
 	public void testLongerThanOneCharacterIsInvalid() throws Exception {
 		assertFalse(primitiveValidator.validate("XYZ").isOK());
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToNumberValidatorTestHarness.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToNumberValidatorTestHarness.java
index 549d157..0ab2362 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToNumberValidatorTestHarness.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/internal/databinding/validation/StringToNumberValidatorTestHarness.java
@@ -11,10 +11,16 @@
 
 package org.eclipse.core.tests.internal.databinding.validation;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.validation.IValidator;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.tests.databinding.BindingTestSetup;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -23,13 +29,15 @@
  *
  * @since 1.1
  */
-public abstract class StringToNumberValidatorTestHarness extends TestCase {
+public abstract class StringToNumberValidatorTestHarness {
 	private NumberFormat numberFormat;
 	private IValidator validator;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Rule
+	public BindingTestSetup testSetup = new BindingTestSetup();
+
+	@Before
+	public void setUp() throws Exception {
 
 		numberFormat = setupNumberFormat();
 		validator = setupValidator(numberFormat);
@@ -71,12 +79,14 @@
 	 */
 	protected abstract Number getInRangeNumber();
 
+	@Test
 	public void testInvalidValueReturnsError() throws Exception {
 		IStatus status = validator.validate(getInvalidString());
-		assertEquals("error severify", IStatus.ERROR, status.getSeverity());
+		assertEquals("error severity", IStatus.ERROR, status.getSeverity());
 		assertNotNull("message not null", status.getMessage());
 	}
 
+	@Test
 	public void testOutOfRangeValueReturnsError() throws Exception {
 		String string = numberFormat.format(getOutOfRangeNumber());
 		IStatus status = validator.validate(string);
@@ -84,6 +94,7 @@
 		assertNotNull(status.getMessage());
 	}
 
+	@Test
 	public void testValidateValidValue() throws Exception {
 		String string = numberFormat.format(getInRangeNumber());
 		assertTrue(validator.validate(string).isOK());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java
index 43f678c..e9c0059 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractDefaultRealmTestCase.java
@@ -15,25 +15,26 @@
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.swt.widgets.Display;
-
-import junit.framework.TestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
 
 /**
  * Base class that sets the default realm to be the SWT realm.
  *
  * @since 3.3
  */
-public abstract class AbstractDefaultRealmTestCase extends TestCase {
+public abstract class AbstractDefaultRealmTestCase {
 	private Realm previousRealm;
 
+	@Rule
+	public BindingTestSetup testSetup = new BindingTestSetup();
+
 	/**
 	 * Sets the default realm to be the realm for the default display.
-	 *
-	 * @see junit.framework.TestCase#setUp()
 	 */
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 
 		previousRealm = Realm.getDefault();
 
@@ -56,9 +57,8 @@
 	/**
 	 * Removes the default realm.
 	 */
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
+	@After
+	public void tearDown() throws Exception {
 
 		RealmTester.setDefault(previousRealm);
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractJUnit4RealmTestCase.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractJUnit4RealmTestCase.java
deleted file mode 100644
index eec4600..0000000
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractJUnit4RealmTestCase.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Brad Reynolds 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:
- *     Brad Reynolds - initial API and implementation
- ******************************************************************************/
-
-package org.eclipse.jface.tests.databinding;
-
-import org.eclipse.core.databinding.observable.Realm;
-import org.eclipse.jface.databinding.conformance.util.RealmTester;
-import org.eclipse.jface.databinding.swt.DisplayRealm;
-import org.eclipse.swt.widgets.Display;
-import org.junit.After;
-import org.junit.Before;
-
-/**
- * Base class that sets the default realm to be the SWT realm.
- *
- * @since 3.3
- */
-public class AbstractJUnit4RealmTestCase {
-	private Realm previousRealm;
-
-	/**
-	 * Sets the default realm to be the realm for the default display.
-	 *
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	@Before
-	public void setUp() throws Exception {
-
-		previousRealm = Realm.getDefault();
-
-		Display display = Display.getCurrent() != null
-				&& !Display.getCurrent().isDisposed() ? Display.getCurrent()
-				: Display.getDefault();
-		RealmTester.setDefault(DisplayRealm.getRealm(display));
-	}
-
-	/**
-	 * Runs all currently-enqueued asynchronous events
-	 */
-	protected void runAsync() {
-		Display display = Display.getCurrent();
-
-		while (display.readAndDispatch()) {
-		}
-	}
-
-	/**
-	 * Removes the default realm.
-	 */
-	@After
-	public void tearDown() throws Exception {
-		RealmTester.setDefault(previousRealm);
-	}
-}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractSWTTestCase.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractSWTTestCase.java
index 4c509fd..a21d4dd 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractSWTTestCase.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/AbstractSWTTestCase.java
@@ -13,6 +13,8 @@
 package org.eclipse.jface.tests.databinding;
 
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
 
 /**
  * Abstract test case that handles disposing of the Shell after each test.
@@ -23,12 +25,14 @@
 	private Shell shell;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (shell != null && !shell.isDisposed()) {
 			shell.dispose();
 		}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSetup.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSetup.java
index ac99e6f..f2b8d7c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSetup.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSetup.java
@@ -11,63 +11,48 @@
 
 package org.eclipse.jface.tests.databinding;
 
+import static org.junit.Assert.fail;
+
 import java.util.Locale;
 
 import org.eclipse.core.databinding.util.ILogger;
 import org.eclipse.core.databinding.util.Policy;
 import org.eclipse.core.runtime.IStatus;
-
-import junit.extensions.TestSetup;
-import junit.framework.Test;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
 
 /**
  * @since 3.2
  *
  */
-public class BindingTestSetup extends TestSetup {
+public class BindingTestSetup extends TestWatcher {
 
 	private Locale oldLocale;
 	private ILogger oldLogger;
 	private org.eclipse.jface.util.ILogger oldJFaceLogger;
 
-	public BindingTestSetup(Test test) {
-		super(test);
-	}
-
 	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	protected void starting(Description description) {
 		oldLocale = Locale.getDefault();
 		Locale.setDefault(Locale.US);
 		oldLogger = Policy.getLog();
-		Policy.setLog(new ILogger() {
-			@Override
-			public void log(IStatus status) {
-				// we are not expecting anything in the log while we test.
-				if (status.getException() != null) {
-					throw new RuntimeException(status.getException());
-				}
-				fail();
-			}
-		});
+		Policy.setLog(this::log);
 		oldJFaceLogger = org.eclipse.jface.util.Policy.getLog();
-		org.eclipse.jface.util.Policy.setLog(new org.eclipse.jface.util.ILogger(){
-			@Override
-			public void log(IStatus status) {
-				// we are not expecting anything in the log while we test.
-				if (status.getException() != null) {
-					throw new RuntimeException(status.getException());
-				}
-				fail();
-			}
-		});
+		org.eclipse.jface.util.Policy.setLog(this::log);
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	protected void finished(Description description) {
 		Locale.setDefault(oldLocale);
 		Policy.setLog(oldLogger);
 		org.eclipse.jface.util.Policy.setLog(oldJFaceLogger);
-		super.tearDown();
+	}
+
+	private void log(IStatus status) {
+		// we are not expecting anything in the log while we test.
+		if (status.getException() != null) {
+			throw new RuntimeException(status.getException());
+		}
+		fail();
 	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
index cd4ed20..841028c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuite.java
@@ -23,36 +23,265 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding;
 
+import org.eclipse.core.tests.databinding.AggregateValidationStatusTest;
+import org.eclipse.core.tests.databinding.BindingTest;
+import org.eclipse.core.tests.databinding.DatabindingContextTest;
+import org.eclipse.core.tests.databinding.ListBindingTest;
+import org.eclipse.core.tests.databinding.ObservablesManagerTest;
 import org.eclipse.core.tests.databinding.SideEffectTest;
+import org.eclipse.core.tests.databinding.UpdateListStrategyTest;
+import org.eclipse.core.tests.databinding.UpdateSetStrategyTest;
+import org.eclipse.core.tests.databinding.UpdateStrategyTest;
+import org.eclipse.core.tests.databinding.UpdateValueStrategyTest;
+import org.eclipse.core.tests.databinding.ValueBindingTest;
+import org.eclipse.core.tests.databinding.beans.AnonymousBeanValuePropertyTest;
+import org.eclipse.core.tests.databinding.beans.AnonymousPojoValuePropertyTest;
+import org.eclipse.core.tests.databinding.beans.BeanPropertiesTest;
+import org.eclipse.core.tests.databinding.beans.BeansObservablesTest;
+import org.eclipse.core.tests.databinding.beans.PojoObservablesTest;
+import org.eclipse.core.tests.databinding.beans.PojoPropertiesTest;
+import org.eclipse.core.tests.databinding.beans.SetOnlyJavaBeanTest;
+import org.eclipse.core.tests.databinding.conversion.NumberToStringConverterTest;
+import org.eclipse.core.tests.databinding.conversion.StringToNumberConverterTest;
+import org.eclipse.core.tests.databinding.observable.AbstractObservableTest;
+import org.eclipse.core.tests.databinding.observable.ChangeSupportTest;
+import org.eclipse.core.tests.databinding.observable.DecoratingObservableTest;
+import org.eclipse.core.tests.databinding.observable.DiffsTest;
+import org.eclipse.core.tests.databinding.observable.Diffs_ListDiffTests;
+import org.eclipse.core.tests.databinding.observable.ObservableTrackerTest;
+import org.eclipse.core.tests.databinding.observable.ObservablesTest;
+import org.eclipse.core.tests.databinding.observable.RealmTest;
+import org.eclipse.core.tests.databinding.observable.list.AbstractObservableListTest;
+import org.eclipse.core.tests.databinding.observable.list.ComputedListTest;
+import org.eclipse.core.tests.databinding.observable.list.ListDiffTest;
+import org.eclipse.core.tests.databinding.observable.list.ListDiffVisitorTest;
+import org.eclipse.core.tests.databinding.observable.list.MultiListTest;
+import org.eclipse.core.tests.databinding.observable.list.ObservableListTest;
+import org.eclipse.core.tests.databinding.observable.list.WritableListTest;
+import org.eclipse.core.tests.databinding.observable.map.AbstractObservableMapTest;
+import org.eclipse.core.tests.databinding.observable.map.BidiObservableMapTest;
+import org.eclipse.core.tests.databinding.observable.map.CompositeMapTest;
+import org.eclipse.core.tests.databinding.observable.map.ComputedObservableMapTest;
+import org.eclipse.core.tests.databinding.observable.map.ObservableMapTest;
+import org.eclipse.core.tests.databinding.observable.map.WritableMapTest;
+import org.eclipse.core.tests.databinding.observable.set.ComputedSetTest;
+import org.eclipse.core.tests.databinding.observable.set.WritableSetTest;
+import org.eclipse.core.tests.databinding.observable.value.AbstractObservableValueTest;
+import org.eclipse.core.tests.databinding.observable.value.AbstractVetoableValueTest;
+import org.eclipse.core.tests.databinding.observable.value.ComputedValueTest;
+import org.eclipse.core.tests.databinding.observable.value.DateAndTimeObservableValueTest;
+import org.eclipse.core.tests.databinding.observable.value.DuplexingObservableValueTest;
+import org.eclipse.core.tests.databinding.observable.value.WritableValueTest;
+import org.eclipse.core.tests.databinding.util.PolicyTest;
+import org.eclipse.core.tests.databinding.validation.MultiValidatorTest;
+import org.eclipse.core.tests.databinding.validation.ValidationStatusTest;
+import org.eclipse.core.tests.internal.databinding.BindingMessagesTest;
+import org.eclipse.core.tests.internal.databinding.BindingStatusTest;
+import org.eclipse.core.tests.internal.databinding.ConverterValuePropertyTest;
+import org.eclipse.core.tests.internal.databinding.DifferentRealmsBindingTest;
+import org.eclipse.core.tests.internal.databinding.IdentityMapTest;
+import org.eclipse.core.tests.internal.databinding.IdentitySetTest;
+import org.eclipse.core.tests.internal.databinding.QueueTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanObservableListDecoratorTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanObservableSetDecoratorTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanObservableValueDecoratorTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyHelperTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyListenerSupportTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyListenerTest;
+import org.eclipse.core.tests.internal.databinding.beans.BeanValuePropertyTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableArrayBasedListTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableArrayBasedSetTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableListTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableSetTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.beans.JavaBeanPropertyObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.conversion.DateConversionSupportTest;
+import org.eclipse.core.tests.internal.databinding.conversion.IdentityConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.IntegerToStringConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToBigDecimalTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToBigIntegerConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToByteConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToDoubleConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToFloatConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToIntegerConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToLongConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.NumberToShortConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.ObjectToPrimitiveValidatorTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StatusToStringConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToBooleanConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToByteConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToCharacterConverterTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserByteTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserDoubleTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserFloatTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserIntegerTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserLongTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserShortTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserTest;
+import org.eclipse.core.tests.internal.databinding.conversion.StringToShortConverterTest;
+import org.eclipse.core.tests.internal.databinding.observable.ConstantObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.DelayedObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.MapEntryObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.UnmodifiableObservableListTest;
+import org.eclipse.core.tests.internal.databinding.observable.UnmodifiableObservableSetTest;
+import org.eclipse.core.tests.internal.databinding.observable.UnmodifiableObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.ValidatedObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableListTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableSetTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableValueTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.ListDetailValueObservableListTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.MapDetailValueObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.observable.masterdetail.SetDetailValueObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.property.value.ListSimpleValueObservableListTest;
+import org.eclipse.core.tests.internal.databinding.property.value.MapSimpleValueObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.property.value.SetSimpleValueObservableMapTest;
+import org.eclipse.core.tests.internal.databinding.validation.AbstractStringToNumberValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToByteValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToDoubleValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToFloatValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToIntegerValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToLongValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToShortValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.NumberToUnboundedNumberValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToByteValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToCharacterValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToDoubleValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToFloatValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToIntegerValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToLongValidatorTest;
+import org.eclipse.core.tests.internal.databinding.validation.StringToShortValidatorTest;
+import org.eclipse.jface.tests.databinding.preference.PreferencePageSupportTest;
+import org.eclipse.jface.tests.databinding.scenarios.BindingScenariosTestSuite;
+import org.eclipse.jface.tests.databinding.swt.SWTObservablesTest;
+import org.eclipse.jface.tests.databinding.swt.WidgetObservableThreadTest;
+import org.eclipse.jface.tests.databinding.swt.WidgetPropertiesTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableListContentProviderTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableListTreeContentProviderTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableMapLabelProviderTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableSetContentProviderTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableSetTreeContentProviderTest;
+import org.eclipse.jface.tests.databinding.viewers.ObservableValueEditingSupportTest;
+import org.eclipse.jface.tests.databinding.viewers.ViewerSupportTest;
+import org.eclipse.jface.tests.databinding.viewers.ViewersObservablesTest;
+import org.eclipse.jface.tests.databinding.wizard.WizardPageSupportTest;
+import org.eclipse.jface.tests.examples.databinding.mask.internal.EditMaskLexerAndTokenTest;
+import org.eclipse.jface.tests.examples.databinding.mask.internal.EditMaskParserTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ButtonObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueSelectionTest;
+import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueTextTest;
+import org.eclipse.jface.tests.internal.databinding.swt.CComboSingleSelectionObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.CLabelObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueSelectionTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueTextTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ComboSingleSelectionObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ControlObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.DateTimeCalendarObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.DateTimeDateObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.DateTimeSelectionPropertyTest;
+import org.eclipse.jface.tests.internal.databinding.swt.DateTimeTimeObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.GroupObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.LabelObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ListSingleSelectionObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.SWTDelayedObservableValueDecoratorTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ScaleObservableValueMaxTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ScaleObservableValueMinTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ScaleObservableValueSelectionTest;
+import org.eclipse.jface.tests.internal.databinding.swt.ShellObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueMaxTest;
+import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueMinTest;
+import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueSelectionTest;
+import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueFocusOutTest;
+import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.TableObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.TableSingleSelectionObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.TextEditableObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueFocusOutTest;
+import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.CheckableCheckedElementsObservableSetTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ObservableCollectionContentProviderTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ObservableCollectionTreeContentProviderTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.SelectionProviderMultiSelectionObservableListTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValueTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementMapTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementSetTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementWrapperTest;
+import org.eclipse.jface.tests.internal.databinding.viewers.ViewerInputObservableValueTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
-@Suite.SuiteClasses({ BindingTestSuiteJunit3.class, SideEffectTest.class })
+@SuiteClasses({ AbstractObservableListTest.class, AbstractObservableMapTest.class, AbstractObservableTest.class,
+		AbstractObservableValueTest.class, AbstractStringToNumberValidatorTest.class, AbstractVetoableValueTest.class,
+		AggregateValidationStatusTest.class, AnonymousBeanValuePropertyTest.class, AnonymousPojoValuePropertyTest.class,
+		BeanObservableListDecoratorTest.class, BeanObservableListDecoratorTest.class,
+		BeanObservableSetDecoratorTest.class, BeanObservableValueDecoratorTest.class, BeanPropertiesTest.class,
+		BeanPropertyHelperTest.class, BeanPropertyListenerSupportTest.class, BeanPropertyListenerTest.class,
+		BeansObservablesTest.class, BeanValuePropertyTest.class, BidiObservableMapTest.class, BindingMessagesTest.class,
+		BindingScenariosTestSuite.class, BindingStatusTest.class, BindingTest.class, BindingTestSuiteJunit3.class,
+		ButtonObservableValueTest.class, CComboObservableValueSelectionTest.class, CComboObservableValueTest.class,
+		CComboObservableValueTextTest.class, CComboSingleSelectionObservableValueTest.class,
+		CComboSingleSelectionObservableValueTest.class, ChangeSupportTest.class,
+		CheckableCheckedElementsObservableSetTest.class, CLabelObservableValueTest.class,
+		ComboObservableValueSelectionTest.class, ComboObservableValueTest.class, ComboObservableValueTextTest.class,
+		ComboSingleSelectionObservableValueTest.class, CompositeMapTest.class, ComputedListTest.class,
+		ComputedObservableMapTest.class, ComputedSetTest.class, ComputedValueTest.class,
+		ConstantObservableValueTest.class, ControlObservableValueTest.class, ConverterValuePropertyTest.class,
+		DatabindingContextTest.class, DateAndTimeObservableValueTest.class, DateConversionSupportTest.class,
+		DateTimeCalendarObservableValueTest.class, DateTimeDateObservableValueTest.class,
+		DateTimeSelectionPropertyTest.class, DateTimeTimeObservableValueTest.class, DecoratingObservableTest.class,
+		DelayedObservableValueTest.class, DetailObservableListTest.class, DetailObservableMapTest.class,
+		DetailObservableSetTest.class, DetailObservableValueTest.class, DifferentRealmsBindingTest.class,
+		Diffs_ListDiffTests.class, DiffsTest.class, DuplexingObservableValueTest.class, EditMaskLexerAndTokenTest.class,
+		EditMaskParserTest.class, GroupObservableValueTest.class, IdentityConverterTest.class, IdentityMapTest.class,
+		IdentitySetTest.class, IntegerToStringConverterTest.class, JavaBeanObservableArrayBasedListTest.class,
+		JavaBeanObservableArrayBasedSetTest.class, JavaBeanObservableListTest.class, JavaBeanObservableMapTest.class,
+		JavaBeanObservableSetTest.class, JavaBeanObservableValueTest.class, JavaBeanPropertyObservableMapTest.class,
+		LabelObservableValueTest.class, ListBindingTest.class, ListDetailValueObservableListTest.class,
+		ListDiffTest.class, ListDiffVisitorTest.class, ListSimpleValueObservableListTest.class,
+		ListSingleSelectionObservableValueTest.class, MapDetailValueObservableMapTest.class,
+		MapEntryObservableValueTest.class, MapSimpleValueObservableMapTest.class, MultiListTest.class,
+		MultiValidatorTest.class, NumberToBigDecimalTest.class, NumberToBigIntegerConverterTest.class,
+		NumberToByteConverterTest.class, NumberToByteValidatorTest.class, NumberToDoubleConverterTest.class,
+		NumberToDoubleValidatorTest.class, NumberToFloatConverterTest.class, NumberToFloatValidatorTest.class,
+		NumberToIntegerConverterTest.class, NumberToIntegerValidatorTest.class, NumberToLongConverterTest.class,
+		NumberToLongValidatorTest.class, NumberToShortConverterTest.class, NumberToShortValidatorTest.class,
+		NumberToStringConverterTest.class, NumberToUnboundedNumberValidatorTest.class,
+		ObjectToPrimitiveValidatorTest.class, ObservableCollectionContentProviderTest.class,
+		ObservableCollectionTreeContentProviderTest.class, ObservableListContentProviderTest.class,
+		ObservableListTest.class, ObservableListTreeContentProviderTest.class, ObservableMapLabelProviderTest.class,
+		ObservableMapTest.class, ObservableSetContentProviderTest.class, ObservableSetTreeContentProviderTest.class,
+		ObservablesManagerTest.class, ObservablesTest.class, ObservableTrackerTest.class,
+		ObservableValueEditingSupportTest.class, PojoObservablesTest.class, PojoPropertiesTest.class, PolicyTest.class,
+		PreferencePageSupportTest.class, QueueTest.class, RealmTest.class, ScaleObservableValueMaxTest.class,
+		ScaleObservableValueMinTest.class, ScaleObservableValueSelectionTest.class,
+		SelectionProviderMultiSelectionObservableListTest.class,
+		SelectionProviderSingleSelectionObservableValueTest.class, SetDetailValueObservableMapTest.class,
+		SetOnlyJavaBeanTest.class, SetSimpleValueObservableMapTest.class, ShellObservableValueTest.class,
+		SideEffectTest.class, SpinnerObservableValueMaxTest.class, SpinnerObservableValueMinTest.class,
+		SpinnerObservableValueSelectionTest.class, SpinnerObservableValueTest.class, StatusToStringConverterTest.class,
+		StringToBooleanConverterTest.class, StringToByteConverterTest.class, StringToByteValidatorTest.class,
+		StringToCharacterConverterTest.class, StringToCharacterValidatorTest.class, StringToDoubleValidatorTest.class,
+		StringToFloatValidatorTest.class, StringToIntegerValidatorTest.class, StringToLongValidatorTest.class,
+		StringToNumberConverterTest.class, StringToNumberParserByteTest.class, StringToNumberParserDoubleTest.class,
+		StringToNumberParserFloatTest.class, StringToNumberParserIntegerTest.class, StringToNumberParserLongTest.class,
+		StringToNumberParserShortTest.class, StringToNumberParserTest.class, StringToShortConverterTest.class,
+		StringToShortValidatorTest.class, StyledTextObservableValueFocusOutTest.class,
+		StyledTextObservableValueTest.class, SWTDelayedObservableValueDecoratorTest.class, SWTObservablesTest.class,
+		TableObservableValueTest.class, TableSingleSelectionObservableValueTest.class,
+		TextEditableObservableValueTest.class, TextObservableValueFocusOutTest.class, TextObservableValueTest.class,
+		UnmodifiableObservableListTest.class, UnmodifiableObservableSetTest.class,
+		UnmodifiableObservableValueTest.class, UpdateListStrategyTest.class, UpdateSetStrategyTest.class,
+		UpdateStrategyTest.class, UpdateValueStrategyTest.class, ValidatedObservableValueTest.class,
+		ValidationStatusTest.class, ValueBindingTest.class, ViewerElementMapTest.class, ViewerElementSetTest.class,
+		ViewerElementWrapperTest.class, ViewerInputObservableValueTest.class, ViewersObservablesTest.class,
+		ViewerSupportTest.class, WidgetObservableThreadTest.class, WidgetPropertiesTest.class,
+		WizardPageSupportTest.class, WritableListTest.class, WritableMapTest.class, WritableSetTest.class,
+		WritableValueTest.class })
 public class BindingTestSuite {
-
-	/**
-	 * @param testCase
-	 *            TODO
-	 * @return true if the given test is temporarily disabled
-	 */
-	public static boolean failingTestsDisabled(TestCase testCase) {
-		System.out.println("Ignoring disabled test: "
-				+ testCase.getClass().getName() + "." + testCase.getName());
-		return true;
-	}
-
-	/**
-	 * @param testSuite
-	 *            TODO
-	 * @return true if the given test is temporarily disabled
-	 */
-	public static boolean failingTestsDisabled(TestSuite testSuite) {
-		System.out.println("Ignoring disabled test: "
-				+ testSuite.getClass().getName() + "." + testSuite.getName());
-		return true;
-	}
 }
\ No newline at end of file
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuiteJunit3.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuiteJunit3.java
index 30ebf84..3d14bdf 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuiteJunit3.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/BindingTestSuiteJunit3.java
@@ -23,109 +23,28 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding;
 
-import org.eclipse.core.tests.databinding.AggregateValidationStatusTest;
-import org.eclipse.core.tests.databinding.BindingTest;
-import org.eclipse.core.tests.databinding.DatabindingContextTest;
-import org.eclipse.core.tests.databinding.ListBindingTest;
-import org.eclipse.core.tests.databinding.ObservablesManagerTest;
-import org.eclipse.core.tests.databinding.UpdateListStrategyTest;
-import org.eclipse.core.tests.databinding.UpdateSetStrategyTest;
-import org.eclipse.core.tests.databinding.UpdateStrategyTest;
-import org.eclipse.core.tests.databinding.UpdateValueStrategyTest;
-import org.eclipse.core.tests.databinding.ValueBindingTest;
-import org.eclipse.core.tests.databinding.beans.AnonymousBeanValuePropertyTest;
-import org.eclipse.core.tests.databinding.beans.AnonymousPojoValuePropertyTest;
-import org.eclipse.core.tests.databinding.beans.BeanPropertiesTest;
-import org.eclipse.core.tests.databinding.beans.BeansObservablesTest;
-import org.eclipse.core.tests.databinding.beans.PojoObservablesTest;
-import org.eclipse.core.tests.databinding.beans.PojoPropertiesTest;
-import org.eclipse.core.tests.databinding.beans.SetOnlyJavaBeanTest;
-import org.eclipse.core.tests.databinding.conversion.NumberToStringConverterTest;
-import org.eclipse.core.tests.databinding.conversion.StringToNumberConverterTest;
 import org.eclipse.core.tests.databinding.observable.AbstractObservableTest;
-import org.eclipse.core.tests.databinding.observable.ChangeSupportTest;
-import org.eclipse.core.tests.databinding.observable.DecoratingObservableTest;
-import org.eclipse.core.tests.databinding.observable.DiffsTest;
-import org.eclipse.core.tests.databinding.observable.Diffs_ListDiffTests;
-import org.eclipse.core.tests.databinding.observable.ObservableTrackerTest;
-import org.eclipse.core.tests.databinding.observable.ObservablesTest;
-import org.eclipse.core.tests.databinding.observable.RealmTest;
 import org.eclipse.core.tests.databinding.observable.list.AbstractObservableListTest;
 import org.eclipse.core.tests.databinding.observable.list.ComputedListTest;
 import org.eclipse.core.tests.databinding.observable.list.DecoratingObservableListTest;
-import org.eclipse.core.tests.databinding.observable.list.ListDiffTest;
-import org.eclipse.core.tests.databinding.observable.list.ListDiffVisitorTest;
 import org.eclipse.core.tests.databinding.observable.list.MultiListTest;
 import org.eclipse.core.tests.databinding.observable.list.ObservableListTest;
 import org.eclipse.core.tests.databinding.observable.list.WritableListTest;
-import org.eclipse.core.tests.databinding.observable.map.AbstractObservableMapTest;
-import org.eclipse.core.tests.databinding.observable.map.BidiObservableMapTest;
-import org.eclipse.core.tests.databinding.observable.map.CompositeMapTest;
-import org.eclipse.core.tests.databinding.observable.map.ComputedObservableMapTest;
-import org.eclipse.core.tests.databinding.observable.map.ObservableMapTest;
-import org.eclipse.core.tests.databinding.observable.map.WritableMapTest;
 import org.eclipse.core.tests.databinding.observable.set.AbstractObservableSetTest;
 import org.eclipse.core.tests.databinding.observable.set.ComputedSetTest;
 import org.eclipse.core.tests.databinding.observable.set.DecoratingObservableSetTest;
 import org.eclipse.core.tests.databinding.observable.set.ObservableSetTest;
 import org.eclipse.core.tests.databinding.observable.set.UnionSetTest;
 import org.eclipse.core.tests.databinding.observable.set.WritableSetTest;
-import org.eclipse.core.tests.databinding.observable.value.AbstractObservableValueTest;
-import org.eclipse.core.tests.databinding.observable.value.AbstractVetoableValueTest;
-import org.eclipse.core.tests.databinding.observable.value.ComputedValueTest;
-import org.eclipse.core.tests.databinding.observable.value.DateAndTimeObservableValueTest;
 import org.eclipse.core.tests.databinding.observable.value.DecoratingObservableValueTest;
-import org.eclipse.core.tests.databinding.observable.value.DuplexingObservableValueTest;
 import org.eclipse.core.tests.databinding.observable.value.SelectObservableValueTest;
 import org.eclipse.core.tests.databinding.observable.value.WritableValueTest;
-import org.eclipse.core.tests.databinding.util.PolicyTest;
-import org.eclipse.core.tests.databinding.validation.MultiValidatorTest;
-import org.eclipse.core.tests.databinding.validation.ValidationStatusTest;
-import org.eclipse.core.tests.internal.databinding.BindingMessagesTest;
-import org.eclipse.core.tests.internal.databinding.BindingStatusTest;
-import org.eclipse.core.tests.internal.databinding.ConverterValuePropertyTest;
-import org.eclipse.core.tests.internal.databinding.DifferentRealmsBindingTest;
-import org.eclipse.core.tests.internal.databinding.IdentityMapTest;
-import org.eclipse.core.tests.internal.databinding.IdentitySetTest;
-import org.eclipse.core.tests.internal.databinding.QueueTest;
 import org.eclipse.core.tests.internal.databinding.beans.BeanObservableListDecoratorTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanObservableSetDecoratorTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanObservableValueDecoratorTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyHelperTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyListenerSupportTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanPropertyListenerTest;
-import org.eclipse.core.tests.internal.databinding.beans.BeanValuePropertyTest;
 import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableArrayBasedListTest;
 import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableArrayBasedSetTest;
 import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableListTest;
-import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableMapTest;
 import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableSetTest;
 import org.eclipse.core.tests.internal.databinding.beans.JavaBeanObservableValueTest;
-import org.eclipse.core.tests.internal.databinding.beans.JavaBeanPropertyObservableMapTest;
-import org.eclipse.core.tests.internal.databinding.conversion.DateConversionSupportTest;
-import org.eclipse.core.tests.internal.databinding.conversion.IdentityConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.IntegerToStringConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToBigDecimalTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToBigIntegerConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToByteConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToDoubleConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToFloatConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToIntegerConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToLongConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.NumberToShortConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.ObjectToPrimitiveValidatorTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StatusToStringConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToBooleanConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToByteConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToCharacterConverterTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserByteTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserDoubleTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserFloatTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserIntegerTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserLongTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserShortTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToNumberParserTest;
-import org.eclipse.core.tests.internal.databinding.conversion.StringToShortConverterTest;
 import org.eclipse.core.tests.internal.databinding.observable.ConstantObservableValueTest;
 import org.eclipse.core.tests.internal.databinding.observable.DelayedObservableValueTest;
 import org.eclipse.core.tests.internal.databinding.observable.EmptyObservableListTest;
@@ -140,64 +59,18 @@
 import org.eclipse.core.tests.internal.databinding.observable.ValidatedObservableSetTest;
 import org.eclipse.core.tests.internal.databinding.observable.ValidatedObservableValueTest;
 import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableListTest;
-import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableMapTest;
 import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableSetTest;
 import org.eclipse.core.tests.internal.databinding.observable.masterdetail.DetailObservableValueTest;
 import org.eclipse.core.tests.internal.databinding.observable.masterdetail.ListDetailValueObservableListTest;
-import org.eclipse.core.tests.internal.databinding.observable.masterdetail.MapDetailValueObservableMapTest;
-import org.eclipse.core.tests.internal.databinding.observable.masterdetail.SetDetailValueObservableMapTest;
-import org.eclipse.core.tests.internal.databinding.property.value.ListSimpleValueObservableListTest;
-import org.eclipse.core.tests.internal.databinding.property.value.MapSimpleValueObservableMapTest;
-import org.eclipse.core.tests.internal.databinding.property.value.SetSimpleValueObservableMapTest;
-import org.eclipse.core.tests.internal.databinding.validation.AbstractStringToNumberValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToByteValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToDoubleValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToFloatValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToIntegerValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToLongValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToShortValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.NumberToUnboundedNumberValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToByteValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToCharacterValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToDoubleValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToFloatValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToIntegerValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToLongValidatorTest;
-import org.eclipse.core.tests.internal.databinding.validation.StringToShortValidatorTest;
-import org.eclipse.jface.tests.databinding.preference.PreferencePageSupportTest;
-import org.eclipse.jface.tests.databinding.scenarios.BindingScenariosTestSuite;
-import org.eclipse.jface.tests.databinding.swt.SWTObservablesTest;
-import org.eclipse.jface.tests.databinding.swt.WidgetObservableThreadTest;
-import org.eclipse.jface.tests.databinding.swt.WidgetPropertiesTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableListContentProviderTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableListTreeContentProviderTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableMapLabelProviderTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableSetContentProviderTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableSetTreeContentProviderTest;
-import org.eclipse.jface.tests.databinding.viewers.ObservableValueEditingSupportTest;
-import org.eclipse.jface.tests.databinding.viewers.ViewerSupportTest;
-import org.eclipse.jface.tests.databinding.viewers.ViewersObservablesTest;
-import org.eclipse.jface.tests.databinding.wizard.WizardPageSupportTest;
-import org.eclipse.jface.tests.examples.databinding.mask.internal.EditMaskLexerAndTokenTest;
-import org.eclipse.jface.tests.examples.databinding.mask.internal.EditMaskParserTest;
 import org.eclipse.jface.tests.internal.databinding.swt.ButtonObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueSelectionTest;
-import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.CComboObservableValueTextTest;
 import org.eclipse.jface.tests.internal.databinding.swt.CComboSingleSelectionObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.CLabelObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueSelectionTest;
-import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.ComboObservableValueTextTest;
-import org.eclipse.jface.tests.internal.databinding.swt.ComboSingleSelectionObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.ControlObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.DateTimeCalendarObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.DateTimeDateObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.DateTimeSelectionPropertyTest;
-import org.eclipse.jface.tests.internal.databinding.swt.DateTimeTimeObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.GroupObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.LabelObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.ListSingleSelectionObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.SWTDelayedObservableValueDecoratorTest;
 import org.eclipse.jface.tests.internal.databinding.swt.ScaleObservableValueMaxTest;
 import org.eclipse.jface.tests.internal.databinding.swt.ScaleObservableValueMinTest;
@@ -206,305 +79,92 @@
 import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueMaxTest;
 import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueMinTest;
 import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueSelectionTest;
-import org.eclipse.jface.tests.internal.databinding.swt.SpinnerObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueDefaultSelectionTest;
 import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueFocusOutTest;
 import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueModifyTest;
-import org.eclipse.jface.tests.internal.databinding.swt.StyledTextObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.swt.TableObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.TableSingleSelectionObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.TextEditableObservableValueTest;
 import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueDefaultSelectionTest;
 import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueFocusOutTest;
 import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueModifyTest;
-import org.eclipse.jface.tests.internal.databinding.swt.TextObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.CheckableCheckedElementsObservableSetTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.ObservableCollectionContentProviderTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.ObservableCollectionTreeContentProviderTest;
 import org.eclipse.jface.tests.internal.databinding.viewers.ObservableViewerElementSetTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.SelectionProviderMultiSelectionObservableListTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValueTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementMapTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementSetTest;
-import org.eclipse.jface.tests.internal.databinding.viewers.ViewerElementWrapperTest;
 import org.eclipse.jface.tests.internal.databinding.viewers.ViewerInputObservableValueTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.AllTests;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 @RunWith(AllTests.class)
-public class BindingTestSuiteJunit3 extends TestSuite {
+public class BindingTestSuiteJunit3 {
 
-	public static Test suite() {
-		return new BindingTestSetup(new BindingTestSuiteJunit3());
+	public static TestSuite suite() {
+		TestSuite suite = new TestSuite("Contract Tests");
+		AbstractObservableListTest.addConformanceTest(suite);
+		AbstractObservableSetTest.addConformanceTest(suite);
+		AbstractObservableTest.addConformanceTest(suite);
+		BeanObservableListDecoratorTest.addConformanceTest(suite);
+		ButtonObservableValueTest.addConformanceTest(suite);
+		CComboObservableValueSelectionTest.addConformanceTest(suite);
+		CComboObservableValueTextTest.addConformanceTest(suite);
+		CComboSingleSelectionObservableValueTest.addConformanceTest(suite);
+		CLabelObservableValueTest.addConformanceTest(suite);
+		ComboObservableValueSelectionTest.addConformanceTest(suite);
+		ComboObservableValueTextTest.addConformanceTest(suite);
+		ComputedListTest.addConformanceTest(suite);
+		ComputedSetTest.addConformanceTest(suite);
+		ConstantObservableValueTest.addConformanceTest(suite);
+		DecoratingObservableListTest.addConformanceTest(suite);
+		DecoratingObservableSetTest.addConformanceTest(suite);
+		DecoratingObservableValueTest.addConformanceTest(suite);
+		DelayedObservableValueTest.addConformanceTest(suite);
+		DetailObservableListTest.addConformanceTest(suite);
+		DetailObservableSetTest.addConformanceTest(suite);
+		DetailObservableValueTest.addConformanceTest(suite);
+		EmptyObservableListTest.addConformanceTest(suite);
+		EmptyObservableSetTest.addConformanceTest(suite);
+		GroupObservableValueTest.addConformanceTest(suite);
+		IdentityObservableSetTest.addConformanceTest(suite);
+		JavaBeanObservableArrayBasedListTest.addConformanceTest(suite);
+		JavaBeanObservableArrayBasedSetTest.addConformanceTest(suite);
+		JavaBeanObservableListTest.addConformanceTest(suite);
+		JavaBeanObservableSetTest.addConformanceTest(suite);
+		JavaBeanObservableValueTest.addConformanceTest(suite);
+		LabelObservableValueTest.addConformanceTest(suite);
+		ListDetailValueObservableListTest.addConformanceTest(suite);
+		MapEntryObservableValueTest.addConformanceTest(suite);
+		MultiListTest.addConformanceTest(suite);
+		ObservableListTest.addConformanceTest(suite);
+		ObservableSetTest.addConformanceTest(suite);
+		ObservableViewerElementSetTest.addConformanceTest(suite);
+		ScaleObservableValueMaxTest.addConformanceTest(suite);
+		ScaleObservableValueMinTest.addConformanceTest(suite);
+		ScaleObservableValueSelectionTest.addConformanceTest(suite);
+		SelectObservableValueTest.addConformanceTest(suite);
+		ShellObservableValueTest.addConformanceTest(suite);
+		SpinnerObservableValueMaxTest.addConformanceTest(suite);
+		SpinnerObservableValueMinTest.addConformanceTest(suite);
+		SpinnerObservableValueSelectionTest.addConformanceTest(suite);
+		StalenessObservableValueTest.addConformanceTest(suite);
+		StyledTextObservableValueDefaultSelectionTest.addConformanceTest(suite);
+		StyledTextObservableValueFocusOutTest.addConformanceTest(suite);
+		StyledTextObservableValueModifyTest.addConformanceTest(suite);
+		SWTDelayedObservableValueDecoratorTest.addConformanceTest(suite);
+		TableSingleSelectionObservableValueTest.addConformanceTest(suite);
+		TextEditableObservableValueTest.addConformanceTest(suite);
+		TextObservableValueDefaultSelectionTest.addConformanceTest(suite);
+		TextObservableValueFocusOutTest.addConformanceTest(suite);
+		TextObservableValueModifyTest.addConformanceTest(suite);
+		UnionSetTest.addConformanceTest(suite);
+		UnmodifiableObservableListTest.addConformanceTest(suite);
+		UnmodifiableObservableSetTest.addConformanceTest(suite);
+		UnmodifiableObservableValueTest.addConformanceTest(suite);
+		ValidatedObservableListTest.addConformanceTest(suite);
+		ValidatedObservableSetTest.addConformanceTest(suite);
+		ValidatedObservableValueTest.addConformanceTest(suite);
+		ViewerInputObservableValueTest.addConformanceTest(suite);
+		WritableListTest.addConformanceTest(suite);
+		WritableSetTest.addConformanceTest(suite);
+		WritableValueTest.addConformanceTest(suite);
+		return suite;
 	}
-
-	public BindingTestSuiteJunit3() {
-
-		// org.eclipse.core.tests.databinding
-		addTestSuite(AggregateValidationStatusTest.class);
-		addTestSuite(BindingTest.class);
-		addTestSuite(DatabindingContextTest.class);
-		addTestSuite(ListBindingTest.class);
-		addTestSuite(UpdateStrategyTest.class);
-		addTestSuite(UpdateListStrategyTest.class);
-		addTestSuite(UpdateSetStrategyTest.class);
-		addTestSuite(UpdateValueStrategyTest.class);
-		addTestSuite(ValueBindingTest.class);
-		addTestSuite(ObservablesManagerTest.class);
-
-		// org.eclipse.core.tests.databinding.util
-		addTestSuite(PolicyTest.class);
-
-		// org.eclipse.core.tests.databinding.beans
-		addTestSuite(AnonymousBeanValuePropertyTest.class);
-		addTestSuite(AnonymousPojoValuePropertyTest.class);
-		addTestSuite(BeanPropertiesTest.class);
-		addTestSuite(BeansObservablesTest.class);
-		addTestSuite(PojoObservablesTest.class);
-		addTestSuite(PojoPropertiesTest.class);
-		addTestSuite(SetOnlyJavaBeanTest.class);
-
-		// org.eclipse.core.tests.databinding.conversion
-		addTestSuite(NumberToStringConverterTest.class);
-		addTestSuite(StringToNumberConverterTest.class);
-
-		// org.eclipse.core.tests.databinding.observable
-		addTest(AbstractObservableTest.suite());
-		addTestSuite(ChangeSupportTest.class);
-		addTestSuite(DecoratingObservableTest.class);
-		addTestSuite(Diffs_ListDiffTests.class);
-		addTestSuite(DiffsTest.class);
-		addTestSuite(ObservablesTest.class);
-		addTestSuite(ObservableTrackerTest.class);
-		addTestSuite(RealmTest.class);
-
-		// org.eclipse.core.tests.databinding.observable.list
-		addTest(AbstractObservableListTest.suite());
-		addTest(ComputedListTest.suite());
-		addTest(DecoratingObservableListTest.suite());
-		addTestSuite(ListDiffTest.class);
-		addTestSuite(ListDiffVisitorTest.class);
-		addTest(MultiListTest.suite());
-		addTest(ObservableListTest.suite());
-		addTest(WritableListTest.suite());
-
-		// org.eclipse.core.tests.databinding.observable.map
-		addTestSuite(AbstractObservableMapTest.class);
-		addTestSuite(BidiObservableMapTest.class);
-		addTestSuite(ObservableMapTest.class);
-		addTestSuite(WritableMapTest.class);
-		addTestSuite(CompositeMapTest.class);
-		addTestSuite(ComputedObservableMapTest.class);
-
-		// org.eclipse.core.tests.databinding.observable.set
-		addTest(AbstractObservableSetTest.suite());
-		addTest(ComputedSetTest.suite());
-		addTest(DecoratingObservableSetTest.suite());
-		addTest(ObservableSetTest.suite());
-		addTest(UnionSetTest.suite());
-		addTest(WritableSetTest.suite());
-
-		// org.eclipse.core.tests.databinding.observable.value
-		addTestSuite(AbstractObservableValueTest.class);
-		addTestSuite(AbstractVetoableValueTest.class);
-		addTestSuite(ComputedValueTest.class);
-		addTestSuite(DateAndTimeObservableValueTest.class);
-		addTest(DecoratingObservableValueTest.suite());
-		addTestSuite(DuplexingObservableValueTest.class);
-		addTest(SelectObservableValueTest.suite());
-		addTest(WritableValueTest.suite());
-
-		// org.eclipse.core.tests.databinding.validation
-		addTestSuite(MultiValidatorTest.class);
-		addTestSuite(ValidationStatusTest.class);
-
-		// org.eclipse.core.tests.internal.databinding
-		addTestSuite(BindingMessagesTest.class);
-		addTestSuite(BindingStatusTest.class);
-		addTestSuite(ConverterValuePropertyTest.class);
-		addTestSuite(DifferentRealmsBindingTest.class);
-		addTestSuite(IdentityMapTest.class);
-		addTestSuite(IdentitySetTest.class);
-		addTestSuite(QueueTest.class);
-
-		// org.eclipse.core.tests.internal.databinding.conversion
-		addTestSuite(DateConversionSupportTest.class);
-		addTestSuite(IdentityConverterTest.class);
-		addTestSuite(IntegerToStringConverterTest.class);
-		addTestSuite(NumberToBigDecimalTest.class);
-		addTestSuite(NumberToBigIntegerConverterTest.class);
-		addTestSuite(NumberToByteConverterTest.class);
-		addTestSuite(NumberToDoubleConverterTest.class);
-		addTestSuite(NumberToFloatConverterTest.class);
-		addTestSuite(NumberToIntegerConverterTest.class);
-		addTestSuite(NumberToLongConverterTest.class);
-		addTestSuite(NumberToShortConverterTest.class);
-		addTestSuite(ObjectToPrimitiveValidatorTest.class);
-		addTestSuite(StatusToStringConverterTest.class);
-		addTestSuite(StringToBooleanConverterTest.class);
-		addTestSuite(StringToByteConverterTest.class);
-		addTestSuite(StringToCharacterConverterTest.class);
-		addTestSuite(StringToNumberParserByteTest.class);
-		addTestSuite(StringToNumberParserDoubleTest.class);
-		addTestSuite(StringToNumberParserFloatTest.class);
-		addTestSuite(StringToNumberParserIntegerTest.class);
-		addTestSuite(StringToNumberParserLongTest.class);
-		addTestSuite(StringToNumberParserShortTest.class);
-		addTestSuite(StringToNumberParserTest.class);
-		addTestSuite(StringToShortConverterTest.class);
-
-		// org.eclipse.core.tests.internal.databinding.beans
-		addTest(BeanObservableListDecoratorTest.suite());
-		addTestSuite(BeanObservableSetDecoratorTest.class);
-		addTestSuite(BeanObservableValueDecoratorTest.class);
-		addTestSuite(BeanObservableListDecoratorTest.class);
-		addTestSuite(BeanValuePropertyTest.class);
-		addTest(JavaBeanObservableArrayBasedListTest.suite());
-		addTest(JavaBeanObservableArrayBasedSetTest.suite());
-		addTest(JavaBeanObservableListTest.suite());
-		addTest(JavaBeanObservableMapTest.suite());
-		addTest(JavaBeanObservableSetTest.suite());
-		addTest(JavaBeanObservableValueTest.suite());
-		addTestSuite(JavaBeanPropertyObservableMapTest.class);
-		addTestSuite(BeanPropertyHelperTest.class);
-		addTestSuite(BeanPropertyListenerSupportTest.class);
-		addTestSuite(BeanPropertyListenerTest.class);
-
-		// org.eclipse.core.tests.internal.databinding.observable
-		addTest(ConstantObservableValueTest.suite());
-		addTest(DelayedObservableValueTest.suite());
-		addTest(EmptyObservableListTest.suite());
-		addTest(EmptyObservableSetTest.suite());
-		addTest(IdentityObservableSetTest.suite());
-		addTest(MapEntryObservableValueTest.suite());
-		addTest(StalenessObservableValueTest.suite());
-		addTest(UnmodifiableObservableValueTest.suite());
-		addTest(UnmodifiableObservableListTest.suite());
-		addTest(UnmodifiableObservableSetTest.suite());
-		addTest(ValidatedObservableValueTest.suite());
-		addTest(ValidatedObservableListTest.suite());
-		addTest(ValidatedObservableSetTest.suite());
-		// addTest(ValidatedObservableMapTest.suite());
-
-		// org.eclipse.core.tests.internal.databinding.observable.masterdetail
-		addTest(DetailObservableListTest.suite());
-		addTestSuite(DetailObservableMapTest.class);
-		addTest(DetailObservableSetTest.suite());
-		addTest(DetailObservableValueTest.suite());
-		addTest(ListDetailValueObservableListTest.suite());
-		addTest(MapDetailValueObservableMapTest.suite());
-		addTest(SetDetailValueObservableMapTest.suite());
-
-		// org.eclipse.core.tests.internal.databinding.property.value
-		addTestSuite(MapSimpleValueObservableMapTest.class);
-		addTestSuite(SetSimpleValueObservableMapTest.class);
-		addTestSuite(ListSimpleValueObservableListTest.class);
-
-		// org.eclipse.core.tests.internal.databinding.validation
-		addTestSuite(AbstractStringToNumberValidatorTest.class);
-		addTestSuite(NumberToByteValidatorTest.class);
-		addTestSuite(NumberToDoubleValidatorTest.class);
-		addTestSuite(NumberToFloatValidatorTest.class);
-		addTestSuite(NumberToIntegerValidatorTest.class);
-		addTestSuite(NumberToLongValidatorTest.class);
-		addTestSuite(NumberToShortValidatorTest.class);
-		addTestSuite(NumberToUnboundedNumberValidatorTest.class);
-		addTestSuite(StringToByteValidatorTest.class);
-		addTestSuite(StringToCharacterValidatorTest.class);
-		addTestSuite(StringToDoubleValidatorTest.class);
-		addTestSuite(StringToFloatValidatorTest.class);
-		addTestSuite(StringToIntegerValidatorTest.class);
-		addTestSuite(StringToLongValidatorTest.class);
-		addTestSuite(StringToShortValidatorTest.class);
-
-		// org.eclipse.jface.tests.databinding.scenarios
-		addTest(BindingScenariosTestSuite.suite());
-		// The files in this package are in the above test suite
-
-		// org.eclipse.jface.tests.databinding.swt
-		addTestSuite(SWTObservablesTest.class);
-		addTestSuite(WidgetPropertiesTest.class);
-		addTestSuite(WidgetObservableThreadTest.class);
-
-		// org.eclipse.jface.tests.databinding.preference
-		addTestSuite(PreferencePageSupportTest.class);
-
-		// org.eclipse.jface.tests.databinding.viewers
-		addTestSuite(ObservableListContentProviderTest.class);
-		addTestSuite(ObservableListTreeContentProviderTest.class);
-		addTestSuite(ObservableMapLabelProviderTest.class);
-		addTestSuite(ObservableSetContentProviderTest.class);
-		addTestSuite(ObservableSetTreeContentProviderTest.class);
-		addTestSuite(ObservableValueEditingSupportTest.class);
-		addTestSuite(ViewersObservablesTest.class);
-		addTestSuite(ViewerSupportTest.class);
-
-		// org.eclipse.jface.tests.databinding.wizard
-		addTestSuite(WizardPageSupportTest.class);
-
-		// org.eclipse.jface.tests.example.databinding.mask.internal
-		addTestSuite(EditMaskLexerAndTokenTest.class);
-		addTestSuite(EditMaskParserTest.class);
-
-		// org.eclipse.jface.tests.internal.databinding.swt
-		addTest(ButtonObservableValueTest.suite());
-		addTestSuite(CComboObservableValueTest.class);
-		addTest(CComboObservableValueSelectionTest.suite());
-		addTest(CComboObservableValueTextTest.suite());
-		addTestSuite(CComboSingleSelectionObservableValueTest.class);
-		addTest(CComboSingleSelectionObservableValueTest.suite());
-		addTest(CLabelObservableValueTest.suite());
-		addTestSuite(ComboObservableValueTest.class);
-		addTest(ComboObservableValueSelectionTest.suite());
-		addTest(ComboObservableValueTextTest.suite());
-		addTestSuite(ComboSingleSelectionObservableValueTest.class);
-		addTestSuite(DateTimeCalendarObservableValueTest.class);
-		addTestSuite(DateTimeDateObservableValueTest.class);
-		addTestSuite(DateTimeSelectionPropertyTest.class);
-		addTestSuite(DateTimeTimeObservableValueTest.class);
-		addTest(SWTDelayedObservableValueDecoratorTest.suite());
-
-		addTestSuite(ControlObservableValueTest.class);
-		addTest(LabelObservableValueTest.suite());
-		addTest(GroupObservableValueTest.suite());
-		addTestSuite(ListSingleSelectionObservableValueTest.class);
-		addTest(ScaleObservableValueMinTest.suite());
-		addTest(ScaleObservableValueMaxTest.suite());
-		addTest(ScaleObservableValueSelectionTest.suite());
-
-		addTest(ShellObservableValueTest.suite());
-
-		addTestSuite(SpinnerObservableValueTest.class);
-		addTest(SpinnerObservableValueMinTest.suite());
-		addTest(SpinnerObservableValueMaxTest.suite());
-		addTest(SpinnerObservableValueSelectionTest.suite());
-
-		addTestSuite(TableObservableValueTest.class);
-		addTest(TableSingleSelectionObservableValueTest.suite());
-		addTest(TextEditableObservableValueTest.suite());
-		addTest(TextObservableValueDefaultSelectionTest.suite());
-		addTest(TextObservableValueFocusOutTest.suite());
-		addTest(TextObservableValueModifyTest.suite());
-		addTestSuite(TextObservableValueTest.class);
-		addTest(StyledTextObservableValueDefaultSelectionTest.suite());
-		addTest(StyledTextObservableValueFocusOutTest.suite());
-		addTest(StyledTextObservableValueModifyTest.suite());
-		addTestSuite(StyledTextObservableValueTest.class);
-
-		// org.eclipse.jface.tests.internal.databinding.viewers
-		addTestSuite(CheckableCheckedElementsObservableSetTest.class);
-		addTest(ObservableViewerElementSetTest.suite());
-		addTestSuite(ObservableCollectionContentProviderTest.class);
-		addTestSuite(ObservableCollectionTreeContentProviderTest.class);
-		addTestSuite(SelectionProviderMultiSelectionObservableListTest.class);
-		addTestSuite(SelectionProviderSingleSelectionObservableValueTest.class);
-		addTestSuite(ViewerElementMapTest.class);
-		addTestSuite(ViewerElementSetTest.class);
-		addTestSuite(ViewerElementWrapperTest.class);
-		addTest(ViewerInputObservableValueTest.suite());
-	}
-
 }
\ No newline at end of file
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/preference/PreferencePageSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/preference/PreferencePageSupportTest.java
index fcd0e03..f14094e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/preference/PreferencePageSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/preference/PreferencePageSupportTest.java
@@ -18,6 +18,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -28,14 +30,15 @@
 
 	// private PreferenceDialog dialog;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		page = new PreferencePageWithSupport();
 		page.setControl(getShell());
 	}
 
+	@Test
 	public void testCreateAndDestroySupport() {
 		page.createContents(getShell());
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/BindingScenariosTestSuite.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/BindingScenariosTestSuite.java
index 69771e2..54c4725 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/BindingScenariosTestSuite.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/BindingScenariosTestSuite.java
@@ -11,14 +11,17 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+import junit.extensions.TestSetup;
+import junit.framework.JUnit4TestAdapter;
+
 
 /**
  * To run this test suite, right-click and select "Run As JUnit Plug-in Test".
@@ -27,7 +30,12 @@
  * Mode" as the application to run. You can also run this class as an SWT
  * application.
  */
-public class BindingScenariosTestSuite extends TestSuite {
+@RunWith(Suite.class)
+@SuiteClasses({ ButtonControlScenario.class, ComboScenarios.class, ComboUpdatingTest.class, ComboViewerScenario.class,
+		CustomConverterScenarios.class, CustomScenarios.class, ListViewerScenario.class, MasterDetailScenarios.class,
+		NewTableScenarios.class, NPETestScenario.class, PropertyScenarios.class, SpinnerControlScenario.class,
+		TableScenarios.class, TextControlScenario.class })
+public class BindingScenariosTestSuite {
 
     public static void main(String[] args) {
         junit.textui.TestRunner.run(suite());
@@ -37,17 +45,17 @@
 
     private static Shell shell;
 
-    public static Test suite() {
-        return new TestSetup(new BindingScenariosTestSuite()) {
+    public static junit.framework.Test suite() {
+		return new TestSetup(new JUnit4TestAdapter(BindingScenariosTestSuite.class)) {
             @Override
-			protected void setUp() throws Exception {
+			public void setUp() throws Exception {
                 Display d = Display.getDefault();
                 shell = new Shell(d, SWT.SHELL_TRIM);
                 shell.setLayout(new FillLayout());
             }
 
             @Override
-			protected void tearDown() throws Exception {
+			public void tearDown() throws Exception {
                 shell.close();
                 shell.dispose();
                 if (display != null) {
@@ -57,23 +65,6 @@
         };
     }
 
-    public BindingScenariosTestSuite() {
-        addTestSuite(ButtonControlScenario.class);
-        addTestSuite(ComboScenarios.class);
-        addTestSuite(ComboUpdatingTest.class);
-        addTestSuite(ComboViewerScenario.class);
-        addTestSuite(CustomConverterScenarios.class);
-        addTestSuite(CustomScenarios.class);
-        addTestSuite(ListViewerScenario.class);
-        addTestSuite(MasterDetailScenarios.class);
-        addTestSuite(NewTableScenarios.class);
-        addTestSuite(NPETestScenario.class);
-        addTestSuite(PropertyScenarios.class);
-        addTestSuite(SpinnerControlScenario.class);
-        addTestSuite(TableScenarios.class);
-        addTestSuite(TextControlScenario.class);
-    }
-
     public static Shell getShell() {
         return shell;
     }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ButtonControlScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ButtonControlScenario.java
index 6929e0e..9413431 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ButtonControlScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ButtonControlScenario.java
@@ -12,12 +12,17 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.examples.databinding.model.Adventure;
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Button;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -32,21 +37,22 @@
 
     private Button button;
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
         button = new Button(getComposite(), SWT.CHECK);
         adventure = SampleData.WINTER_HOLIDAY;
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         button.dispose();
         super.tearDown();
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         // Bind the button's selection to the adventure "isPetsAllowed"
         getDbc().bindValue(SWTObservables.observeSelection(button),
                 BeansObservables.observeValue(adventure, "petsAllowed"));
@@ -71,7 +77,8 @@
 
     }
 
-    public void testScenario02() {
+    @Test
+	public void testScenario02() {
         // Test with an SWT.Toggle button
         button.dispose();
         button = new Button(getComposite(), SWT.TOGGLE);
@@ -93,7 +100,8 @@
         assertEquals(newBoolean, adventure.isPetsAllowed());
     }
 
-    public void testScenario03() {
+    @Test
+	public void testScenario03() {
         // Test with an SWT.Radio button
         button.dispose();
         button = new Button(getComposite(), SWT.RADIO);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboScenarios.java
index 137dcbd..a6a1aa6 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboScenarios.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -42,6 +44,9 @@
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Combo;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ComboScenarios extends ScenariosTestCase {
 
@@ -65,8 +70,8 @@
 		}
 	};
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		getComposite().setLayout(new FillLayout());
 
@@ -76,8 +81,8 @@
 		catalog = SampleData.CATALOG_2005; // Lodging source
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		combo.dispose();
 		combo = null;
 		cviewer = null;
@@ -146,6 +151,7 @@
 	 * property change of content elements, etc.
 	 *
 	 */
+	@Test
 	public void test_ROCombo_Scenario03_vanilla() {
 		IObservableList lodgings = BeansObservables.observeList(Realm
 				.getDefault(), catalog, "lodgings");
@@ -189,6 +195,7 @@
 	 *
 	 * This test does not deal with the combo's selection.
 	 */
+	@Test
 	public void test_ROCombo_Scenario03_collectionBindings() {
 		// column binding
 		// Bind the ComboViewer's content to the available lodging
@@ -257,6 +264,7 @@
 	 * This scenario tests a simple SWT combo with a set item list where the
 	 * selection is bouded to a String property
 	 */
+	// @Test
 	// public void test_ROCombo_Scenario01() {
 	//
 	// // Read-Only Combo will not change its text property on a call to
@@ -297,6 +305,7 @@
 	 *
 	 * The Combo's selection is bounded to the Country property of an Account.
 	 */
+	// @Test
 	// public void test_ROCombo_Scenario02_SWTCombo() {
 	//
 	// // Create a list of Strings for the countries
@@ -326,6 +335,7 @@
 	 *
 	 * The Combo's selection is bounded to the Country property of an Account.
 	 */
+	// @Test
 	// public void test_ROCombo_Scenario02_ComboViewer() {
 	//
 	// // Account label provider will fill the combo with the country
@@ -362,6 +372,7 @@
 	 * This test ensure that multiple combos can be bound to the same deomain
 	 * model
 	 */
+	@Test
 	public void test_ROCombo_multipleBindings() {
 		Adventure skiAdventure = SampleData.WINTER_HOLIDAY; // for selection
 
@@ -419,6 +430,7 @@
 	 *
 	 * The Combo's selection is bounded to the Country property of an Account.
 	 */
+	@Test
 	public void test_ROCombo_SWTCCombo() {
 
 		// Create a list of Strings for the countries
@@ -455,6 +467,7 @@
 	 *
 	 * The Combo's selection is bounded to the Country property of an Account.
 	 */
+	@Test
 	public void test_WCombo_SWTCCombo() {
 
 		// Create a list of Strings for the countries
@@ -500,6 +513,7 @@
 	 *
 	 * The Combo's selection is bounded to the Country property of an Account.
 	 */
+	@Test
 	public void test_ROCombo_SWTList() {
 
 		// Create a list of Strings for the countries
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboUpdatingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboUpdatingTest.java
index f7a8103..14e9818 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboUpdatingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboUpdatingTest.java
@@ -13,6 +13,8 @@
 
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
@@ -23,10 +25,12 @@
 import org.eclipse.core.databinding.observable.list.IObservableList;
 import org.eclipse.core.databinding.observable.list.WritableList;
 import org.eclipse.jface.databinding.swt.SWTObservables;
-import org.eclipse.jface.tests.databinding.BindingTestSuite;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Combo;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -94,7 +98,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		getComposite().setLayout(new FillLayout());
 		comboEditable = new Combo(getComposite(), SWT.DROP_DOWN);
@@ -104,6 +109,7 @@
 	//-------------------------------------------------------------------------
 
 	private static final String NEXT = "Next";
+	@Test
 	public void testBindText() throws Exception {
         getDbc().bindValue(SWTObservables.observeText(comboEditable), BeansObservables.observeValue(this, "text"));
 		spinEventLoop(0);
@@ -113,10 +119,9 @@
 		assertEquals("Should find new value in text", NEXT, text);
 	}
 
+	@Test
+	@Ignore
 	public void testBindItems_listHasSameItems_editable() throws Exception {
-		if (BindingTestSuite.failingTestsDisabled(this)) {
-			return;
-		}
 		text = "Apple";
 
         getDbc().bindValue(SWTObservables.observeText(comboEditable), BeansObservables.observeValue(this, PROP_TEXT));
@@ -141,7 +146,8 @@
 		assertEquals("Should find value of text", "Banana", text);
 	}
 
-//	public void testBindItems_listHasSameItems_readOnly() throws Exception {
+//	@Test
+	// public void testBindItems_listHasSameItems_readOnly() throws Exception {
 //		text = "Apple";
 //		ComboObservableValue value = (ComboObservableValue) getDbc().createObservable(new Property(comboReadOnly, PROP_TEXT));
 //		getDbc().bind(value.getItems(), new Property(this, PROP_CHOICES), null);
@@ -165,10 +171,9 @@
 //		assertEquals("Should find value of text", "Banana", text);
 //	}
 
+	@Test
+	@Ignore
 	public void testBindItems_listHasDifferentItems_editable() throws Exception {
-		if (BindingTestSuite.failingTestsDisabled(this)) {
-			return;
-		}
 
         getDbc().bindValue(SWTObservables.observeText(comboEditable), BeansObservables.observeValue(this, PROP_TEXT));
 
@@ -193,7 +198,9 @@
 		assertEquals("Should find value of text", "Banana", text);
 	}
 
-//	public void testBindItems_listHasDifferentItems_readOnly() throws Exception {
+//	@Test
+	// public void testBindItems_listHasDifferentItems_readOnly() throws
+	// Exception {
 //		ComboObservableValue value = (ComboObservableValue) getDbc().createObservable(new Property(comboReadOnly, PROP_TEXT));
 //		getDbc().bind(value, new Property(this, PROP_TEXT), null);
 //		spinEventLoop(0);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboViewerScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboViewerScenario.java
index 5bfd990..899c416 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboViewerScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ComboViewerScenario.java
@@ -13,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.list.IObservableList;
@@ -26,6 +28,9 @@
 import org.eclipse.jface.viewers.ComboViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Combo;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -42,8 +47,8 @@
 
 	private ComboViewer comboViewer;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		// do any setup work here
 		combo = new Combo(getComposite(), SWT.READ_ONLY | SWT.DROP_DOWN);
@@ -51,14 +56,15 @@
 		catalog = SampleData.CATALOG_2005; // Lodging source
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		combo.dispose();
 		combo = null;
 		comboViewer = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testScenario01() {
 		// Bind the catalog's lodgings to the combo
 		IObservableList lodgings = BeansObservables.observeList(realm, catalog,
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomConverterScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomConverterScenarios.java
index 261c4f9..9aede62 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomConverterScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomConverterScenarios.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
@@ -20,6 +22,9 @@
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -32,19 +37,20 @@
 
     private Adventure skiTrip;
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         skiTrip = SampleData.WINTER_HOLIDAY;
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         // do any teardown work here
         super.tearDown();
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         DataBindingContext dbc = getDbc();
         Spinner spinner_dollars = new Spinner(getComposite(), SWT.NONE);
         spinner_dollars.setMaximum(10000);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomScenarios.java
index 805cc11..c485ed9 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/CustomScenarios.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.swt.SWTObservables;
@@ -20,6 +22,9 @@
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -30,19 +35,20 @@
 
 public class CustomScenarios extends ScenariosTestCase {
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         // do any teardown work here
         super.tearDown();
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
 
         // Binding the name property of an Adventure object to the contents of
         // Text controls, no conversion, no validation.
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/LabelControlScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/LabelControlScenario.java
index 771611f..25e9d30 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/LabelControlScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/LabelControlScenario.java
@@ -12,12 +12,17 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.examples.databinding.model.Adventure;
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Label;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -32,23 +37,24 @@
 
     private Label label;
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
         label = new Label(getComposite(), SWT.NONE);
         adventure = SampleData.WINTER_HOLIDAY;
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         // do any teardown work here
         super.tearDown();
         label.dispose();
         label = null;
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         // Bind the adventure "name" property to a label control
         // Change the UI and verify the model and UI are the same value
         // Change the model and verify the UI changes
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ListViewerScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ListViewerScenario.java
index 01cb951..d41a8a6 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ListViewerScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ListViewerScenario.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.core.databinding.observable.Realm;
@@ -26,6 +28,9 @@
 import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.List;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -42,8 +47,8 @@
 
 	private ListViewer listViewer;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		// do any setup work here
 		list = new List(getComposite(), SWT.READ_ONLY | SWT.SINGLE);
@@ -51,14 +56,15 @@
 		catalog = SampleData.CATALOG_2005; // Lodging source
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		list.dispose();
 		list = null;
 		listViewer = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testScenario01() {
 		// Bind the catalog's lodgings to the combo
 		IObservableList lodgings = BeansObservables.observeList(Realm
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/MasterDetailScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/MasterDetailScenarios.java
index b27dabb..c5c9aff 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/MasterDetailScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/MasterDetailScenarios.java
@@ -12,6 +12,13 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Arrays;
 import java.util.List;
 
@@ -42,6 +49,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -68,6 +76,7 @@
 		return null;
 	}
 
+	@Test
 	public void testScenario01() {
 		// Displaying the catalog's list of Lodging objects in a list viewer,
 		// using their names. The name of the currently selected Lodging can
@@ -131,6 +140,7 @@
 		// assertNotSame("barfoo", txtName.getText());
 	}
 
+	@Test
 	public void testScenario02() {
 		// Selecting from the list of lodgings for an adventure and editing the
 		// properties of the selected lodging in text widgets. If no lodging is
@@ -256,6 +266,7 @@
 		pushButtonWithEvents(removeButton);
 	}
 
+	@Test
 	public void testScenario03() {
 		// List adventures and for the selected adventure allow its default
 		// lodging�s name and description to be changed in text controls. If
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
index fb1b3a9..a7f53d0 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NPETestScenario.java
@@ -13,10 +13,17 @@
 
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.beans.PropertyChangeListener;
+
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -28,7 +35,8 @@
 	Person person;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		person = new Person();
 		text = new Text(getComposite(), SWT.BORDER);
@@ -38,6 +46,7 @@
 	 * Asserts the ability to have an initial value of <code>null</code> on the
 	 * model and to update the value by changing the value of the view.
 	 */
+	@Test
 	public void test_InitialNullValue() {
 		Person person = new Person();
 		assertNull(person.getName());
@@ -69,5 +78,15 @@
 		public void setName(String name) {
 			this.name = name;
 		}
+
+		public void addPropertyChangeListener(PropertyChangeListener listener) {
+			// not really necessary, but BeansObservables.observeValue(...)
+			// expects it.
+		}
+
+		public void removePropertyChangeListener(PropertyChangeListener listener) {
+			// not really necessary, but BeansObservables.observeValue(...)
+			// expects it.
+		}
 	}
 }
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NewTableScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NewTableScenarios.java
index 93e5981..3236c89 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NewTableScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/NewTableScenarios.java
@@ -18,6 +18,9 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.TableColumn;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -44,8 +47,8 @@
 
 	private TableColumn fancyColumn;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		getComposite().setLayout(new FillLayout());
 		tableViewer = new TableViewer(getComposite());
@@ -69,8 +72,8 @@
 				getShell().getDisplay().getSystemImage(SWT.ICON_INFORMATION), };
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		// do any teardown work here
 		super.tearDown();
 		tableViewer.getTable().dispose();
@@ -86,6 +89,7 @@
 		return text;
 	}
 
+	@Test
 	public void testScenario01() {
 //		// Factory for directly creating IObservables for beans
 //		JavaBeans javaBeans = new JavaBeans();
@@ -126,6 +130,7 @@
 //		}
 	}
 
+	@Test
 	public void testScenario02() throws SecurityException,
 			IllegalArgumentException {
 //		// Show that a TableViewer with three columns can be used to update
@@ -155,6 +160,7 @@
 //		assertEquals("Bill", account.getFirstName());
 	}
 
+	@Test
 	public void testScenario04() {
 //		// Show that when an item is added to a collection the table gets an
 //		// extra item
@@ -243,6 +249,7 @@
 //
 	}
 
+	@Test
 	public void testScenario03() {
 //		// Show that converters work for table columns
 //		Account[] accounts = catalog.getAccounts();
@@ -278,6 +285,7 @@
 //		}
 	}
 
+	@Test
 	public void testScenario05() {
 //		// Show that when the model changes then the UI refreshes to reflect
 //		// this
@@ -311,6 +319,7 @@
 //
 	}
 
+	@Test
 	public void testScenario06() {
 //		// Check that explicit type means that defaulting of converters works
 //		TableViewerDescription tableViewerDescription = new TableViewerDescription(
@@ -332,6 +341,7 @@
 
 	}
 
+	@Test
 	public void testScenario07() {
 //		// Verify that even when a column's property type is not set, that it is
 //		// worked out lazily from the target type
@@ -356,6 +366,7 @@
 //
 	}
 
+	@Test
 	public void testScenario08_00() {
 //		// Verify that binding to a Collection property (rather than an array)
 //		// works when specifying data type
@@ -382,6 +393,7 @@
 //
 	}
 
+	@Test
 	public void testScenario08_01() {
 //		// Verify that binding to a Collection property (rather than an array)
 //		// works without specifying data type
@@ -408,6 +420,7 @@
 //
 	}
 
+	@Test
 	public void testScenario09() {
 //		// Verify that nested properties work. Catalog has adventures. Adventure
 //		// has defaultLodging. Loding has name.
@@ -419,7 +432,8 @@
 //				new Property(category, "adventures"), null);
 	}
 	/**
-	 * public void testScenario10(){ // Verify that for TIME_EARLY updating
+	 * @Test
+	public void testScenario10(){ // Verify that for TIME_EARLY updating
 	 * occurs on a per key basic for a TextCellEditor // Show that converters
 	 * work for table columns Account[] accounts = catalog.getAccounts();
 	 * Account firstAccount = accounts[0];
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/PropertyScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/PropertyScenarios.java
index 64f4519..dce9e61 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/PropertyScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/PropertyScenarios.java
@@ -12,6 +12,10 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.text.ParseException;
 import java.util.Date;
 import java.util.Locale;
@@ -44,6 +48,9 @@
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -58,20 +65,21 @@
 
     private Adventure adventure;
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
         adventure = SampleData.WINTER_HOLIDAY;
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         // do any teardown work here
         super.tearDown();
     }
 
-    public void testEnterText() {
+    @Test
+	public void testEnterText() {
         // just to make sure enterText() generates a FocusOut event.
         Text text = new Text(getComposite(), SWT.BORDER);
         final boolean[] focusLostHolder = { false };
@@ -91,7 +99,8 @@
         assertTrue(focusLostHolder[0]);
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         Text text = new Text(getComposite(), SWT.BORDER);
         getDbc().bindValue(SWTObservables.observeText(text, SWT.Modify),
                 BeansObservables.observeValue(adventure, "name"));
@@ -110,7 +119,8 @@
         assertEquals("barfoo", text.getText());
     }
 
-    public void testScenario02() {
+    @Test
+	public void testScenario02() {
         // Binding the name property of an Adventure object to the contents of
         // Text controls, no conversion, no validation. The Text widget editable
         // is set to false.by the developer (can not change the name)
@@ -121,7 +131,8 @@
         assertEquals(adventure.getName(), text.getText());
     }
 
-    public void testScenario03() {
+    @Test
+	public void testScenario03() {
         // Binding of a read-only property of an Adventure object to the
         // contents of Text controls, no conversion, no validation. Text control
         // is not editable as a side effect of binding to a read-only property..
@@ -138,7 +149,8 @@
         assertEquals(Integer.valueOf(cart.getLodgingDays()).toString(), text.getText());
     }
 
-    public void testScenario04() {
+    @Test
+	public void testScenario04() {
         // Binding a nested property of an Adventure object to the content of a
         // Text control, no conversion, no validation.
         Text text = new Text(getComposite(), SWT.BORDER);
@@ -179,7 +191,8 @@
 
     }
 
-    public void testScenario05() {
+    @Test
+	public void testScenario05() {
         // Binding the name property of an Adventure object to the contents of
         // Text controls where conversion occurs � the model data is held all
         // in
@@ -240,7 +253,8 @@
         assertEquals("LOWERCASE", adventure.getName());
     }
 
-    public void testScenario06() {
+    @Test
+	public void testScenario06() {
         // Binding the name property of an Adventure object to the contents of
         // Text controls where validation occurs and the name cannot be longer
         // than 15 characters and cannot contain spaces
@@ -289,7 +303,8 @@
         assertEquals("anothervalid", adventure.getName());
     }
 
-    public void testScenario07() {
+    @Test
+	public void testScenario07() {
         // Binding the price property of an Adventure to a Text control. Price
         // is a double and Text accepts String so conversion will have to occur.
         // Validation ensure that the value is positive
@@ -356,7 +371,8 @@
         assertTrue(AggregateValidationStatus.getStatusMaxSeverity(getDbc().getBindings()).isOK());
     }
 
-    public void testScenario08() {
+    @Test
+	public void testScenario08() {
         // Binding the price property of an Adventure to a Text control but with
         // custom conversion � the double will be validated to only have two
         // decimal places and displayed with a leading currency symbol, and can
@@ -433,7 +449,8 @@
         assertTrue(AggregateValidationStatus.getStatusMaxSeverity(getDbc().getBindings()).isOK());
     }
 
-    public void testScenario09() {
+    @Test
+	public void testScenario09() {
         // Binding a boolean property to a CheckBox. Adventure will have a
         // Boolean property �petsAllowed�
         Button checkbox = new Button(getComposite(), SWT.CHECK);
@@ -451,7 +468,8 @@
         assertEquals(true, checkbox.getSelection());
     }
 
-    public void testScenario10() {
+    @Test
+	public void testScenario10() {
         // Binding a Transportation departure time to a Text control that
         // formats and validates the time to and from a String. There are
         // property bindings that bind elements of the GUI to elements to GUI
@@ -459,7 +477,8 @@
         // TODO fail("not implemented");
     }
 
-    public void testScenario11() {
+    @Test
+	public void testScenario11() {
         // Binding the max value of a spinner to another spinner.
         Spinner spinner1 = new Spinner(getComposite(), SWT.NONE);
         spinner1.setSelection(10);
@@ -476,7 +495,8 @@
         assertEquals(10, spinner2.getMaximum());
     }
 
-    public void testScenario12() {
+    @Test
+	public void testScenario12() {
         // Binding the enabled state of several Text controls to a check box.
         // There will be two check boxes, so as each is enabled/disabled the
         // other one follows as do the states of the Text controls.
@@ -526,7 +546,8 @@
         assertEquals(true, checkbox1.getSelection());
     }
 
-    public void testScenario13() {
+    @Test
+	public void testScenario13() {
         Text text = new Text(getComposite(), SWT.BORDER);
 
         getDbc().bindValue(SWTObservables.observeText(text, SWT.FocusOut), BeansObservables.observeValue(adventure, "name"));
@@ -546,7 +567,8 @@
         assertEquals("barfoo", text.getText());
     }
 
-    public void testScenario14() {
+    @Test
+	public void testScenario14() {
         Text t1 = new Text(getComposite(), SWT.BORDER);
         Text t2 = new Text(getComposite(), SWT.BORDER);
 
@@ -578,7 +600,8 @@
 
     }
 
-    public void testScenario15() {
+    @Test
+	public void testScenario15() {
         Text text = new Text(getComposite(), SWT.NONE);
         Account account = new Account();
         account.setExpiryDate(new Date());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java
index e4438fb..1a260fe 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/ScenariosTestCase.java
@@ -11,15 +11,16 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
-import java.util.Arrays;
+import static org.junit.Assert.assertEquals;
 
-import junit.framework.TestCase;
+import java.util.Arrays;
 
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
 import org.eclipse.jface.examples.databinding.model.SampleData;
+import org.eclipse.jface.tests.databinding.BindingTestSetup;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Button;
@@ -27,11 +28,17 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
 
 /**
  * Abstract base class of the JFace binding scenario test classes.
  */
-abstract public class ScenariosTestCase extends TestCase {
+abstract public class ScenariosTestCase {
+
+	@Rule
+	public BindingTestSetup testSetup = new BindingTestSetup();
 
 	private Composite composite;
 	private DataBindingContext dbc;
@@ -54,7 +61,7 @@
 			return shell;
 		}
 		Shell result = BindingScenariosTestSuite.getShell();
-		if (result == null) {
+		if (result == null || result.isDisposed()) {
 			display = Display.getDefault();
 			if (Display.getDefault() == null) {
 				display = new Display();
@@ -64,7 +71,8 @@
 			shell.setLayout(new FillLayout());
 			result = shell;
 		}
-		result.setText(getName()); // In the case that the shell() becomes
+		result.setText(getClass().getSimpleName()); // In the case that the
+													// shell() becomes
 		// visible.
 		return result;
 	}
@@ -106,8 +114,8 @@
 		button.notifyListeners(SWT.Selection, null);
 	}
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		realm = DisplayRealm.getRealm(Display.getDefault());
 		RealmTester.setDefault(realm);
 
@@ -120,8 +128,8 @@
 		dummyText.setText("dummy");
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		realm = null;
 		getShell().setVisible(false); // same Shell may be reUsed across tests
 		composite.dispose();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/SpinnerControlScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/SpinnerControlScenario.java
index e9ed3df..e79fc67 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/SpinnerControlScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/SpinnerControlScenario.java
@@ -12,12 +12,17 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.examples.databinding.model.Adventure;
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -30,20 +35,21 @@
 
     private Adventure adventure;
 
-    @Override
-	protected void setUp() throws Exception {
+    @Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
         adventure = SampleData.WINTER_HOLIDAY;
     }
 
-    @Override
-	protected void tearDown() throws Exception {
+    @After
+	public void tearDown() throws Exception {
         // do any teardown work here
         super.tearDown();
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         // Bind the adventure "maxNumberOfPeople" property to a spinner
         // Change the UI and verify the model changes
         // Change the model and verify the UI changes
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TableScenarios.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TableScenarios.java
index c9f67a7..201d2a2 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TableScenarios.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TableScenarios.java
@@ -13,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 
@@ -31,6 +33,9 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * To run the tests in this class, right-click and select "Run As JUnit Plug-in
@@ -57,8 +62,8 @@
 
 	private TableColumn fancyColumn;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		getComposite().setLayout(new FillLayout());
 		tableViewer = new TableViewer(getComposite());
@@ -82,8 +87,8 @@
 				getShell().getDisplay().getSystemImage(SWT.ICON_INFORMATION), };
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		// do any teardown work here
 		super.tearDown();
 		tableViewer.getTable().dispose();
@@ -93,6 +98,7 @@
 		stateColumn = null;
 	}
 
+	@Test
 	public void testScenario01() {
 		// Show that a TableViewer with three columns renders the accounts
 		Account[] accounts = catalog.getAccounts();
@@ -117,6 +123,7 @@
 		}
 	}
 
+	@Test
 	public void testScenario02() throws SecurityException,
 			IllegalArgumentException {
 		// Show that a TableViewer with three columns can be used to update
@@ -147,6 +154,7 @@
 		// assertEquals("Bill",account.getFirstName());
 	}
 
+	@Test
 	public void testScenario04() {
 		// // Show that when an item is added to a collection the table gets an
 		// extra item
@@ -234,6 +242,7 @@
 		//
 	}
 
+	@Test
 	public void testScenario03() {
 		// // Show that converters work for table columns
 		// Account[] accounts = catalog.getAccounts();
@@ -271,6 +280,7 @@
 		// }
 	}
 
+	@Test
 	public void testScenario05() {
 		// // Show that when the model changes then the UI refreshes to reflect
 		// this
@@ -307,6 +317,7 @@
 		//
 	}
 
+	@Test
 	public void testScenario06() {
 		// // Check that explicit type means that defaulting of converters works
 		// TableViewerDescription tableViewerDescription = new
@@ -329,6 +340,7 @@
 
 	}
 
+	@Test
 	public void testScenario07() {
 		// // Verify that even when a column's property type is not set, that it
 		// is worked out lazily from the target type
@@ -354,6 +366,7 @@
 		//
 	}
 
+	@Test
 	public void testScenario08_00() {
 		// // Verify that binding to a Collection property (rather than an
 		// array) works when specifying data type
@@ -381,6 +394,7 @@
 		//
 	}
 
+	@Test
 	public void testScenario08_01() {
 		// // Verify that binding to a Collection property (rather than an
 		// array) works without specifying data type
@@ -408,6 +422,7 @@
 		//
 	}
 
+	@Test
 	public void testScenario09() {
 		// // Verify that nested properties work. Catalog has adventures.
 		// Adventure has defaultLodging. Loding has name.
@@ -420,7 +435,8 @@
 		//
 	}
 	/**
-	 * public void testScenario10(){ // Verify that for TIME_EARLY updating
+	 * @Test
+	public void testScenario10(){ // Verify that for TIME_EARLY updating
 	 * occurs on a per key basic for a TextCellEditor // Show that converters
 	 * work for table columns Account[] accounts = catalog.getAccounts();
 	 * Account firstAccount = accounts[0];
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TextControlScenario.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TextControlScenario.java
index 5aa6467..191cfc3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TextControlScenario.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/scenarios/TextControlScenario.java
@@ -12,6 +12,9 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.databinding.scenarios;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeansObservables;
 import org.eclipse.jface.databinding.swt.SWTObservables;
@@ -19,10 +22,13 @@
 import org.eclipse.jface.examples.databinding.model.Adventure;
 import org.eclipse.jface.examples.databinding.model.SampleData;
 import org.eclipse.jface.examples.databinding.model.Transportation;
-import org.eclipse.jface.tests.databinding.BindingTestSuite;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 
 import com.ibm.icu.text.NumberFormat;
 
@@ -44,7 +50,8 @@
     Account account;
 
     @Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
         super.setUp();
         // do any setup work here
         adventure = SampleData.WINTER_HOLIDAY;
@@ -54,13 +61,15 @@
     }
 
     @Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
         text.dispose();
         text = null;
         super.tearDown();
     }
 
-    public void testScenario01() {
+    @Test
+	public void testScenario01() {
         // Bind the adventure "name" property to a text field
         // Change the UI and verify the model changes
         // Change the model and verify the UI changes
@@ -78,7 +87,8 @@
         assertEquals("Germany", text.getText());
     }
 
-    public void testScenario02() {
+    @Test
+	public void testScenario02() {
 
         // Bind the transportation "price" property to a text field
         // This is a Double.TYPE so we check that conversion and validation
@@ -99,7 +109,8 @@
         assertEquals(numberFormat.format(transportation.getPrice()), text.getText());
     }
 
-//    public void testScenario03() {
+//    @Test
+	// public void testScenario03() {
 //        // Show that the Escape key can be pressed in the middle of editing and
 //        // the value will revert
 //        // the updatePolicy for this test is TIME_LATE so it occurs when focus
@@ -136,7 +147,8 @@
 //
 //    }
 
-//    public void testScenario04() {
+//    @Test
+	// public void testScenario04() {
 //        // Show that the Escape key can be pressed in the middle of editing and
 //        // the value will revert
 //        // the updatePolicy for this test is TIME_EARLY so it occurs when each
@@ -178,13 +190,15 @@
 //    }
 
     /**
-     * public void testScenario05(){ // Show that nesting of properties works.
+     * @Test
+	public void testScenario05(){ // Show that nesting of properties works.
      * Adventure has defaultLodging and Lodging has name getDbc().bind(text,new
      * Property(adventure,"defaultLodging.name"),null); // Verify the GUI is
      * showing the model value
      * assertEquals(text.getText(),adventure.getDefaultLodging().getName()); }
      */
-    public void testScenario06() {
+    @Test
+	public void testScenario06() {
         // // Show that partial validation works for TIME_EARLY
         // // We are using TIME_EARLY to verify that invalid states are not sent
         // to the model
@@ -216,7 +230,8 @@
         // assertEquals(account.getPhone(),"9998887777");
     }
 
-    public void testScenario07() {
+    @Test
+	public void testScenario07() {
         // // Show that partial validation works for TIME_LATE
         // getSWTObservableFactory().setUpdateTime(DataBindingContext.TIME_LATE);
         // getDbc().bind(text, new Property(account, "phone"), new BindSpec(new
@@ -248,11 +263,9 @@
         // assertEquals("2223334444",account.getPhone());
     }
 
-    public void testScenario08() {
-
-        if (BindingTestSuite.failingTestsDisabled(this)) {
-            return;
-        }
+    @Test
+	@Ignore
+	public void testScenario08() {
 
         // Show that the CustomBeanBindSupportFactory will automatically pick up
         // the
@@ -273,7 +286,8 @@
         dbc.dispose();
     }
 
-    public void testScenario09() {
+    @Test
+	public void testScenario09() {
         // Verify direct binding between a Text and Label following bugzilla
         // 118696
         Label label = new Label(getComposite(), SWT.NONE);
@@ -289,7 +303,8 @@
 
     }
 
-    public void testScenario10() {
+    @Test
+	public void testScenario10() {
         // Verify direct binding between a Text and Label following bugzilla
         // 118696 with TIME_EARLY
         Label label = new Label(getComposite(), SWT.NONE);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java
index 82ac5f3..e5cc3f0 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/SWTObservablesTest.java
@@ -13,6 +13,12 @@
 
 package org.eclipse.jface.tests.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.observable.IDecoratingObservable;
 import org.eclipse.core.databinding.property.IPropertyObservable;
 import org.eclipse.jface.databinding.conformance.util.ChangeEventTracker;
@@ -91,6 +97,9 @@
 import org.eclipse.swt.widgets.ToolTip;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.Widget;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.1
@@ -98,16 +107,16 @@
 public class SWTObservablesTest extends AbstractSWTTestCase {
 	private Shell shell;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		shell = getShell();
 		RealmTester.setDefault(DisplayRealm.getRealm(shell.getDisplay()));
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		super.tearDown();
 
 		RealmTester.setDefault(null);
@@ -118,78 +127,91 @@
 		return new Shell(SWT.V_SCROLL);
 	}
 
+	@Test
 	public void testObserveForeground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeForeground(shell);
 		assertWidgetObservable(value, shell, ControlForegroundProperty.class);
 		assertEquals(Color.class, value.getValueType());
 	}
 
+	@Test
 	public void testObserveBackground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeBackground(shell);
 		assertWidgetObservable(value, shell, ControlBackgroundProperty.class);
 		assertEquals(Color.class, value.getValueType());
 	}
 
+	@Test
 	public void testObserveFont() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeFont(shell);
 		assertNotNull(value);
 		assertEquals(Font.class, value.getValueType());
 	}
 
+	@Test
 	public void testObserveSelectionOfSpinner() throws Exception {
 		Spinner spinner = new Spinner(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeSelection(spinner);
 		assertWidgetObservable(value, spinner, SpinnerSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfButton() throws Exception {
 		Button button = new Button(shell, SWT.PUSH);
 		ISWTObservableValue value = SWTObservables.observeSelection(button);
 		assertWidgetObservable(value, button, ButtonSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfCombo() throws Exception {
 		Combo combo = new Combo(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeSelection(combo);
 		assertWidgetObservable(value, combo, ComboSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfCCombo() throws Exception {
 		CCombo combo = new CCombo(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeSelection(combo);
 		assertWidgetObservable(value, combo, CComboSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfDateTime_Date() throws Exception {
 		DateTime dateTime = new DateTime(shell, SWT.DATE);
 		ISWTObservableValue value = SWTObservables.observeSelection(dateTime);
 		assertWidgetObservable(value, dateTime, DateTimeSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfDateTime_Calendar() throws Exception {
 		DateTime dateTime = new DateTime(shell, SWT.CALENDAR);
 		ISWTObservableValue value = SWTObservables.observeSelection(dateTime);
 		assertWidgetObservable(value, dateTime, DateTimeSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfDateTime_Time() throws Exception {
 		DateTime dateTime = new DateTime(shell, SWT.TIME);
 		ISWTObservableValue value = SWTObservables.observeSelection(dateTime);
 		assertWidgetObservable(value, dateTime, DateTimeSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfList() throws Exception {
 		List list = new List(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeSelection(list);
 		assertWidgetObservable(value, list, ListSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfScale() throws Exception {
 		Scale scale = new Scale(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeSelection(scale);
 		assertWidgetObservable(value, scale, ScaleSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfUnsupportedControl() throws Exception {
 		try {
 			Text text = new Text(shell, SWT.NONE);
@@ -199,6 +221,7 @@
 		}
 	}
 
+	@Test
 	public void testObserveTextWithEventOfText() throws Exception {
 		Text text = new Text(shell, SWT.NONE);
 		assertFalse(text.isListening(SWT.FocusOut));
@@ -212,6 +235,7 @@
 		assertTrue(text.isListening(SWT.FocusOut));
 	}
 
+	@Test
 	public void testObserveTextOfStyledText() throws Exception {
 		StyledText text = new StyledText(shell, SWT.NONE);
 		assertFalse(text.isListening(SWT.FocusOut));
@@ -225,6 +249,7 @@
 		assertTrue(text.isListening(SWT.FocusOut));
 	}
 
+	@Test
 	public void testObserveTextWithEventOfUnsupportedControl() throws Exception {
 		Label label = new Label(shell, SWT.NONE);
 		try {
@@ -234,24 +259,28 @@
 		}
 	}
 
+	@Test
 	public void testObserveTextOfButton() throws Exception {
 		Button button = new Button(shell, SWT.PUSH);
 		ISWTObservableValue value = SWTObservables.observeText(button);
 		assertWidgetObservable(value, button, ButtonTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTextOfLabel() throws Exception {
 		Label label = new Label(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeText(label);
 		assertWidgetObservable(value, label, LabelTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTextOfCLabel() throws Exception {
 		CLabel label = new CLabel(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeText(label);
 		assertWidgetObservable(value, label, CLabelTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTextOfCombo() throws Exception {
 		Combo combo = new Combo(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeText(combo);
@@ -269,12 +298,14 @@
 		return propertyObservable;
 	}
 
+	@Test
 	public void testObserveTextOfCCombo() throws Exception {
 		CCombo combo = new CCombo(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeText(combo);
 		assertWidgetObservable(value, combo, CComboTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTextOfText() throws Exception {
 		Text text = new Text(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeText(text);
@@ -285,6 +316,7 @@
 		assertFalse(text.isListening(SWT.FocusOut));
 	}
 
+	@Test
 	public void testObserveTextOfItem() throws Exception {
 		CTabFolder ctf = new CTabFolder(shell, SWT.NONE);
 		Item item = new CTabItem(ctf, SWT.NONE);
@@ -292,6 +324,7 @@
 		assertWidgetObservable(value, item, ItemTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTextOfUnsupportedControl() throws Exception {
 		Table table = new Table(shell, SWT.NONE);
 		try {
@@ -301,18 +334,21 @@
 		}
 	}
 
+	@Test
 	public void testObserveImageOfButton() throws Exception {
 		Button button = new Button(shell, SWT.PUSH);
 		ISWTObservableValue value = SWTObservables.observeImage(button);
 		assertWidgetObservable(value, button, ButtonImageProperty.class);
 	}
 
+	@Test
 	public void testObserveImageOfCLabel() throws Exception {
 		CLabel cLabel = new CLabel(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeImage(cLabel);
 		assertWidgetObservable(value, cLabel, CLabelImageProperty.class);
 	}
 
+	@Test
 	public void testObserveImageOfItem() throws Exception {
 		CTabFolder ctf = new CTabFolder(shell, SWT.NONE);
 		Item item = new CTabItem(ctf, SWT.NONE);
@@ -320,12 +356,14 @@
 		assertWidgetObservable(value, item, ItemImageProperty.class);
 	}
 
+	@Test
 	public void testObserveImageOfLabel() throws Exception {
 		Label label = new Label(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeImage(label);
 		assertWidgetObservable(value, label, LabelImageProperty.class);
 	}
 
+	@Test
 	public void testObserveTooltipOfItem() throws Exception {
 		CTabFolder ctf = new CTabFolder(shell, SWT.NONE);
 		Item item = new CTabItem(ctf, SWT.NONE);
@@ -333,6 +371,7 @@
 		assertWidgetObservable(value, item, CTabItemTooltipTextProperty.class);
 	}
 
+	@Test
 	public void testObserveTooltipOfUnsupportedControl() throws Exception {
 		ToolTip ttip = new ToolTip(shell, SWT.NONE);
 		try {
@@ -342,12 +381,14 @@
 		}
 	}
 
+	@Test
 	public void testObserveTooltipOfControl() throws Exception {
 		Label label = new Label(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeTooltipText(label);
 		assertWidgetObservable(value, label, ControlTooltipTextProperty.class);
 	}
 
+	@Test
 	public void testObserveItemsOfCombo() throws Exception {
 		Combo combo = new Combo(shell, SWT.NONE);
 		ISWTObservableList list = (ISWTObservableList) SWTObservables
@@ -355,6 +396,7 @@
 		assertWidgetObservable(list, combo, ComboItemsProperty.class);
 	}
 
+	@Test
 	public void testObserveItemsOfCCombo() throws Exception {
 		CCombo ccombo = new CCombo(shell, SWT.NONE);
 		ISWTObservableList list = (ISWTObservableList) SWTObservables
@@ -362,6 +404,7 @@
 		assertWidgetObservable(list, ccombo, CComboItemsProperty.class);
 	}
 
+	@Test
 	public void testObserveItemsOfList() throws Exception {
 		List list = new List(shell, SWT.NONE);
 		ISWTObservableList observableList = (ISWTObservableList) SWTObservables
@@ -369,6 +412,7 @@
 		assertWidgetObservable(observableList, list, ListItemsProperty.class);
 	}
 
+	@Test
 	public void testObserveItemsOfUnsupportedControl() throws Exception {
 		Table table = new Table(shell, SWT.NONE);
 		try {
@@ -378,6 +422,7 @@
 		}
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfTable() throws Exception {
 		Table table = new Table(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables
@@ -386,6 +431,7 @@
 				TableSingleSelectionIndexProperty.class);
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfCCombo_DeselectAll()
 			throws Exception {
 		CCombo cCombo = new CCombo(shell, SWT.NONE);
@@ -399,6 +445,7 @@
 		assertEquals(-1, cCombo.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfCCombo_SetValueNull()
 			throws Exception {
 		CCombo cCombo = new CCombo(shell, SWT.NONE);
@@ -412,6 +459,7 @@
 		assertEquals(-1, cCombo.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfCombo_DeselectAll()
 			throws Exception {
 		Combo combo = new Combo(shell, SWT.NONE);
@@ -425,6 +473,7 @@
 		assertEquals(-1, combo.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfCombo_SetValueNull()
 			throws Exception {
 		Combo combo = new Combo(shell, SWT.NONE);
@@ -438,6 +487,7 @@
 		assertEquals(-1, combo.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfList_DeselectAll()
 			throws Exception {
 		List list = new List(shell, SWT.NONE);
@@ -451,6 +501,7 @@
 		assertEquals(-1, list.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfList_SetValueNull()
 			throws Exception {
 		List list = new List(shell, SWT.NONE);
@@ -464,6 +515,7 @@
 		assertEquals(-1, list.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfTable_DeselectAll()
 			throws Exception {
 		Table table = new Table(shell, SWT.NONE);
@@ -477,6 +529,7 @@
 		assertEquals(-1, table.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfTable_SetValueNull()
 			throws Exception {
 		Table table = new Table(shell, SWT.NONE);
@@ -490,6 +543,7 @@
 		assertEquals(-1, table.getSelectionIndex());
 	}
 
+	@Test
 	public void testObserveSingleSelectionIndexOfUnsupportedControl()
 			throws Exception {
 		Tree tree = new Tree(shell, SWT.NONE);
@@ -501,18 +555,21 @@
 		}
 	}
 
+	@Test
 	public void testObserveMinOfSpinner() throws Exception {
 		Spinner spinner = new Spinner(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeMin(spinner);
 		assertWidgetObservable(value, spinner, SpinnerMinimumProperty.class);
 	}
 
+	@Test
 	public void testObserveMinOfScale() throws Exception {
 		Scale scale = new Scale(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeMin(scale);
 		assertWidgetObservable(value, scale, ScaleMinimumProperty.class);
 	}
 
+	@Test
 	public void testObserveMinOfUnsupportedControl() throws Exception {
 		Text text = new Text(shell, SWT.NONE);
 		try {
@@ -522,18 +579,21 @@
 		}
 	}
 
+	@Test
 	public void testObserveMaxOfSpinner() throws Exception {
 		Spinner spinner = new Spinner(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeMax(spinner);
 		assertWidgetObservable(value, spinner, SpinnerMaximumProperty.class);
 	}
 
+	@Test
 	public void testObserveMaxOfScale() throws Exception {
 		Scale scale = new Scale(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeMax(scale);
 		assertWidgetObservable(value, scale, ScaleMaximumProperty.class);
 	}
 
+	@Test
 	public void testObserveMaxOfUnsupportedControl() throws Exception {
 		Text text = new Text(shell, SWT.NONE);
 		try {
@@ -543,18 +603,21 @@
 		}
 	}
 
+	@Test
 	public void testObserveEditableOfText() throws Exception {
 		Text text = new Text(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeEditable(text);
 		assertWidgetObservable(value, text, TextEditableProperty.class);
 	}
 
+	@Test
 	public void testObserveEditableOfCCombo() throws Exception {
 		CCombo combo = new CCombo(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeEditable(combo);
 		assertWidgetObservable(value, combo, CComboEditableProperty.class);
 	}
 
+	@Test
 	public void testObserveEditableOfStyledText() throws Exception {
 		StyledText styledText = new StyledText(shell, SWT.NONE);
 		ISWTObservableValue value = SWTObservables.observeEditable(styledText);
@@ -562,12 +625,14 @@
 				StyledTextEditableProperty.class);
 	}
 
+	@Test
 	public void testObserveEnabledOfMenu() throws Exception {
 		Menu menu = new Menu(shell, SWT.BAR);
 		ISWTObservableValue value = SWTObservables.observeEnabled(menu);
 		assertWidgetObservable(value, menu, MenuEnabledProperty.class);
 	}
 
+	@Test
 	public void testObserveEnabledOfMenuItem() throws Exception {
 		Menu menu = new Menu(shell, SWT.DROP_DOWN);
 		MenuItem item = new MenuItem(menu, SWT.PUSH);
@@ -575,6 +640,7 @@
 		assertWidgetObservable(value, item, MenuItemEnabledProperty.class);
 	}
 
+	@Test
 	public void testObserveSelectionOfMenuItem() throws Exception {
 		Menu menu = new Menu(shell, SWT.DROP_DOWN);
 		MenuItem item = new MenuItem(menu, SWT.PUSH);
@@ -582,12 +648,14 @@
 		assertWidgetObservable(value, item, MenuItemSelectionProperty.class);
 	}
 
+	@Test
 	public void testObserveEnabledOfScrollBar() throws Exception {
 		ScrollBar scrollBar = shell.getVerticalBar();
 		ISWTObservableValue value = SWTObservables.observeEnabled(scrollBar);
 		assertWidgetObservable(value, scrollBar, ScrollBarEnabledProperty.class);
 	}
 
+	@Test
 	public void testObserveEnabledOfToolItem() throws Exception {
 		ToolBar bar = new ToolBar(shell, SWT.HORIZONTAL);
 		ToolItem item = new ToolItem(bar, SWT.PUSH);
@@ -603,6 +671,7 @@
 		assertTrue(propertyClass.isInstance(propertyObservable.getProperty()));
 	}
 
+	@Test
 	public void testObserveEditableOfUnsupportedControl() throws Exception {
 		Label label = new Label(shell, SWT.NONE);
 		try {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetObservableThreadTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetObservableThreadTest.java
index 672a190..790047b 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetObservableThreadTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetObservableThreadTest.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.jface.tests.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeanProperties;
 import org.eclipse.core.tests.databinding.observable.ThreadRealm;
@@ -22,6 +24,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -31,8 +36,8 @@
 	protected ThreadRealm threadRealm;
 	private DataBindingContext ctx;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		threadRealm = new ThreadRealm();
 		new Thread() {
@@ -47,8 +52,8 @@
         threadRealm.waitUntilBlocking();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (ctx != null) {
 			threadRealm.exec(new Runnable() {
 				@Override
@@ -66,6 +71,7 @@
 		super.tearDown();
 	}
 
+	@Test
 	public void testBindWidgetObservableFromNonDisplayThread() {
 		final Text text = new Text(getShell(), SWT.BORDER);
 		final Bean bean = new Bean("oldValue");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetPropertiesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetPropertiesTest.java
index 8bb2fed..eb0aedc 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetPropertiesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/swt/WidgetPropertiesTest.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.jface.tests.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.conformance.util.RealmTester;
 import org.eclipse.jface.databinding.swt.DisplayRealm;
@@ -42,6 +45,9 @@
 import org.eclipse.swt.widgets.TrayItem;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.swt.widgets.TreeColumn;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -56,8 +62,8 @@
 	private Image image1;
 	private Image image2;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		shell = getShell();
@@ -71,8 +77,8 @@
 		RealmTester.setDefault(DisplayRealm.getRealm(shell.getDisplay()));
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		super.tearDown();
 
 		RealmTester.setDefault(null);
@@ -83,6 +89,7 @@
 		return new Shell(SWT.V_SCROLL);
 	}
 
+	@Test
 	public void testImage_ObserveButton() {
 		Button button = /* who's got the */new Button(shell, SWT.PUSH);
 		button.setImage(image1);
@@ -94,6 +101,7 @@
 		assertSame(image2, button.getImage());
 	}
 
+	@Test
 	public void testImage_ObserveCLabel() {
 		CLabel label = new CLabel(shell, SWT.NONE);
 		label.setImage(image1);
@@ -105,6 +113,7 @@
 		assertSame(image2, label.getImage());
 	}
 
+	@Test
 	public void testImage_ObserveLabel() {
 		Label label = new Label(shell, SWT.NONE);
 		label.setImage(image1);
@@ -116,6 +125,7 @@
 		assertSame(image2, label.getImage());
 	}
 
+	@Test
 	public void testText_ObserveButton() {
 		Button button = /* who's got a */new Button(shell, SWT.PUSH);
 		button.setText(string1);
@@ -127,6 +137,7 @@
 		assertEquals(string2, button.getText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveCTabItem() {
 		CTabFolder tf = new CTabFolder(shell, SWT.NONE);
 		CTabItem item = new CTabItem(tf, SWT.NONE);
@@ -140,6 +151,7 @@
 		assertEquals(string2, item.getToolTipText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveControl() {
 		Control control = new Label(shell, SWT.NONE);
 		control.setToolTipText(string1);
@@ -152,6 +164,7 @@
 		assertEquals(string2, control.getToolTipText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveTabItem() {
 		TabFolder tf = new TabFolder(shell, SWT.NONE);
 		TabItem item = new TabItem(tf, SWT.NONE);
@@ -165,6 +178,7 @@
 		assertEquals(string2, item.getToolTipText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveTableColumn() {
 		Table table = new Table(shell, SWT.NONE);
 		TableColumn column = new TableColumn(table, SWT.NONE);
@@ -178,6 +192,7 @@
 		assertEquals(string2, column.getToolTipText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveToolItem() {
 		ToolBar bar = new ToolBar(shell, SWT.NONE);
 		ToolItem item = new ToolItem(bar, SWT.NONE);
@@ -191,6 +206,7 @@
 		assertEquals(string2, item.getToolTipText());
 	}
 
+	@Test
 	public void testTooltipText_ObserveTrayItem() {
 		Tray tray = shell.getDisplay().getSystemTray();
 		TrayItem item = new TrayItem(tray, SWT.NONE);
@@ -209,6 +225,7 @@
 		}
 	}
 
+	@Test
 	public void testTooltipText_ObserveTreeColumn() {
 		Tree tree = new Tree(shell, SWT.NONE);
 		TreeColumn column = new TreeColumn(tree, SWT.NONE);
@@ -222,6 +239,7 @@
 		assertEquals(string2, column.getToolTipText());
 	}
 
+	@Test
 	public void testEnabled_ObserveMenu() {
 		Menu menu = new Menu(shell, SWT.BAR);
 		IObservableValue observable = WidgetProperties.enabled().observe(menu);
@@ -235,6 +253,7 @@
 		assertEquals(false, menu.getEnabled());
 	}
 
+	@Test
 	public void testEnabled_ObserveMenuItem() {
 		Menu menu = new Menu(shell, SWT.BAR);
 		MenuItem item = new MenuItem(menu, SWT.PUSH);
@@ -249,6 +268,7 @@
 		assertEquals(false, item.getEnabled());
 	}
 
+	@Test
 	public void testSelection_ObserveMenuItem() {
 		Menu menu = new Menu(shell, SWT.BAR);
 		MenuItem item = new MenuItem(menu, SWT.CHECK);
@@ -264,6 +284,7 @@
 		assertEquals(false, item.getSelection());
 	}
 
+	@Test
 	public void testEnabled_ObserveScrollBar() {
 		ScrollBar bar = shell.getVerticalBar();
 		IObservableValue observable = WidgetProperties.enabled().observe(bar);
@@ -277,6 +298,7 @@
 		assertEquals(false, bar.getEnabled());
 	}
 
+	@Test
 	public void testEnabled_ObserveToolItem() {
 		ToolBar bar = new ToolBar(shell, SWT.HORIZONTAL);
 		ToolItem item = new ToolItem(bar, SWT.PUSH);
@@ -291,6 +313,7 @@
 		assertEquals(false, item.getEnabled());
 	}
 
+	@Test
 	public void testEditable_ObserveText() {
 		Text text = new Text(shell, SWT.NONE);
 		IObservableValue observable = WidgetProperties.editable().observe(text);
@@ -304,6 +327,7 @@
 		assertEquals(true, text.getEditable());
 	}
 
+	@Test
 	public void testEditable_ObserveCCombo() {
 		CCombo combo = new CCombo(shell, SWT.NONE);
 		IObservableValue observable = WidgetProperties.editable()
@@ -318,6 +342,7 @@
 		assertEquals(true, combo.getEditable());
 	}
 
+	@Test
 	public void testEditable_ObserveStyledText() {
 		StyledText styledText = new StyledText(shell, SWT.NONE);
 		IObservableValue observable = WidgetProperties.editable().observe(
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListContentProviderTest.java
index fb04a08..aec17d9 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListContentProviderTest.java
@@ -11,6 +11,9 @@
  ******************************************************************************/
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -27,6 +30,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ObservableListContentProviderTest extends AbstractDefaultRealmTestCase {
 	private Shell shell;
@@ -34,8 +40,8 @@
 	private ObservableListContentProvider contentProvider;
 	private IObservableList input;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		viewer = new TableViewer(shell, SWT.NONE);
@@ -47,24 +53,27 @@
 		viewer.setInput(input);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		viewer = null;
 		input = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testKnownElements_Realm() throws Exception {
 		assertSame("realm for the known elements should be the SWT realm", DisplayRealm.getRealm(Display.getDefault()),
 				contentProvider.getKnownElements().getRealm());
 	}
 
+	@Test
 	public void testRealizedElements_Realm() {
 		assertSame("realm for the realized elements should be the SWT realm",
 				DisplayRealm.getRealm(Display.getDefault()), contentProvider.getRealizedElements().getRealm());
 	}
 
+	@Test
 	public void testKnownElementsAfterSetInput() {
 		assertEquals(0, contentProvider.getKnownElements().size());
 		Set<String> newElements = new HashSet<String>(Arrays.asList(new String[] { "one", "two", "three" }));
@@ -74,6 +83,7 @@
 		assertEquals(newElements, contentProvider.getKnownElements());
 	}
 
+	@Test
 	public void testViewerUpdate_RemoveElementAfterMutation() {
 		Mutable element = new Mutable(1);
 		input.add(element);
@@ -86,6 +96,7 @@
 		assertEquals(0, viewer.getTable().getItemCount());
 	}
 
+	@Test
 	public void testInputChanged_ClearsKnownElements() {
 		Object element = new Object();
 		input.add(element);
@@ -96,6 +107,7 @@
 		assertEquals(Collections.EMPTY_SET, knownElements);
 	}
 
+	@Test
 	public void testInputChanged_ClearsRealizedElements() {
 		// Realized elements must be allocated before adding the element
 		// otherwise we'd have to spin the event loop to see the new element
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListTreeContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListTreeContentProviderTest.java
index 3c35dc5..fe488ec 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListTreeContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableListTreeContentProviderTest.java
@@ -12,6 +12,10 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.Collections;
 
@@ -27,6 +31,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tree;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ObservableListTreeContentProviderTest extends
 		AbstractDefaultRealmTestCase {
@@ -36,8 +43,8 @@
 	private ObservableListTreeContentProvider contentProvider;
 	private Object input;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		tree = new Tree(shell, SWT.NONE);
@@ -45,8 +52,8 @@
 		input = new Object();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		tree = null;
 		viewer = null;
@@ -60,6 +67,7 @@
 		viewer.setInput(input);
 	}
 
+	@Test
 	public void testConstructor_NullArgumentThrowsException() {
 		try {
 			initContentProvider(null);
@@ -68,6 +76,7 @@
 		}
 	}
 
+	@Test
 	public void testGetElements_ChangesFollowObservedList() {
 		final IObservableList elements = new WritableList();
 		final Object input = new Object();
@@ -94,6 +103,7 @@
 				contentProvider.getElements(input)));
 	}
 
+	@Test
 	public void testViewerUpdate_RemoveElementAfterMutation() {
 		final IObservableList children = new WritableList();
 		initContentProvider(new IObservableFactory() {
@@ -112,6 +122,7 @@
 		assertEquals(0, tree.getItemCount());
 	}
 
+	@Test
 	public void testInputChanged_ClearsKnownElements() {
 		input = new Object();
 		final Object input2 = new Object();
@@ -138,6 +149,7 @@
 		assertEquals(Collections.EMPTY_SET, knownElements);
 	}
 
+	@Test
 	public void testInputChanged_ClearsRealizedElements() {
 		input = new Object();
 		final Object input2 = new Object();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableMapLabelProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableMapLabelProviderTest.java
index 25f2572..68ae430 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableMapLabelProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableMapLabelProviderTest.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
 import java.util.HashSet;
 
 import org.eclipse.core.databinding.beans.BeansObservables;
@@ -19,13 +22,15 @@
 import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;
 import org.eclipse.jface.examples.databinding.ModelObject;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
+import org.junit.Test;
 
 /**
  * @since 1.1
  */
 public class ObservableMapLabelProviderTest extends AbstractDefaultRealmTestCase {
 
-    public void testGetColumnText() throws Exception {
+    @Test
+	public void testGetColumnText() throws Exception {
         WritableSet set = new WritableSet(new HashSet(), Item.class);
         Item item = new Item();
         String value = "value";
@@ -36,7 +41,8 @@
         assertEquals(item.getValue(), labelProvider.getColumnText(item, 0));
     }
 
-    public void testGetColumnTextNullValue() throws Exception {
+    @Test
+	public void testGetColumnTextNullValue() throws Exception {
         WritableSet set = new WritableSet(new HashSet(), Item.class);
         Item item = new Item();
         set.add(item);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetContentProviderTest.java
index 5239534..3091be2 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetContentProviderTest.java
@@ -13,6 +13,9 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -28,6 +31,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.3
@@ -39,8 +45,8 @@
 	private ObservableSetContentProvider contentProvider;
 	private IObservableSet input;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		viewer = new TableViewer(shell, SWT.NONE);
@@ -52,24 +58,27 @@
 		viewer.setInput(input);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		viewer = null;
 		input = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testKnownElements_Realm() throws Exception {
 		assertSame("realm for the known elements should be the SWT realm", DisplayRealm.getRealm(Display.getDefault()),
 				contentProvider.getKnownElements().getRealm());
 	}
 
+	@Test
 	public void testRealizedElements_Realm() {
 		assertSame("realm for the realized elements should be the SWT realm",
 				DisplayRealm.getRealm(Display.getDefault()), contentProvider.getRealizedElements().getRealm());
 	}
 
+	@Test
 	public void testKnownElementsAfterSetInput() {
 		assertEquals(0, contentProvider.getKnownElements().size());
 		Set<String> newElements = new HashSet<String>(Arrays.asList(new String[] { "one", "two", "three" }));
@@ -79,6 +88,7 @@
 		assertEquals(newElements, contentProvider.getKnownElements());
 	}
 
+	@Test
 	public void testViewerUpdate_RemoveElementAfterMutation() {
 		Mutable element = new Mutable(1);
 		input.add(element);
@@ -91,6 +101,7 @@
 		assertEquals(0, viewer.getTable().getItemCount());
 	}
 
+	@Test
 	public void testInputChanged_ClearsKnownElements() {
 		Object element = new Object();
 		input.add(element);
@@ -101,6 +112,7 @@
 		assertEquals(Collections.EMPTY_SET, knownElements);
 	}
 
+	@Test
 	public void testInputChanged_ClearsRealizedElements() {
 		// Realized elements must be allocated before adding the element
 		// otherwise we'd have to spin the event loop to see the new element
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetTreeContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetTreeContentProviderTest.java
index 55e72e6..3a1b7d3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetTreeContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableSetTreeContentProviderTest.java
@@ -12,6 +12,10 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -30,6 +34,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tree;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ObservableSetTreeContentProviderTest extends AbstractDefaultRealmTestCase {
 	private Shell shell;
@@ -38,8 +45,8 @@
 	private ObservableSetTreeContentProvider contentProvider;
 	private Object input;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		tree = new Tree(shell, SWT.NONE);
@@ -47,8 +54,8 @@
 		input = new Object();
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		tree = null;
 		viewer = null;
@@ -62,6 +69,7 @@
 		viewer.setInput(input);
 	}
 
+	@Test
 	public void testConstructor_NullArgumentThrowsException() {
 		try {
 			initContentProvider(null);
@@ -70,6 +78,7 @@
 		}
 	}
 
+	@Test
 	public void testGetElements_ChangesFollowObservedList() {
 		final IObservableSet elements = new WritableSet();
 		final Object input = new Object();
@@ -95,6 +104,7 @@
 		assertTrue(elementList.containsAll(Arrays.asList(new Object[] { element0, element1 })));
 	}
 
+	@Test
 	public void testViewerUpdate_RemoveElementAfterMutation() {
 		IElementComparer comparer = new IElementComparer() {
 			@Override
@@ -126,6 +136,7 @@
 		assertEquals(0, tree.getItemCount());
 	}
 
+	@Test
 	public void testInputChanged_ClearsKnownElements() {
 		input = new Object();
 		final Object input2 = new Object();
@@ -152,6 +163,7 @@
 		assertEquals(Collections.EMPTY_SET, knownElements);
 	}
 
+	@Test
 	public void testInputChanged_ClearsRealizedElements() {
 		input = new Object();
 		final Object input2 = new Object();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableValueEditingSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableValueEditingSupportTest.java
index 92ac08c..0c10d85 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableValueEditingSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ObservableValueEditingSupportTest.java
@@ -12,6 +12,10 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.Binding;
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.beans.BeanProperties;
@@ -34,6 +38,8 @@
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ObservableValueEditingSupportTest extends AbstractSWTTestCase {
 	private Shell shell;
@@ -46,8 +52,8 @@
 
 	private Bean bean;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		shell = getShell();
@@ -69,6 +75,7 @@
 				"value"));
 	}
 
+	@Test
 	public void testInitializeCellEditorValue_OrderOfOperations()
 			throws Exception {
 		assertEquals("precondition", 0, editingSupport.events.length());
@@ -79,6 +86,7 @@
 				editingSupport.events.toString());
 	}
 
+	@Test
 	public void testSaveCellEditorValue_UpdatesModel() throws Exception {
 		shell.open();
 
@@ -101,6 +109,7 @@
 		editingSupport.text.notifyListeners(SWT.DefaultSelection, new Event());
 	}
 
+	@Test
 	public void testSaveCellEditorValue_IgnoreIfNotDirty() throws Exception {
 		String initialValue = bean.getValue();
 
@@ -115,6 +124,7 @@
 		assertEquals(initialValue, bean.getValue());
 	}
 
+	@Test
 	public void testDisposesBinding() throws Exception {
 		shell.open();
 
@@ -125,6 +135,7 @@
 		assertTrue(editingSupport.binding.isDisposed());
 	}
 
+	@Test
 	public void testDisposesTargetObservable() throws Exception {
 		shell.open();
 
@@ -135,6 +146,7 @@
 		assertTrue(editingSupport.target.isDisposed());
 	}
 
+	@Test
 	public void testDisposesModelObservable() throws Exception {
 		shell.open();
 
@@ -145,6 +157,7 @@
 		assertTrue(editingSupport.model.isDisposed());
 	}
 
+	@Test
 	public void testCanEdit_DefaultIsTrue() throws Exception {
 		assertTrue(editingSupport.canEdit(bean));
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewerSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewerSupportTest.java
index 29b56d7..f5eb031 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewerSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewerSupportTest.java
@@ -11,6 +11,8 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.HashSet;
 
@@ -36,6 +38,9 @@
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TreeViewer;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class ViewerSupportTest extends AbstractSWTTestCase {
 	private ILogger oldLog;
@@ -44,8 +49,8 @@
 	private AbstractTableViewer structuredViewer;
 	private AbstractTreeViewer treeViewer;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		oldLog = Policy.getLog();
@@ -71,8 +76,8 @@
 		});
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (structuredViewer != null)
 			structuredViewer.getControl().dispose();
 		if (treeViewer != null)
@@ -98,6 +103,7 @@
 		return treeViewer;
 	}
 
+	@Test
 	public void testBindList_Twice() {
 		StructuredViewer viewer = getStructuredViewer();
 		IObservableList input0 = WritableList.withElementType(Bean.class);
@@ -109,6 +115,7 @@
 		ViewerSupport.bind(viewer, input1, labelProp);
 	}
 
+	@Test
 	public void testBindSet_Twice() {
 		StructuredViewer viewer = getStructuredViewer();
 		IObservableSet input0 = WritableSet.withElementType(Bean.class);
@@ -120,6 +127,7 @@
 		ViewerSupport.bind(viewer, input1, labelProp);
 	}
 
+	@Test
 	public void testBindListTree_Twice() {
 		AbstractTreeViewer viewer = getTreeViewer();
 		Bean input0 = new Bean(Arrays.asList(new Bean[] { new Bean("elem0"), new Bean("elem1"), new Bean("elem2") }));
@@ -130,6 +138,7 @@
 		ViewerSupport.bind(viewer, input1, childrenProp, labelProp);
 	}
 
+	@Test
 	public void testBindSetTree_Twice() {
 		AbstractTreeViewer viewer = getTreeViewer();
 		Bean input0 = new Bean(new HashSet<Bean>(Arrays.asList(new Bean[] { new Bean("elem0"), new Bean("elem1"),
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java
index 69ead76..5df29f0 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java
@@ -12,6 +12,8 @@
 
 package org.eclipse.jface.tests.databinding.viewers;
 
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.observable.IDecoratingObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.property.IPropertyObservable;
@@ -24,6 +26,9 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests for ViewersObservables
@@ -34,16 +39,16 @@
 	TableViewer viewer;
 	Realm realm;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		realm = DisplayRealm.getRealm(Display.getCurrent());
 		Shell shell = new Shell();
 		viewer = new TableViewer(shell, SWT.NONE);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		Shell shell = viewer.getTable().getShell();
 		if (!shell.isDisposed())
 			shell.dispose();
@@ -52,6 +57,7 @@
 		super.tearDown();
 	}
 
+	@Test
 	public void testObserveInput_InstanceOfViewerInputObservableValue() {
 		IViewerObservableValue observable = (IViewerObservableValue) ViewersObservables
 				.observeInput(viewer);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/wizard/WizardPageSupportTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/wizard/WizardPageSupportTest.java
index 13fefcb..92c09dc 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/wizard/WizardPageSupportTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/wizard/WizardPageSupportTest.java
@@ -12,6 +12,11 @@
 
 package org.eclipse.jface.tests.databinding.wizard;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.DataBindingContext;
 import org.eclipse.core.databinding.ValidationStatusProvider;
 import org.eclipse.core.databinding.observable.Diffs;
@@ -35,6 +40,7 @@
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.swt.widgets.Composite;
+import org.junit.Test;
 
 /**
  * @since 1.2
@@ -44,6 +50,7 @@
 	/**
 	 * Bug 235195.
 	 */
+	@Test
 	public void testPageComplete() {
 		IWizardPage page = new WizardPage("Page") {
 			@Override
@@ -79,6 +86,7 @@
 		loadWizardPage(page);
 	}
 
+	@Test
 	public void testPageCompleteOnValidationStaleness() {
 		IWizardPage page = new WizardPage("Page") {
 			@Override
@@ -106,6 +114,7 @@
 		loadWizardPage(page);
 	}
 
+	@Test
 	public void testValidationMessageProvider() {
 		IWizardPage page = new WizardPage("Page") {
 			@Override
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskLexerAndTokenTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskLexerAndTokenTest.java
index 7505b91..05461fd 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskLexerAndTokenTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskLexerAndTokenTest.java
@@ -10,19 +10,26 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.examples.databinding.mask.internal;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.jface.examples.databinding.mask.internal.EditMaskLexerAndToken;
+import org.junit.Before;
+import org.junit.Test;
 
-public class EditMaskLexerAndTokenTest extends TestCase {
+public class EditMaskLexerAndTokenTest {
 
 	private EditMaskLexerAndToken token;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		token = new EditMaskLexerAndToken();
 	}
 
+	@Test
 	public void testInitWithNumeric() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertTrue("Should accept a digit", token.accept("0"));
@@ -51,6 +58,7 @@
 		assertFalse("Placeholders are not read-only", token.isReadOnly());
 	}
 
+	@Test
 	public void testInitWithLiteral() throws Exception {
 		token.initializeEditMask("(", 0);
 		assertEquals("Literals automatically set their input", "(", token.getInput());
@@ -60,28 +68,33 @@
 		assertFalse("Literals cannot accept characters", token.canAcceptMoreCharacters());
 	}
 
+	@Test
 	public void testInitWithBackslashLiteral() throws Exception {
 		token.initializeEditMask("\\#", 0);
 		assertEquals("Should get backslash literal", "#", token.getInput());
 	}
 
+	@Test
 	public void testAcceptWithValidInputAndEmpty() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertTrue("Should accept a 0", token.accept("0"));
 	}
 
+	@Test
 	public void testAcceptWhenParserCannotAcceptMoreCharacters() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertTrue("Should accept a 0", token.accept("0"));
 		assertFalse("Should not accept a 0 -- input full", token.accept("0"));
 	}
 
+	@Test
 	public void testGetInput() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertTrue("Should accept a #", token.accept("0"));
 		assertEquals(token.getInput(), "0");
 	}
 
+	@Test
 	public void testClear_withNonLiteral() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertTrue("Should accept a 0", token.accept("0"));
@@ -90,6 +103,7 @@
 		assertNull("Input should be null after clear", token.getInput());
 	}
 
+	@Test
 	public void testClear_withLiteral() throws Exception {
 		token.initializeEditMask("(", 0);
 		assertNotNull("Input should not be null", token.getInput());
@@ -97,6 +111,7 @@
 		assertNotNull("Input should still not be null after clear of read-only literal", token.getInput());
 	}
 
+	@Test
 	public void testIsComplete_withNonLiteral() throws Exception {
 		token.initializeEditMask("#", 0);
 		assertFalse("should not be complete", token.isComplete());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskParserTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskParserTest.java
index fee1b8e..239c1971 100755
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskParserTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/databinding/mask/internal/EditMaskParserTest.java
@@ -11,27 +11,33 @@
 
 package org.eclipse.jface.tests.examples.databinding.mask.internal;
 
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.eclipse.jface.examples.databinding.mask.EditMaskParseException;
 import org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class EditMaskParserTest extends TestCase {
+public class EditMaskParserTest {
 
 	private EditMaskParser parser;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		parser = new EditMaskParser("(###) ###-####");
 	}
 
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#EditMaskParser(java.lang.String)}.
 	 */
+	@Test
 	public void testEditMaskParser_validMask() {
 		new EditMaskParser("(###) ###-####");
 	}
@@ -39,6 +45,7 @@
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#EditMaskParser(java.lang.String)}.
 	 */
+	@Test
 	public void testEditMaskParser_invalidMask() {
 		try {
 			new EditMaskParser("(###) ###-####\\");
@@ -51,6 +58,7 @@
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#setInput(java.lang.String)}.
 	 */
+	@Test
 	public void testSetInput() {
 		parser.setInput("63a0) 5*55-1\\212abc9");
 		assertEquals("Unformatted input", "6305551212", parser.getRawResult());
@@ -60,6 +68,7 @@
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#setInput(java.lang.String)}.
 	 */
+	@Test
 	public void testSetInput_incomplete() {
 		parser.setInput("6a0) 5*5-1\\12");
 		assertEquals("Unformatted input", "6055112", parser.getRawResult());
@@ -69,6 +78,7 @@
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#isComplete()}.
 	 */
+	@Test
 	public void testIsComplete() {
 		parser.setInput("63a0) 5*55-1\\212");
 		assertTrue("complete", parser.isComplete());
@@ -76,6 +86,7 @@
 		assertFalse("incomplete", parser.isComplete());
 	}
 
+	@Test
 	public void testSetPlaceholder() throws Exception {
 		parser.setInput("6a0) 5*5-1\\12");
 		assertEquals("Formatted input", "(605) 511-2   ", parser.getFormattedResult());
@@ -86,12 +97,14 @@
 	/**
 	 * Test method for {@link org.eclipse.jface.examples.databinding.mask.internal.EditMaskParser#getNextInputPosition(int)}.
 	 */
+	@Test
 	public void testGetNextInputPosition() {
 		assertEquals("Skip leading (", 1, parser.getNextInputPosition(0));
 		assertEquals("Position 1 is good", 1, parser.getNextInputPosition(1));
 		assertEquals("Skip )<space>", 6, parser.getNextInputPosition(4));
 	}
 
+	@Test
 	public void testGetFirstIncompleteInputPosition() throws Exception {
 		assertEquals("1st position incomplete", 1, parser.getFirstIncompleteInputPosition());
 		parser.setInput("6a0) 5*5-1\\12");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/model/PersonTests.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/model/PersonTests.java
index e44f983..85a42d3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/model/PersonTests.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/examples/model/PersonTests.java
@@ -11,18 +11,22 @@
 
 package org.eclipse.jface.tests.examples.model;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
-import junit.framework.TestCase;
-
 import org.eclipse.jface.examples.databinding.model.SimplePerson;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class PersonTests extends TestCase {
+public class PersonTests {
+	@Test
 	public void testSetName() {
 		SimplePerson person = new SimplePerson();
 		Listener listener = new Listener();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ButtonObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ButtonObservableValueTest.java
index d3e80b6..d950c0a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ButtonObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ButtonObservableValueTest.java
@@ -13,8 +13,9 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -29,6 +30,10 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -39,7 +44,8 @@
 	private ValueChangeEventTracker listener;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		Shell shell = getShell();
@@ -48,6 +54,7 @@
 		listener = new ValueChangeEventTracker();
 	}
 
+	@Test
 	public void testSelection_ChangeNotifiesObservable() throws Exception {
 		observableValue.addValueChangeListener(listener);
 		button.setSelection(true);
@@ -60,6 +67,7 @@
 				listener.count);
 	}
 
+	@Test
 	public void testSelection_NoChange() throws Exception {
 		button.setSelection(true);
 		button.notifyListeners(SWT.Selection, null);
@@ -74,6 +82,7 @@
 				0, listener.count);
 	}
 
+	@Test
 	public void testSetValue_NullConvertedToFalse() {
 		button.setSelection(true);
 		assertEquals(Boolean.TRUE, observableValue.getValue());
@@ -82,6 +91,7 @@
 		assertEquals(Boolean.FALSE, observableValue.getValue());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		ValueChangeEventTracker testCounterValueChangeListener = new ValueChangeEventTracker();
 		observableValue.addValueChangeListener(testCounterValueChangeListener);
@@ -104,13 +114,8 @@
 		assertEquals(1, testCounterValueChangeListener.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ButtonObservableValueTest.class
-				.getName());
-		suite.addTestSuite(ButtonObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueSelectionTest.java
index c6c2d12..2a977e8 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueSelectionTest.java
@@ -12,9 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -29,31 +27,33 @@
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
-public class CComboObservableValueSelectionTest extends TestCase {
+public class CComboObservableValueSelectionTest {
 	private Delegate delegate;
 
 	private CCombo combo;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		delegate = new Delegate();
 		delegate.setUp();
 		combo = delegate.combo;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-
+	@After
+	public void tearDown() throws Exception {
 		delegate.tearDown();
 	}
 
+	@Test
 	public void testSelection_NotifiesObservable() throws Exception {
 		IObservableValue observable = (IObservableValue) delegate
 				.createObservable(DisplayRealm.getRealm(Display.getDefault()));
@@ -65,13 +65,8 @@
 		assertEquals("Observable was not notified.", 1, listener.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				CComboObservableValueSelectionTest.class.getName());
-		suite.addTestSuite(CComboObservableValueSelectionTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTest.java
index 035efbd..85d9181 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTest.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
@@ -24,11 +26,13 @@
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
 public class CComboObservableValueTest extends AbstractSWTTestCase {
+	@Test
 	public void testDispose() throws Exception {
 		CCombo combo = new CCombo(getShell(), SWT.NONE);
 		ISWTObservableValue observableValue = SWTObservables.observeText(combo);
@@ -55,6 +59,7 @@
 		assertEquals(expected2, combo.getText());
 	}
 
+	@Test
 	public void testSetValueWithNull() {
 		testSetValueWithNull(WidgetProperties.text());
 		testSetValueWithNull(WidgetProperties.selection());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTextTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTextTest.java
index 7d8b858..cc83f99 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTextTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboObservableValueTextTest.java
@@ -12,9 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -28,31 +26,33 @@
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
-public class CComboObservableValueTextTest extends TestCase {
+public class CComboObservableValueTextTest {
 	private Delegate delegate;
 
 	private CCombo combo;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		delegate = new Delegate();
 		delegate.setUp();
 		combo = delegate.combo;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-
+	@After
+	public void tearDown() throws Exception {
 		delegate.tearDown();
 	}
 
+	@Test
 	public void testModify_NotifiesObservable() throws Exception {
 		IObservableValue observable = delegate
 				.createObservableValue(DisplayRealm.getRealm(Display
@@ -65,13 +65,8 @@
 		assertEquals("Observable was not notified.", 1, listener.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(CComboObservableValueTextTest.class
-				.getName());
-		suite.addTestSuite(CComboObservableValueTextTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboSingleSelectionObservableValueTest.java
index 8eca36b..28ec096 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboSingleSelectionObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CComboSingleSelectionObservableValueTest.java
@@ -13,8 +13,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -27,12 +26,16 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  */
 public class CComboSingleSelectionObservableValueTest extends
 		AbstractSWTTestCase {
+	@Test
 	public void testSetValue() throws Exception {
 		CCombo combo = new CCombo(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables
@@ -52,13 +55,8 @@
 		assertEquals("Item2", combo.getText());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				CComboSingleSelectionObservableValueTest.class.getName());
-		suite.addTestSuite(CComboSingleSelectionObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CLabelObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CLabelObservableValueTest.java
index 508838e..b1774a3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CLabelObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/CLabelObservableValueTest.java
@@ -12,9 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -27,20 +25,23 @@
 import org.eclipse.swt.custom.CLabel;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  *
  */
-public class CLabelObservableValueTest extends TestCase {
+public class CLabelObservableValueTest {
 	private Delegate delegate;
 	private IObservableValue observable;
 	private CLabel label;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		delegate = new Delegate();
 		delegate.setUp();
 		label = delegate.label;
@@ -48,14 +49,13 @@
 				.getRealm(Display.getDefault()));
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-
+	@After
+	public void tearDown() throws Exception {
 		delegate.tearDown();
 		observable.dispose();
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		// preconditions
 		assertEquals(null, label.getText());
@@ -67,13 +67,8 @@
 		assertEquals("observable value", value, observable.getValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(CLabelObservableValueTest.class
-				.getName());
-		suite.addTestSuite(CLabelObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueSelectionTest.java
index 7e70310..5e8efd3 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueSelectionTest.java
@@ -12,9 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -29,32 +27,34 @@
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  *
  */
-public class ComboObservableValueSelectionTest extends TestCase {
+public class ComboObservableValueSelectionTest {
 	private Delegate delegate;
 
 	private Combo combo;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		delegate = new Delegate();
 		delegate.setUp();
 		combo = delegate.combo;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-
+	@After
+	public void tearDown() throws Exception {
 		delegate.tearDown();
 	}
 
+	@Test
 	public void testSelection_NotifiesObservable() throws Exception {
 		IObservableValue observable = (IObservableValue) delegate
 				.createObservable(DisplayRealm.getRealm(Display.getDefault()));
@@ -67,13 +67,8 @@
 		assertEquals("Observable was not notified.", 1, listener.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ComboObservableValueSelectionTest.class
-				.toString());
-		suite.addTestSuite(ComboObservableValueSelectionTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTest.java
index 31b60ef..379e5a4 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTest.java
@@ -13,6 +13,8 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.core.databinding.property.value.IValueProperty;
@@ -24,12 +26,14 @@
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Combo;
+import org.junit.Test;
 
 /**
  * @since 3.2
  * @no
  */
 public class ComboObservableValueTest extends AbstractSWTTestCase {
+	@Test
 	public void testDispose() throws Exception {
 		Combo combo = new Combo(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables.observeText(combo);
@@ -55,6 +59,7 @@
 		assertEquals(expected2, combo.getText());
 	}
 
+	@Test
 	public void testSetValueWithNull() {
 		testSetValueWithNull(WidgetProperties.text());
 		testSetValueWithNull(WidgetProperties.selection());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTextTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTextTest.java
index f4cc479..7493d5d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTextTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboObservableValueTextTest.java
@@ -12,9 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -28,32 +26,34 @@
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
  *
  */
-public class ComboObservableValueTextTest extends TestCase {
+public class ComboObservableValueTextTest {
 	private Delegate delegate;
 
 	private Combo combo;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-
+	@Before
+	public void setUp() throws Exception {
 		delegate = new Delegate();
 		delegate.setUp();
 		combo = delegate.combo;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-
+	@After
+	public void tearDown() throws Exception {
 		delegate.tearDown();
 	}
 
+	@Test
 	public void testModify_NotifiesObservable() throws Exception {
 		IObservableValue observable = delegate
 				.createObservableValue(DisplayRealm.getRealm(Display
@@ -66,13 +66,8 @@
 		assertEquals("Observable was not notified.", 1, listener.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ComboObservableValueTextTest.class
-				.toString());
-		suite.addTestSuite(ComboObservableValueTextTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboSingleSelectionObservableValueTest.java
index f05b219..bb072ca 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboSingleSelectionObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ComboSingleSelectionObservableValueTest.java
@@ -11,11 +11,14 @@
  ******************************************************************************/
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Combo;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -23,6 +26,7 @@
  */
 public class ComboSingleSelectionObservableValueTest extends
 		AbstractSWTTestCase {
+	@Test
 	public void testSetValue() throws Exception {
 		Combo combo = new Combo(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ControlObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ControlObservableValueTest.java
index c3cc028..81c9c98 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ControlObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ControlObservableValueTest.java
@@ -13,6 +13,10 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
@@ -28,6 +32,9 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -37,20 +44,23 @@
 	private Shell shell;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		shell = new Shell();
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		if (shell != null && !shell.isDisposed()) {
 			shell.dispose();
 			shell = null;
 		}
 	}
 
+	@Test
 	public void testSetValueEnabled() throws Exception {
 		ISWTObservableValue observableValue = SWTObservables.observeEnabled(shell);
 		Boolean value = Boolean.FALSE;
@@ -58,34 +68,40 @@
 		assertFalse(shell.isEnabled());
 	}
 
+	@Test
 	public void testGetValueEnabled() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeEnabled(shell);
 		shell.setEnabled(false);
 		assertEquals(Boolean.FALSE, value.getValue());
 	}
 
+	@Test
 	public void testGetValueTypeEnabled() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeEnabled(shell);
 		assertEquals(boolean.class, value.getValueType());
 	}
 
+	@Test
 	public void testSetValueVisible() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeVisible(shell);
 		value.setValue(Boolean.FALSE);
 		assertFalse(shell.isVisible());
 	}
 
+	@Test
 	public void testGetValueVisible() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeVisible(shell);
 		shell.setVisible(false);
 		assertEquals(Boolean.FALSE, value.getValue());
 	}
 
+	@Test
 	public void testGetValueTypeVisible() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeVisible(shell);
 		assertEquals(Boolean.TYPE, value.getValueType());
 	}
 
+	@Test
 	public void testSetValueForeground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeForeground(shell);
 
@@ -95,6 +111,7 @@
 		assertEquals(color, shell.getForeground());
 	}
 
+	@Test
 	public void testGetValueForeground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeForeground(shell);
 
@@ -103,11 +120,13 @@
 		assertEquals(color, value.getValue());
 	}
 
+	@Test
 	public void testGetValueTypeForgroundColor() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeForeground(shell);
 		assertEquals(Color.class, value.getValueType());
 	}
 
+	@Test
 	public void testGetValueBackground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeBackground(shell);
 
@@ -116,6 +135,7 @@
 		assertEquals(color, value.getValue());
 	}
 
+	@Test
 	public void testSetValueBackground() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeBackground(shell);
 
@@ -125,16 +145,19 @@
 		assertEquals(color, shell.getBackground());
 	}
 
+	@Test
 	public void testGetValueTypeBackgroundColor() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeBackground(shell);
 		assertEquals(Color.class, value.getValueType());
 	}
 
+	@Test
 	public void testGetValueTypeTooltip() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeTooltipText(shell);
 		assertEquals(String.class, value.getValueType());
 	}
 
+	@Test
 	public void testSetValueFont() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeFont(shell);
 
@@ -144,6 +167,7 @@
 		assertEquals(font, shell.getFont());
 	}
 
+	@Test
 	public void testGetValueFont() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeFont(shell);
 
@@ -152,11 +176,13 @@
 		assertEquals(font, value.getValue());
 	}
 
+	@Test
 	public void testGetValueTypeFont() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeFont(shell);
 		assertEquals(Font.class, value.getValueType());
 	}
 
+	@Test
 	public void testSetValueTooltipText() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeTooltipText(shell);
 		String text = "text";
@@ -164,6 +190,7 @@
 		assertEquals(text, shell.getToolTipText());
 	}
 
+	@Test
 	public void testGetValueTooltipText() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeTooltipText(shell);
 		String text = "text";
@@ -171,11 +198,13 @@
 		assertEquals(text, value.getValue());
 	}
 
+	@Test
 	public void testGetValueTypeTooltipText() throws Exception {
 		ISWTObservableValue value = SWTObservables.observeTooltipText(shell);
 		assertEquals(String.class, value.getValueType());
 	}
 
+	@Test
 	public void testObserveFocus() {
 		System.out.println("ControlObservableValueTest.testObserveFocus() start active shell: "
 				+ shell.getDisplay().getActiveShell());
@@ -209,7 +238,7 @@
 		System.out.println("active shell (5): " + shell.getDisplay().getActiveShell());
 
 		System.out.println("Value (should be true): " + value.getValue());
-		Screenshots.takeScreenshot(getClass(), getName(), System.out);
+		Screenshots.takeScreenshot(getClass(), getClass().getSimpleName(), System.out);
 
 		assertEquals(Boolean.TRUE, value.getValue());
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeCalendarObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeCalendarObservableValueTest.java
index 6b24e1b..2ecb634 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeCalendarObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeCalendarObservableValueTest.java
@@ -15,6 +15,8 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.Calendar;
 import java.util.Date;
 
@@ -23,6 +25,8 @@
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.DateTime;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -32,13 +36,14 @@
 	private DateTime dateTime;
 	private IObservableValue dateObservable;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		dateTime = new DateTime(getShell(), SWT.CALENDAR);
 		dateObservable = WidgetProperties.selection().observe(dateTime);
 	}
 
+	@Test
 	public void testGetValue_ExcludesTimeComponent() {
 		Calendar calendar = Calendar.getInstance();
 		calendar.clear();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeDateObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeDateObservableValueTest.java
index 638e4e4..65ec4f0 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeDateObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeDateObservableValueTest.java
@@ -15,6 +15,8 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.Calendar;
 import java.util.Date;
 
@@ -23,6 +25,8 @@
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.DateTime;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -32,13 +36,14 @@
 	private DateTime dateTime;
 	private IObservableValue dateObservable;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		dateTime = new DateTime(getShell(), SWT.DATE);
 		dateObservable = WidgetProperties.selection().observe(dateTime);
 	}
 
+	@Test
 	public void testGetValue_ExcludesTimeComponent() {
 		Calendar calendar = Calendar.getInstance();
 		calendar.clear();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeSelectionPropertyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeSelectionPropertyTest.java
index cefaecc..c651df8 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeSelectionPropertyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeSelectionPropertyTest.java
@@ -12,10 +12,14 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.fail;
+
 import org.eclipse.jface.internal.databinding.swt.DateTimeSelectionProperty;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.DateTime;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -25,13 +29,14 @@
 	DateTime dateTime;
 	DateTimeSelectionProperty property;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		dateTime = new DateTime(getShell(), SWT.DATE);
 		property = new DateTimeSelectionProperty();
 	}
 
+	@Test
 	public void testSetValue_NullNotThrowingNullPointerException() {
 		try {
 			property.setValue(dateTime, null);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeTimeObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeTimeObservableValueTest.java
index a49e02d..c67494f 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeTimeObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/DateTimeTimeObservableValueTest.java
@@ -15,6 +15,8 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import java.util.Calendar;
 import java.util.Date;
 
@@ -23,6 +25,8 @@
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.DateTime;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -32,13 +36,14 @@
 	private DateTime dateTime;
 	private IObservableValue dateObservable;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		dateTime = new DateTime(getShell(), SWT.TIME);
 		dateObservable = WidgetProperties.selection().observe(dateTime);
 	}
 
+	@Test
 	public void testGetValue_ExcludesDateComponent() {
 		Calendar calendar = Calendar.getInstance();
 		calendar.clear();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/GroupObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/GroupObservableValueTest.java
index f0c3767..5bbb71e 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/GroupObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/GroupObservableValueTest.java
@@ -25,8 +25,9 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
@@ -45,7 +46,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -59,6 +61,7 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		// preconditions
 		assertEquals("", group.getText());
@@ -70,13 +73,8 @@
 		assertEquals("observable value", value, observable.getValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(GroupObservableValueTest.class
-				.toString());
-		suite.addTestSuite(GroupObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/LabelObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/LabelObservableValueTest.java
index 77c7a6b..d4c436b 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/LabelObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/LabelObservableValueTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -45,7 +46,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -59,6 +61,7 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		// preconditions
 		assertEquals("", label.getText());
@@ -70,13 +73,8 @@
 		assertEquals("observable value", value, observable.getValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(LabelObservableValueTest.class
-				.toString());
-		suite.addTestSuite(LabelObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ListSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ListSingleSelectionObservableValueTest.java
index 47f794b..2a2476d 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ListSingleSelectionObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ListSingleSelectionObservableValueTest.java
@@ -12,17 +12,21 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.List;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
 public class ListSingleSelectionObservableValueTest extends AbstractSWTTestCase {
+	@Test
 	public void testSetValue() throws Exception {
 		List list = new List(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables
@@ -39,6 +43,7 @@
 		assertEquals("observable value", value, observableValue.getValue());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		List list = new List(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SWTDelayedObservableValueDecoratorTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SWTDelayedObservableValueDecoratorTest.java
index cbcdaf5..06cb825 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SWTDelayedObservableValueDecoratorTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SWTDelayedObservableValueDecoratorTest.java
@@ -12,8 +12,9 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -31,6 +32,11 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for DelayedObservableValue
@@ -47,7 +53,8 @@
 	private ISWTObservableValue delayed;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		display = Display.getCurrent();
 		shell = new Shell(display);
@@ -60,7 +67,8 @@
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		delayed.dispose();
 		target.dispose();
 		target = null;
@@ -70,6 +78,7 @@
 		super.tearDown();
 	}
 
+	@Test
 	public void testFocusOut_FiresPendingValueChange() {
 		assertFiresPendingValueChange(new Runnable() {
 			@Override
@@ -96,13 +105,8 @@
 		assertEquals(newValue, tracker.event.diff.getNewValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				SWTDelayedObservableValueDecoratorTest.class.getName());
-		suite.addTestSuite(SWTDelayedObservableValueDecoratorTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMaxTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMaxTest.java
index fc76f1a..2513779 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMaxTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMaxTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Scale;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int max = 100;
 		scale.setMaximum(max);
 		assertEquals(Integer.valueOf(max), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int max = 100;
 		observable.setValue(Integer.valueOf(max));
 		assertEquals(max, scale.getMaximum());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ScaleObservableValueMaxTest.class
-				.toString());
-		suite.addTestSuite(ScaleObservableValueMaxTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMinTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMinTest.java
index 84521f3..10b1b61 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMinTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueMinTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Scale;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int min = 100;
 		scale.setMinimum(min);
 		assertEquals(Integer.valueOf(min), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int min = 100;
 		observable.setValue(Integer.valueOf(min));
 		assertEquals(min, scale.getMinimum());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ScaleObservableValueMinTest.class
-				.toString());
-		suite.addTestSuite(ScaleObservableValueMinTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueSelectionTest.java
index df9bccd..6d20246 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ScaleObservableValueSelectionTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Scale;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int value = 100;
 		scale.setSelection(value);
 		assertEquals(Integer.valueOf(value), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int value = 100;
 		observable.setValue(Integer.valueOf(value));
 		assertEquals(value, scale.getSelection());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ScaleObservableValueSelectionTest.class
-				.toString());
-		suite.addTestSuite(ScaleObservableValueSelectionTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ShellObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ShellObservableValueTest.java
index bd0708a..fb49f36 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ShellObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/ShellObservableValueTest.java
@@ -12,8 +12,7 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -25,6 +24,11 @@
 import org.eclipse.jface.databinding.swt.WidgetProperties;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for ShellObservableValue
@@ -39,7 +43,8 @@
 	ValueChangeEventTracker tracker;
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		observable = SWTObservables.observeText(shell);
@@ -50,6 +55,7 @@
 	}
 
 	@Override
+	@After
 	public void tearDown() throws Exception {
 		observable.dispose();
 		observable = null;
@@ -58,10 +64,12 @@
 		super.tearDown();
 	}
 
+	@Test
 	public void testGetValueType() {
 		assertEquals(String.class, observable.getValueType());
 	}
 
+	@Test
 	public void testSetValue_FiresValueChangeEvent() {
 		observable.setValue(newValue);
 
@@ -70,6 +78,7 @@
 		assertEquals(newValue, tracker.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testSetValue_NullConvertedToEmptyString() {
 		observable.setValue(null);
 
@@ -77,6 +86,7 @@
 		assertEquals("", shell.getText());
 	}
 
+	@Test
 	public void testShellSetText_GetValueReturnsSame() {
 		assertEquals(oldValue, observable.getValue());
 
@@ -85,18 +95,14 @@
 		assertEquals(newValue, observable.getValue());
 	}
 
+	@Test
 	public void testShellSetText_NoValueChangeEvent() {
 		shell.setText(newValue);
 		assertEquals(0, tracker.count);
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ShellObservableValueTest.class
-				.toString());
-		suite.addTestSuite(ShellObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMaxTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMaxTest.java
index 2bb6de6..d0e5422 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMaxTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMaxTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int max = 100;
 		spinner.setMaximum(max);
 		assertEquals(Integer.valueOf(max), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int max = 100;
 		observable.setValue(Integer.valueOf(max));
 		assertEquals(max, spinner.getMaximum());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(SpinnerObservableValueMaxTest.class
-				.toString());
-		suite.addTestSuite(SpinnerObservableValueMaxTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMinTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMinTest.java
index 99a5098..4ff3c7c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMinTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueMinTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int min = 100;
 		spinner.setMinimum(min);
 		assertEquals(Integer.valueOf(min), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int min = 100;
 		observable.setValue(Integer.valueOf(min));
 		assertEquals(min, spinner.getMinimum());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(SpinnerObservableValueMinTest.class
-				.toString());
-		suite.addTestSuite(SpinnerObservableValueMinTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueSelectionTest.java
index 12ff31e..f02e033 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueSelectionTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,6 +24,10 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -47,7 +48,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -61,25 +63,22 @@
 				DisplayRealm.getRealm(Display.getDefault()));
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int value = 100;
 		spinner.setSelection(value);
 		assertEquals(Integer.valueOf(value), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		int value = 100;
 		observable.setValue(Integer.valueOf(value));
 		assertEquals(value, spinner.getSelection());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				SpinnerObservableValueSelectionTest.class.toString());
-		suite.addTestSuite(SpinnerObservableValueSelectionTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueTest.java
index 6fd8df1..5059341 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/SpinnerObservableValueTest.java
@@ -13,18 +13,22 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.databinding.swt.ISWTObservableValue;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Spinner;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
 public class SpinnerObservableValueTest extends AbstractSWTTestCase {
+	@Test
 	public void testDispose() throws Exception {
 		Spinner spinner = new Spinner(getShell(), SWT.NONE);
 		ISWTObservableValue observableValue = SWTObservables.observeSelection(spinner);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueDefaultSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueDefaultSelectionTest.java
index 7b5498f..26b0720 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueDefaultSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueDefaultSelectionTest.java
@@ -15,10 +15,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -29,16 +25,14 @@
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Shell;
 
+import junit.framework.TestSuite;
+
 /**
  * Tests for the DefaultSelection version of StyledTextObservableValue.
  */
-public class StyledTextObservableValueDefaultSelectionTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				StyledTextObservableValueDefaultSelectionTest.class.toString());
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+public class StyledTextObservableValueDefaultSelectionTest {
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueFocusOutTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueFocusOutTest.java
index 455e331..3636a00 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueFocusOutTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueFocusOutTest.java
@@ -13,8 +13,9 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -28,20 +29,19 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for the FocusOut version of StyledTextObservableValue.
  */
 public class StyledTextObservableValueFocusOutTest extends AbstractSWTTestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				StyledTextObservableValueFocusOutTest.class.toString());
-		suite.addTestSuite(StyledTextObservableValueFocusOutTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
+	@Test
 	public void testIsStale_AfterModifyBeforeFocusOut() {
 		StyledText text = new StyledText(getShell(), SWT.NONE);
 		text.setText("0");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueModifyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueModifyTest.java
index 016ff49..c96b709 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueModifyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueModifyTest.java
@@ -13,10 +13,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -27,16 +23,14 @@
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Shell;
 
+import junit.framework.TestSuite;
+
 /**
  * Tests for the Modify version of StyledTextObservableValue.
  */
-public class StyledTextObservableValueModifyTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				StyledTextObservableValueModifyTest.class.toString());
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+public class StyledTextObservableValueModifyTest {
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueTest.java
index 2b22a13..2574fd2 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/StyledTextObservableValueTest.java
@@ -13,6 +13,10 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.databinding.swt.SWTObservables;
@@ -21,6 +25,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests to assert the inputs of the StyledTextObservableValue constructor.
@@ -29,8 +35,8 @@
 	private StyledText text;
 	private ValueChangeEventTracker listener;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		Shell shell = new Shell();
@@ -43,6 +49,7 @@
 	 * Asserts that only valid SWT event types are accepted on construction of
 	 * StyledTextObservableValue.
 	 */
+	@Test
 	public void testConstructorUpdateEventTypes() {
 		try {
 			new StyledTextTextProperty(new int[] { SWT.None });
@@ -67,6 +74,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testGetValueBeforeFocusOutChangeEventsFire() throws Exception {
 		IObservableValue observableValue = SWTObservables.observeText(text,
 				SWT.FocusOut);
@@ -90,6 +98,7 @@
 		assertEquals(b, listener.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		IObservableValue observableValue = SWTObservables.observeText(text,
 				SWT.Modify);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableObservableValueTest.java
index a86e63c..4eb7293 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableObservableValueTest.java
@@ -13,17 +13,21 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.swt.SWTObservables;
 import org.eclipse.jface.tests.databinding.AbstractSWTTestCase;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
+import org.junit.Test;
 
 /**
  * @since 3.2
  */
 public class TableObservableValueTest extends AbstractSWTTestCase {
+	@Test
 	public void testDispose() throws Exception {
 		Table table = new Table(getShell(), SWT.NONE);
 		IObservableValue observableValue = SWTObservables
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableSingleSelectionObservableValueTest.java
index 2ca2601..b1c6e17 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableSingleSelectionObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TableSingleSelectionObservableValueTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -29,6 +26,10 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 3.2
@@ -48,7 +49,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		observable = (IObservableValue) getObservable();
@@ -63,6 +65,7 @@
 				.getDefault()));
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		// preconditions
 		assertEquals(-1, table.getSelectionIndex());
@@ -75,6 +78,7 @@
 		assertEquals("observable value", value, observable.getValue());
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		int value = 1;
 		table.setSelection(value);
@@ -84,13 +88,8 @@
 				.getValue());
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(
-				TableSingleSelectionObservableValueTest.class.toString());
-		suite.addTestSuite(TableSingleSelectionObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextEditableObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextEditableObservableValueTest.java
index ffa23d5..4fd73ad 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextEditableObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextEditableObservableValueTest.java
@@ -12,9 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -25,6 +22,10 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * @since 1.1
@@ -44,7 +45,8 @@
 	}
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		delegate = (Delegate) getObservableContractDelegate();
@@ -57,6 +59,7 @@
 		return super.doCreateObservable();
 	}
 
+	@Test
 	public void testGetValue() throws Exception {
 		text.setEditable(false);
 		assertEquals(Boolean.valueOf(text.getEditable()), observable.getValue());
@@ -65,6 +68,7 @@
 		assertEquals(Boolean.valueOf(text.getEditable()), observable.getValue());
 	}
 
+	@Test
 	public void testSetValue() throws Exception {
 		text.setEditable(false);
 		observable.setValue(Boolean.TRUE);
@@ -74,13 +78,8 @@
 		assertEquals(Boolean.FALSE, Boolean.valueOf(text.getEditable()));
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(TextEditableObservableValueTest.class
-				.toString());
-		suite.addTestSuite(TextEditableObservableValueTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueDefaultSelectionTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueDefaultSelectionTest.java
index 9510970..cc5f264 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueDefaultSelectionTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueDefaultSelectionTest.java
@@ -14,10 +14,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -28,16 +24,14 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
+import junit.framework.TestSuite;
+
 /**
  * Tests for the DefaultSelection version of TextObservableValue.
  */
-public class TextObservableValueDefaultSelectionTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(TextObservableValueDefaultSelectionTest.class
-				.toString());
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+public class TextObservableValueDefaultSelectionTest {
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueFocusOutTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueFocusOutTest.java
index 558667b..e4348dd 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueFocusOutTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueFocusOutTest.java
@@ -12,8 +12,9 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
@@ -27,20 +28,19 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Test;
+
+import junit.framework.TestSuite;
 
 /**
  * Tests for the FocusOut version of TextObservableValue.
  */
 public class TextObservableValueFocusOutTest extends AbstractSWTTestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(TextObservableValueFocusOutTest.class
-				.toString());
-		suite.addTestSuite(TextObservableValueFocusOutTest.class);
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
+	@Test
 	public void testIsStale_AfterModifyBeforeFocusOut() {
 		Text text = new Text(getShell(), SWT.NONE);
 		text.setText("0");
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueModifyTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueModifyTest.java
index 5e35c34..27f8f0c 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueModifyTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueModifyTest.java
@@ -12,10 +12,6 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -26,16 +22,14 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
+import junit.framework.TestSuite;
+
 /**
  * @since 3.2
  */
-public class TextObservableValueModifyTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(TextObservableValueModifyTest.class
-				.toString());
-		suite.addTest(SWTMutableObservableValueContractTest
-				.suite(new Delegate()));
-		return suite;
+public class TextObservableValueModifyTest {
+	public static void addConformanceTest(TestSuite suite) {
+		suite.addTest(SWTMutableObservableValueContractTest.suite(new Delegate()));
 	}
 
 	/* package */static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueTest.java
index ebd0bc4..4b9990a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/swt/TextObservableValueTest.java
@@ -14,6 +14,10 @@
 
 package org.eclipse.jface.tests.internal.databinding.swt;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
@@ -22,6 +26,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests to assert the inputs of the TextObservableValue constructor.
@@ -32,8 +38,8 @@
 	private Text text;
 	private ValueChangeEventTracker listener;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		Shell shell = new Shell();
@@ -46,6 +52,7 @@
 	 * Asserts that only valid SWT event types are accepted on construction of
 	 * TextObservableValue.
 	 */
+	@Test
 	public void testConstructorUpdateEventTypes() {
 		try {
 			WidgetProperties.text(SWT.None);
@@ -70,6 +77,7 @@
 	 *
 	 * @throws Exception
 	 */
+	@Test
 	public void testGetValueBeforeFocusOutChangeEventsFire() throws Exception {
 		IObservableValue observableValue = WidgetProperties.text(SWT.FocusOut)
 				.observe(Realm.getDefault(), text);
@@ -97,6 +105,7 @@
 		assertEquals(b, listener.event.diff.getNewValue());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		IObservableValue observableValue = WidgetProperties.text(SWT.Modify)
 				.observe(Realm.getDefault(), text);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/CheckableCheckedElementsObservableSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/CheckableCheckedElementsObservableSetTest.java
index 813247b..d6614bf 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/CheckableCheckedElementsObservableSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/CheckableCheckedElementsObservableSetTest.java
@@ -11,14 +11,18 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.core.databinding.observable.set.IObservableSet;
 import org.eclipse.jface.databinding.viewers.ViewersObservables;
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.ICheckable;
+import org.junit.Test;
 
 public class CheckableCheckedElementsObservableSetTest extends
 		AbstractDefaultRealmTestCase {
+	@Test
 	public void testClear() {
 		// init
 		ICheckable checkable = new ICheckable() {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionContentProviderTest.java
index 5d0b79c..fb81ecb 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionContentProviderTest.java
@@ -11,6 +11,9 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collections;
 
 import org.eclipse.core.databinding.observable.list.IObservableList;
@@ -22,6 +25,9 @@
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -33,21 +39,22 @@
 	private TableViewer viewer;
 	ObservableListContentProvider contentProvider;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		viewer = new TableViewer(shell);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		shell = null;
 		viewer = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testGetKnownElements_DisposedWithoutModificationOnContentProviderDispose() {
 		final IObservableList input = new WritableList(Collections
 				.singletonList("element"), null);
@@ -73,6 +80,7 @@
 		assertTrue(knownElements.isDisposed());
 	}
 
+	@Test
 	public void testKnownElementsAreFilledOnSettingAFilledCollectionAsInput() {
 		final IObservableList input = new WritableList(Collections.singletonList("element"), null);
 		contentProvider = new ObservableListContentProvider();
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionTreeContentProviderTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionTreeContentProviderTest.java
index ed713ba..ae62314 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionTreeContentProviderTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableCollectionTreeContentProviderTest.java
@@ -12,6 +12,10 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -27,6 +31,9 @@
 import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -37,21 +44,22 @@
 	private TreeViewer viewer;
 	ObservableListTreeContentProvider contentProvider;
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		shell = new Shell();
 		viewer = new TreeViewer(shell);
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		shell.dispose();
 		shell = null;
 		viewer = null;
 		super.tearDown();
 	}
 
+	@Test
 	public void testGetKnownElements_ExcludesInput() {
 		final Object input = new Object();
 		Object[] rootElements = new Object[] { "one", "two", "three" };
@@ -72,6 +80,7 @@
 		assertEquals(new HashSet<Object>(Arrays.asList(rootElements)), knownElements);
 	}
 
+	@Test
 	public void testGetKnownElements_DisposedWithoutModificationOnContentProviderDispose() {
 		final Object input = new Object();
 		final IObservableList rootElementList = new WritableList(Collections.singletonList("element"), null);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableViewerElementSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableViewerElementSetTest.java
index 4822c64..84e1f17 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableViewerElementSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ObservableViewerElementSetTest.java
@@ -21,15 +21,11 @@
 import org.eclipse.jface.internal.databinding.viewers.ObservableViewerElementSet;
 import org.eclipse.jface.viewers.IElementComparer;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-public class ObservableViewerElementSetTest extends TestCase {
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ObservableViewerElementSetTest.class.getName());
+public class ObservableViewerElementSetTest {
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableSetContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	private static class Delegate extends
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java
index 117d395..0ff2e35 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java
@@ -13,6 +13,9 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -28,15 +31,16 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
-
-import junit.framework.TestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests for SelectionProviderMultiSelectionObservableList.
  *
  * @since 1.2
  */
-public class SelectionProviderMultiSelectionObservableListTest extends TestCase {
+public class SelectionProviderMultiSelectionObservableListTest {
 	private IPostSelectionProvider selectionProvider;
 
 	private TableViewer viewer;
@@ -44,8 +48,8 @@
 	private static String[] model = new String[] { "element0", "element1",
 			"element2", "element3" };
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		Shell shell = new Shell();
 		viewer = new TableViewer(shell, SWT.MULTI);
 		viewer.setContentProvider(new ArrayContentProvider());
@@ -53,13 +57,14 @@
 		selectionProvider = viewer;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		Shell shell = viewer.getTable().getShell();
 		if (!shell.isDisposed())
 			shell.dispose();
 	}
 
+	@Test
 	public void testConstructorIllegalArgumentException() {
 		try {
 			ViewersObservables.observeMultiSelection(null);
@@ -68,10 +73,12 @@
 		}
 	}
 
+	@Test
 	public void testAddRemove_NormalSelection() {
 		doTestAddRemove(false);
 	}
 
+	@Test
 	public void testAddRemove_PostSelection() {
 		doTestAddRemove(true);
 	}
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java
index ec6f6c9..9b69afc 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java
@@ -14,8 +14,6 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.databinding.observable.value.IObservableValue;
 import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
 import org.eclipse.jface.databinding.viewers.ViewersObservables;
@@ -27,6 +25,11 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.TestCase;
 
 /**
  * Tests for SelectionProviderSingleSelectionObservableValue.
@@ -41,8 +44,8 @@
 
 	private static String[] model = new String[] { "0", "1" };
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		Shell shell = new Shell();
 		viewer = new TableViewer(shell, SWT.NONE);
 		viewer.setContentProvider(new ArrayContentProvider());
@@ -50,13 +53,14 @@
 		selectionProvider = viewer;
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		Shell shell = viewer.getTable().getShell();
 		if (!shell.isDisposed())
 			shell.dispose();
 	}
 
+	@Test
 	public void testConstructorIllegalArgumentException() {
 		try {
 			ViewersObservables.observeSingleSelection(null);
@@ -65,6 +69,7 @@
 		}
 	}
 
+	@Test
 	public void testSetValue() {
 		IObservableValue observable = ViewersObservables
 				.observeSingleSelection(selectionProvider);
@@ -89,10 +94,12 @@
 		assertEquals(3, listener.count);
 	}
 
+	@Test
 	public void testSelectionChangesTracked() {
 		doTestSelectionChangesTracked(false);
 	}
 
+	@Test
 	public void testPostSelectionChangesTracked() {
 		doTestSelectionChangesTracked(true);
 	}
@@ -144,6 +151,7 @@
 		assertEquals(null, observable.getValue());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		IObservableValue observable = ViewersObservables
 				.observeSingleSelection(selectionProvider);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementMapTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementMapTest.java
index 3dfaa7c..549c011a 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementMapTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementMapTest.java
@@ -12,6 +12,13 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -19,30 +26,30 @@
 import java.util.Map;
 import java.util.Set;
 
-import junit.framework.TestCase;
-
 import org.eclipse.jface.internal.databinding.viewers.ViewerElementMap;
 import org.eclipse.jface.viewers.IElementComparer;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.2
  */
-public class ViewerElementMapTest extends TestCase {
+public class ViewerElementMapTest {
 	IdentityElementComparer comparer;
 	ViewerElementMap map;
 
 	Object key;
 	Object value;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		comparer = new IdentityElementComparer();
 		map = new ViewerElementMap(comparer);
 		key = new Object();
 		value = new Object();
 	}
 
+	@Test
 	public void testConstructor_NullComparer() {
 		try {
 			new ViewerElementMap(null);
@@ -51,6 +58,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_NullCollection() {
 		try {
 			new ViewerElementMap(null, new IdentityElementComparer());
@@ -59,6 +67,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_ContainsAllEntries() {
 		Map<Object, Object> toCopy = new HashMap<Object, Object>();
 		toCopy.put(new Object(), new Object());
@@ -66,18 +75,21 @@
 		assertEquals(toCopy, map);
 	}
 
+	@Test
 	public void testIsEmpty() {
 		assertTrue(map.isEmpty());
 		map.put(key, value);
 		assertFalse(map.isEmpty());
 	}
 
+	@Test
 	public void testSize() {
 		assertEquals(0, map.size());
 		map.put(key, value);
 		assertEquals(1, map.size());
 	}
 
+	@Test
 	public void testClear() {
 		map.put(key, value);
 		assertFalse(map.isEmpty());
@@ -85,12 +97,14 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testGet() {
 		assertNull(map.get(key));
 		map.put(key, value);
 		assertEquals(value, map.get(key));
 	}
 
+	@Test
 	public void testContainsKey() {
 		String key1 = new String("key");
 		String key2 = new String("key"); // equal but distinct instances
@@ -100,12 +114,14 @@
 		assertFalse(map.containsKey(key2));
 	}
 
+	@Test
 	public void testContainsValue() {
 		assertFalse(map.containsValue(value));
 		map.put(key, value);
 		assertTrue(map.containsValue(value));
 	}
 
+	@Test
 	public void testPutAll() {
 		Map<Object, Object> other = new HashMap<Object, Object>();
 		other.put(key, value);
@@ -117,6 +133,7 @@
 		assertEquals(value, map.get(key));
 	}
 
+	@Test
 	public void testRemove() {
 		map.put(key, value);
 		assertTrue(map.containsKey(key));
@@ -124,6 +141,7 @@
 		assertFalse(map.containsKey(key));
 	}
 
+	@Test
 	public void testValues() {
 		Collection values = map.values();
 		assertTrue(values.isEmpty());
@@ -137,6 +155,7 @@
 		assertTrue(map.values().isEmpty());
 	}
 
+	@Test
 	public void testKeySet() {
 		Set keySet = map.keySet();
 		assertTrue(keySet.isEmpty());
@@ -149,6 +168,7 @@
 		assertTrue(keySet.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Add() {
 		try {
 			map.keySet().add(key);
@@ -157,6 +177,7 @@
 		}
 	}
 
+	@Test
 	public void testKeySet_AddAll() {
 		try {
 			map.keySet().addAll(Collections.singleton(key));
@@ -165,6 +186,7 @@
 		}
 	}
 
+	@Test
 	public void testKeySet_Clear() {
 		map.put(key, value);
 		Set keySet = map.keySet();
@@ -174,6 +196,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Contains() {
 		Set keySet = map.keySet();
 		assertFalse(keySet.contains(key));
@@ -181,6 +204,7 @@
 		assertTrue(keySet.contains(key));
 	}
 
+	@Test
 	public void testKeySet_ContainsAll() {
 		Set keySet = map.keySet();
 		assertFalse(keySet.containsAll(Collections.singleton(key)));
@@ -188,6 +212,7 @@
 		assertTrue(keySet.containsAll(Collections.singleton(key)));
 	}
 
+	@Test
 	public void testKeySet_IsEmpty() {
 		Set keySet = map.keySet();
 		assertTrue(keySet.isEmpty());
@@ -195,6 +220,7 @@
 		assertFalse(keySet.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Iterator() {
 		map.put(key, value);
 		Iterator iterator = map.keySet().iterator();
@@ -208,6 +234,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testKeySet_Remove() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -215,6 +242,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_RemoveAll() {
 		map.put(key, value);
 		Set keySet = map.keySet();
@@ -224,6 +252,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_RetainAll() {
 		map.put(key, value);
 		Set keySet = map.keySet();
@@ -233,6 +262,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testKeySet_Size() {
 		Set keySet = map.keySet();
 		assertEquals(0, keySet.size());
@@ -242,6 +272,7 @@
 		assertEquals(0, keySet.size());
 	}
 
+	@Test
 	public void testKeySet_ToArray() {
 		Set keySet = map.keySet();
 		map.put(key, value);
@@ -250,6 +281,7 @@
 		assertSame(key, array[0]);
 	}
 
+	@Test
 	public void testKeySet_ToArrayWithObjectArray() {
 		key = new String("key");
 		map.put(key, value);
@@ -258,6 +290,7 @@
 		assertSame(key, array[0]);
 	}
 
+	@Test
 	public void testKeySet_Equals() {
 		Set keySet = map.keySet();
 		assertFalse(keySet.equals(null));
@@ -268,6 +301,7 @@
 		assertTrue(keySet.equals(Collections.singleton(key)));
 	}
 
+	@Test
 	public void testKeySet_HashCode() {
 		Set keySet = map.keySet();
 		assertEquals(0, keySet.hashCode());
@@ -276,6 +310,7 @@
 		assertEquals(hash, keySet.hashCode());
 	}
 
+	@Test
 	public void testEntrySet() {
 		Set entrySet = map.entrySet();
 		assertTrue(entrySet.isEmpty());
@@ -290,6 +325,7 @@
 		assertTrue(entrySet.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Add() {
 		try {
 			map.entrySet().add(key);
@@ -298,6 +334,7 @@
 		}
 	}
 
+	@Test
 	public void testEntrySet_AddAll() {
 		try {
 			map.entrySet().addAll(Collections.EMPTY_SET);
@@ -306,6 +343,7 @@
 		}
 	}
 
+	@Test
 	public void testEntrySet_Clear() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -313,6 +351,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Contains() {
 		map.put(key, value);
 		Set entrySet = map.entrySet();
@@ -321,6 +360,7 @@
 		assertFalse(entrySet.contains(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_ContainsAll() {
 		Set entrySet = map.entrySet();
 		assertFalse(entrySet.containsAll(Collections.singleton(new MapEntryStub(key, value))));
@@ -330,6 +370,7 @@
 		assertTrue(entrySet.containsAll(Collections.singleton(new MapEntryStub(key, value))));
 	}
 
+	@Test
 	public void testEntrySet_IsEmpty() {
 		Set entrySet = map.entrySet();
 		assertTrue(entrySet.isEmpty());
@@ -337,6 +378,7 @@
 		assertFalse(entrySet.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Iterator() {
 		map.put(key, value);
 		Iterator iterator = map.entrySet().iterator();
@@ -350,6 +392,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testEntrySet_Remove() {
 		map.put(key, value);
 		assertEquals(1, map.size());
@@ -358,6 +401,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_RemoveAll() {
 		Set entrySet = map.entrySet();
 		assertFalse(entrySet.removeAll(Collections.EMPTY_SET));
@@ -368,6 +412,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_RetainAll() {
 		Set entrySet = map.entrySet();
 		assertFalse(entrySet.retainAll(Collections.EMPTY_SET));
@@ -380,6 +425,7 @@
 		assertTrue(map.isEmpty());
 	}
 
+	@Test
 	public void testEntrySet_Size() {
 		Set entrySet = map.entrySet();
 		assertEquals(0, entrySet.size());
@@ -387,6 +433,7 @@
 		assertEquals(1, entrySet.size());
 	}
 
+	@Test
 	public void testEntrySet_ToArray() {
 		Set entrySet = map.entrySet();
 		assertEquals(0, entrySet.toArray().length);
@@ -397,6 +444,7 @@
 		assertTrue(array[0].equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_ToArrayWithObjectArray() {
 		Set entrySet = map.entrySet();
 		assertEquals(0, entrySet.toArray(new Object[0]).length);
@@ -407,6 +455,7 @@
 		assertTrue(array[0].equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_Equals() {
 		Set entrySet = map.entrySet();
 		assertFalse(entrySet.equals(null));
@@ -420,6 +469,7 @@
 		assertTrue(entrySet.equals(Collections.singleton(new MapEntryStub(key, value))));
 	}
 
+	@Test
 	public void testEntrySet_HashCode() {
 		// hash formula mandated by Map contract
 		Set entrySet = map.entrySet();
@@ -430,6 +480,7 @@
 		assertEquals(hash, entrySet.hashCode());
 	}
 
+	@Test
 	public void testEntrySet_Entry_SetValue() {
 		map.put(key, value);
 
@@ -442,6 +493,7 @@
 		assertEquals(newValue, map.get(key));
 	}
 
+	@Test
 	public void testEntrySet_Entry_Equals() {
 		map.put(key, value);
 
@@ -451,6 +503,7 @@
 		assertTrue(entry.equals(new MapEntryStub(key, value)));
 	}
 
+	@Test
 	public void testEntrySet_Entry_HashCode() {
 		map.put(key, value);
 
@@ -459,6 +512,7 @@
 		assertEquals(hash, map.entrySet().iterator().next().hashCode());
 	}
 
+	@Test
 	public void testEquals() {
 		assertFalse(map.equals(null));
 		assertTrue(map.equals(map));
@@ -475,6 +529,7 @@
 		assertTrue(map.equals(other));
 	}
 
+	@Test
 	public void testHashCode() {
 		assertEquals(0, map.hashCode());
 
@@ -483,6 +538,7 @@
 		assertEquals(hash, map.hashCode());
 	}
 
+	@Test
 	public void testWithComparer() {
 		assertFalse(ViewerElementMap.withComparer(null) instanceof ViewerElementMap);
 		assertTrue(ViewerElementMap.withComparer(comparer) instanceof ViewerElementMap);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementSetTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementSetTest.java
index 32f4f47..d7b0818 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementSetTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementSetTest.java
@@ -11,30 +11,37 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 
-import junit.framework.TestCase;
-
 import org.eclipse.jface.internal.databinding.viewers.ViewerElementSet;
 import org.eclipse.jface.viewers.IElementComparer;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 1.2
  */
-public class ViewerElementSetTest extends TestCase {
+public class ViewerElementSetTest {
 	IdentityElementComparer comparer;
 	ViewerElementSet set;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		comparer = new IdentityElementComparer();
 		set = new ViewerElementSet(comparer);
 	}
 
+	@Test
 	public void testConstructor_NullComparer() {
 		try {
 			new ViewerElementSet(null);
@@ -43,6 +50,7 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_NullCollection() {
 		try {
 			new ViewerElementSet(null, new IdentityElementComparer());
@@ -51,12 +59,14 @@
 		}
 	}
 
+	@Test
 	public void testConstructorWithCollection_AddsAllElements() {
 		Collection<Object> toCopy = Collections.singleton(new Object());
 		set = new ViewerElementSet(toCopy, new IdentityElementComparer());
 		assertTrue(set.containsAll(toCopy));
 	}
 
+	@Test
 	public void testAdd_ContainsHonorsComparer() {
 		Object o1 = new String("string");
 		Object o2 = new String("string"); // distinct instances
@@ -69,6 +79,7 @@
 		assertFalse(set.contains(o2));
 	}
 
+	@Test
 	public void testAdd_FilterDuplicateElements() {
 		Object o = new Object();
 
@@ -79,6 +90,7 @@
 		assertTrue(set.contains(o));
 	}
 
+	@Test
 	public void testAddAll_ContainsAllHonorsComparer() {
 		String o1 = new String("o1");
 		String o2 = new String("o2");
@@ -90,6 +102,7 @@
 		assertFalse(set.containsAll(Collections.singleton(new String("o2"))));
 	}
 
+	@Test
 	public void testAddAll_FiltersDuplicateElements() {
 		Object o = new Object();
 		set.add(o);
@@ -97,6 +110,7 @@
 		assertFalse(set.addAll(Collections.singleton(o)));
 	}
 
+	@Test
 	public void testClear() {
 		set.add(new Object());
 		assertEquals(1, set.size());
@@ -105,12 +119,14 @@
 		assertEquals(0, set.size());
 	}
 
+	@Test
 	public void testIsEmpty() {
 		assertTrue(set.isEmpty());
 		set.add(new Object());
 		assertFalse(set.isEmpty());
 	}
 
+	@Test
 	public void testIterator() {
 		Object o = new Object();
 		set.add(o);
@@ -126,6 +142,7 @@
 		assertFalse(iterator.hasNext());
 	}
 
+	@Test
 	public void testRemove() {
 		Object o = new Object();
 		assertFalse(set.remove(o));
@@ -137,6 +154,7 @@
 		assertFalse(set.contains(o));
 	}
 
+	@Test
 	public void testRemoveAll() {
 		assertFalse(set.removeAll(Collections.EMPTY_SET));
 
@@ -152,6 +170,7 @@
 		assertFalse(set.contains(o2));
 	}
 
+	@Test
 	public void testRetainAll() {
 		Object o1 = new Object();
 		Object o2 = new Object();
@@ -170,6 +189,7 @@
 		assertFalse(set.contains(o1));
 	}
 
+	@Test
 	public void testSize() {
 		assertEquals(0, set.size());
 
@@ -181,6 +201,7 @@
 		assertEquals(0, set.size());
 	}
 
+	@Test
 	public void testToArray() {
 		assertEquals(0, set.toArray().length);
 
@@ -189,6 +210,7 @@
 		assertTrue(Arrays.equals(new Object[] { o }, set.toArray()));
 	}
 
+	@Test
 	public void testToArrayWithObjectArray() {
 		Object o = new String("unique");
 		set.add(o);
@@ -198,6 +220,7 @@
 		assertSame(o, array[0]);
 	}
 
+	@Test
 	public void testEquals() {
 		assertTrue(set.equals(set));
 		assertFalse(set.equals(null));
@@ -212,6 +235,7 @@
 		assertFalse(set.equals(Collections.singleton(distinct)));
 	}
 
+	@Test
 	public void testHashCode() {
 		// Hash code implementation is mandated
 		assertEquals(0, set.hashCode());
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementWrapperTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementWrapperTest.java
index 5931d55..f48c65f 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementWrapperTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerElementWrapperTest.java
@@ -11,28 +11,33 @@
 
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.eclipse.jface.internal.databinding.viewers.ViewerElementWrapper;
 import org.eclipse.jface.viewers.IElementComparer;
-
-import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
  *
  */
-public class ViewerElementWrapperTest extends TestCase {
+public class ViewerElementWrapperTest {
 	private ViewerElementWrapper wrapper;
 	private Object element;
 	private IElementComparer comparer;
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
+	@Before
+	public void setUp() throws Exception {
 		element = new ElementStub(0);
 		comparer = new IdentityElementComparer();
 		wrapper = new ViewerElementWrapper(element, comparer);
 	}
 
+	@Test
 	public void testConstructor_NullComparer() {
 		try {
 			new ViewerElementWrapper(element, null);
@@ -41,12 +46,14 @@
 		}
 	}
 
+	@Test
 	public void testEquals() {
 		assertFalse(wrapper.equals(null));
 		assertTrue(wrapper.equals(wrapper));
 		assertTrue(wrapper.equals(new ViewerElementWrapper(element, comparer)));
 	}
 
+	@Test
 	public void testHashCode() {
 		int hash = 0;
 		element = new ElementStub(hash);
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java
index 6f112ea..f89cc23 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java
@@ -11,6 +11,11 @@
  *******************************************************************************/
 package org.eclipse.jface.tests.internal.databinding.viewers;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.fail;
+
 import org.eclipse.core.databinding.observable.IObservable;
 import org.eclipse.core.databinding.observable.Realm;
 import org.eclipse.core.databinding.observable.value.IObservableValue;
@@ -25,8 +30,10 @@
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-import junit.framework.Test;
 import junit.framework.TestSuite;
 
 /**
@@ -39,7 +46,8 @@
 	private static String[] model = new String[] { "0", "1" };
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		Shell shell = new Shell();
 		viewer = new TableViewer(shell, SWT.NONE);
@@ -47,13 +55,15 @@
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		Shell shell = viewer.getTable().getShell();
 		if (!shell.isDisposed())
 			shell.dispose();
 		super.tearDown();
 	}
 
+	@Test
 	public void testConstructor_IllegalArgumentException() {
 		try {
 			ViewersObservables.observeInput(null);
@@ -62,6 +72,7 @@
 		}
 	}
 
+	@Test
 	public void testSetInputOnViewer_FiresChangeEventOnGetValue() {
 		IObservableValue observable = ViewersObservables.observeInput(viewer);
 		ValueChangeEventTracker listener = ValueChangeEventTracker
@@ -86,6 +97,7 @@
 		assertEquals(2, listener.count);
 	}
 
+	@Test
 	public void testGetSetValue_FiresChangeEvents() {
 		IObservableValue observable = ViewersObservables.observeInput(viewer);
 		ValueChangeEventTracker listener = new ValueChangeEventTracker();
@@ -107,11 +119,13 @@
 		assertValueChangeEventEquals(observable, model, null, listener.event);
 	}
 
+	@Test
 	public void testGetValueType_AlwaysNull() throws Exception {
 		IObservableValue observable = ViewersObservables.observeInput(viewer);
 		assertEquals(null, observable.getValueType());
 	}
 
+	@Test
 	public void testDispose() throws Exception {
 		IObservableValue observable = ViewersObservables.observeInput(viewer);
 		observable.dispose();
@@ -137,12 +151,8 @@
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite = new TestSuite(ViewerInputObservableValueTest.class
-				.getName());
-		suite.addTestSuite(ViewerInputObservableValueTest.class);
+	public static void addConformanceTest(TestSuite suite) {
 		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
-		return suite;
 	}
 
 	static class Delegate extends AbstractObservableValueContractDelegate {
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerUpdaterTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerUpdaterTest.java
index d36d38f..d98d909 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerUpdaterTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerUpdaterTest.java
@@ -23,6 +23,8 @@
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * @since 3.2
@@ -33,12 +35,14 @@
 	String[] elements = new String[] { "one", "two", "three" };
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 
 		elementsList = new WritableList<>(Arrays.asList(elements), String.class);
 	}
 
+	@Test
 	public void testTableViewer_ReplacingSelectedItemSelectsNewItem() {
 		TableViewer tableViewer = new TableViewer(getShell());
 		// only with sorter the TableViewerUpdater.replace method delegates to
@@ -54,6 +58,7 @@
 		Assert.assertTrue(selection.toList().contains("foo"));
 	}
 
+	@Test
 	public void testTreeViewer_ReplacingSelectedItemSelectsNewItem() {
 		TreeViewer treeViewer = new TreeViewer(getShell());
 		Object input = new Object();
