diff --git a/tests/org.eclipse.wst.xsl.exslt.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.xsl.exslt.ui.tests/META-INF/MANIFEST.MF
index 5ccdd67..78281ba 100644
--- a/tests/org.eclipse.wst.xsl.exslt.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.xsl.exslt.ui.tests/META-INF/MANIFEST.MF
@@ -9,12 +9,12 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.wst.xsl.ui.tests;bundle-version="[1.0.0,2.0.0)",
- org.junit;bundle-version="3.8.0",
  org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.wst.sse.core;bundle-version="[1.1.0,2.0.0)",
  org.eclipse.wst.xsl.exslt.ui;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.1.0,2.0.0)"
+ org.eclipse.wst.sse.ui;bundle-version="[1.1.0,2.0.0)",
+ org.junit;bundle-version="4.8.1"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.wst.xsl.exslt.ui.internal.contentassist.test;x-internal:=true,
diff --git a/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/internal/contentassist/test/EXSLTCommonContentAssistTest.java b/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/internal/contentassist/test/EXSLTCommonContentAssistTest.java
index dd9074c..0c513ed 100644
--- a/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/internal/contentassist/test/EXSLTCommonContentAssistTest.java
+++ b/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/internal/contentassist/test/EXSLTCommonContentAssistTest.java
@@ -11,17 +11,23 @@
 package org.eclipse.wst.xsl.exslt.ui.internal.contentassist.test;
 
 import java.io.File;
+import static org.junit.Assert.*;
+
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.xsl.exslt.ui.internal.contentassist.EXSLTCommonContentAssistProcessor;
 import org.eclipse.wst.xsl.exslt.ui.tests.EXSLTUITestsPlugin;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 public class EXSLTCommonContentAssistTest extends AbstractSourceViewerTest {
 
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		if (!fTestProjectInitialized) {
 			setupTestProjectFiles(EXSLTUITestsPlugin.PLUGIN_ID);
 
@@ -29,7 +35,14 @@
 			fTestProjectInitialized = true;
 		}
 	}
+	
+	@After
+	@Override
+	public void tearDown() {
+		
+	}
 
+	@Test
 	public void testDocumentElementPropsoalAvailable() throws Exception {
 		fileName = "commonElements.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -50,6 +63,7 @@
 		fail("Did not find EXSLT Commond document element in proposal list.");
 	}
 
+	@Test
 	public void testNodeSetFunctionExists() throws Exception {
 		fileName = "commonXpathFunctions.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -71,6 +85,7 @@
 
 	}
 
+	@Test
 	public void testNodeSetFunctionExistsSelect() throws Exception {
 		fileName = "commonXpathFunctions.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -92,6 +107,7 @@
 
 	}
 
+	@Test
 	public void testObjectTypeFunctionExistsSelect() throws Exception {
 		fileName = "commonXpathFunctions.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/tests/EXSLTUITestSuite.java b/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/tests/EXSLTUITestSuite.java
index cf53b3c..b7070cc 100644
--- a/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/tests/EXSLTUITestSuite.java
+++ b/tests/org.eclipse.wst.xsl.exslt.ui.tests/src/org/eclipse/wst/xsl/exslt/ui/tests/EXSLTUITestSuite.java
@@ -11,17 +11,12 @@
 package org.eclipse.wst.xsl.exslt.ui.tests;
 
 import org.eclipse.wst.xsl.exslt.ui.internal.contentassist.test.EXSLTCommonContentAssistTest;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 
-public class EXSLTUITestSuite extends TestSuite {
-	public static Test suite() {
-		return new EXSLTUITestSuite();
-	}
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {EXSLTCommonContentAssistTest.class })
+public class EXSLTUITestSuite{
 
-	public EXSLTUITestSuite() {
-		super("EXSLT UI Test Suite");
-		addTestSuite(EXSLTCommonContentAssistTest.class);
-	}
 }
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.xsl.ui.tests/META-INF/MANIFEST.MF
index ba05607..6715da3 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.xsl.ui.tests/META-INF/MANIFEST.MF
@@ -17,7 +17,7 @@
  org.eclipse.wst.sse.ui;bundle-version="[1.1.0,2.0.0)",
  org.eclipse.wst.xml.ui;bundle-version="[1.0.400,2.0.0)",
  org.eclipse.wst.xsl.core;bundle-version="[1.0.0,2.0.0)",
- org.junit;bundle-version="3.8.2"
+ org.junit;bundle-version="4.8.1"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.eclipse.wst.xsl.ui.internal.validation;x-internal:=true,
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/internal/validation/TestDelegatingSourceValidatorForXSL.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/internal/validation/TestDelegatingSourceValidatorForXSL.java
index 1a0004f..321766c 100755
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/internal/validation/TestDelegatingSourceValidatorForXSL.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/internal/validation/TestDelegatingSourceValidatorForXSL.java
@@ -37,6 +37,9 @@
 import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.eclipse.wst.xsl.ui.tests.AbstractXSLUITest;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 /**
  * Test the XML delegating source validator.
@@ -49,20 +52,11 @@
 
 	}
 
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-	}
-
 	private String getxslTestFilesProjectName() {
 		return "xsltestfiles";
 	}
 
+	@Test
 	public void testXSLT2XPathPasses() throws Exception {
 		String fileName1 = "ChangeRequestsByResponsibility.xsl";
 		WorkbenchContext context = setupFile(getxslTestFilesProjectName(), fileName1);
@@ -74,6 +68,7 @@
 				reporter.isMessageReported());
 	}
 	
+	@Test
 	public void testXSLT2_2Passes() throws Exception {
 		String fileName1 = "ChangeRequestsByStatus.xsl";
 		WorkbenchContext context = setupFile(getxslTestFilesProjectName(), fileName1);
@@ -86,6 +81,7 @@
 	}
 	
 
+	@Test
 	public void testValidXSLT() throws Exception {
 		String fileName1 = "ListAllChangeRequests.xsl"; 
 		WorkbenchContext context = setupFile(getxslTestFilesProjectName(), fileName1);
@@ -96,6 +92,7 @@
 				.isMessageReported());
 	}
 	
+	@Test
 	public void testXSLFunctionsWithParms() throws Exception {
 		String fileName = "bug290286.xsl";
 		WorkbenchContext context = setupFile(getxslTestFilesProjectName(), fileName);
@@ -154,6 +151,7 @@
 
 	}
 
+	@Test
 	public void testDelegatingSourceValidatorNPEwithNoAttributeValue() throws Exception {
 		WorkbenchContext context = setupFile(getxslTestFilesProjectName(), "bug272760.xsl");
 		TestReporter reporter = new TestReporter();
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractSourceViewerTest.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractSourceViewerTest.java
index 81a01c1..2867aff 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractSourceViewerTest.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractSourceViewerTest.java
@@ -42,6 +42,7 @@
 import org.eclipse.wst.xml.ui.internal.contentassist.XMLContentAssistProcessor;
 import org.eclipse.wst.xsl.ui.internal.StructuredTextViewerConfigurationXSL;
 import org.eclipse.wst.xsl.ui.internal.contentassist.XSLContentAssistProcessor;
+import org.junit.After;
 
 /**
  * This class is an abstract class for Content Completion Tests. It provides all
@@ -171,16 +172,9 @@
 		return offset;
 	}	
 
-	/**
-	 * Setup the necessary projects, files, and source viewer for the tests.
-	 */
-	@Override
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	@Override
-	protected void tearDown() throws Exception {
+	
+	@After
+	public void tearDown() throws Exception {
 		super.tearDown();
 		parent.dispose();
 		if (model != null) {
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractXSLUITest.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractXSLUITest.java
index a4eb73f..914c6fe 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractXSLUITest.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/AbstractXSLUITest.java
@@ -11,6 +11,7 @@
 
 package org.eclipse.wst.xsl.ui.tests;
 
+import static org.junit.Assert.*;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URISyntaxException;
@@ -33,19 +34,21 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
+import org.junit.After;
+import org.junit.Before;
 import org.osgi.framework.Bundle;
 
 /* 
  * Made abstract, so won't be automatically picked up as test (since intended to be subclassed).
  */
-public abstract class AbstractXSLUITest extends TestCase {
+public abstract class AbstractXSLUITest {
 	protected static IProject fTestProject;
 	protected static boolean fTestProjectInitialized;
 	protected static final String PROJECT_FILES = "projectfiles";
 	protected static final String TEST_PROJECT_NAME = "xsltestfiles";
 
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		getWorkspace().getRoot().delete(true, true, new NullProgressMonitor());
 		setupTestProjectFiles(XSLUITestsPlugin.PLUGIN_ID);
 		fTestProject.refreshLocal(IResource.DEPTH_INFINITE, null);
@@ -120,7 +123,8 @@
 		}
 	}
 
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		String projName = TEST_PROJECT_NAME;
 
 		IProject project = ResourcesPlugin.getWorkspace().getRoot()
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/XSLUITestSuite.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/XSLUITestSuite.java
index d591bb8..df4762d 100755
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/XSLUITestSuite.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/XSLUITestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 Standards for Technology in Automotive Retail and others.
+ * Copyright (c) 2007, 2010 Standards for Technology in Automotive Retail 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
@@ -7,12 +7,12 @@
  *
  * Contributors:
  *     David Carver - (STAR) - initial API and implementation
+ *     David Carver - (Intalio) - convert to junit 4
  *******************************************************************************/
 package org.eclipse.wst.xsl.ui.tests;
 
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
 
 import org.eclipse.wst.xsl.ui.internal.validation.TestDelegatingSourceValidatorForXSL;
 import org.eclipse.wst.xsl.ui.tests.contentassist.TestCallTemplateCompletionProposal;
@@ -32,30 +32,19 @@
 import org.eclipse.wst.xsl.ui.tests.style.TestXSLRegionMap;
 import org.eclipse.wst.xsl.ui.tests.templates.TestTemplateContextTypeXSL;
 
+@RunWith(Suite.class)
+@Suite.SuiteClasses({ TestDelegatingSourceValidatorForXSL.class,
+		XSLCompletionTest.class,
+		TestExcludeResultPrefixesCompletionProposal.class,
+		TestTemplateModeCompletionProposal.class,
+		TestHrefCompletionProposal.class, TestElementCompletionProposal.class,
+		TestXSLLineStyleProvider.class, TestXMLRegionMap.class,
+		TestXSLRegionMap.class, TestXSLHyperlinkDetector.class,
+		TestNamedTemplateCompletionProposal.class,
+		TestCallTemplateCompletionProposal.class,
+		TestXPathXMLCompletionProposal.class, TestTemplateContextTypeXSL.class,
+		TestEmptyFileCompletionProposal.class,
+		TestContentAssistProcessorFactory.class, TestSemanticHighlighting.class })
+public class XSLUITestSuite {
 
-public class XSLUITestSuite extends TestSuite {
-	public static Test suite() {
-		return new XSLUITestSuite();
-	}
-
-	public XSLUITestSuite() {
-		super("XSL UI Test Suite");
-		addTestSuite(TestDelegatingSourceValidatorForXSL.class);
-		addTestSuite(XSLCompletionTest.class);
-		addTestSuite(TestExcludeResultPrefixesCompletionProposal.class);
-		addTestSuite(TestTemplateModeCompletionProposal.class);
-		addTestSuite(TestHrefCompletionProposal.class);
-		addTestSuite(TestElementCompletionProposal.class);
-		addTestSuite(TestXSLLineStyleProvider.class);
-		addTestSuite(TestXMLRegionMap.class);
-		addTestSuite(TestXSLRegionMap.class);
-		addTestSuite(TestXSLHyperlinkDetector.class);
-		addTestSuite(TestNamedTemplateCompletionProposal.class);
-		addTestSuite(TestCallTemplateCompletionProposal.class);
-		addTestSuite(TestXPathXMLCompletionProposal.class);
-		addTestSuite(TestTemplateContextTypeXSL.class);
-		addTestSuite(TestEmptyFileCompletionProposal.class);
-		addTestSuite(TestContentAssistProcessorFactory.class);
-		addTestSuite(TestSemanticHighlighting.class);
-	}
 }
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestCallTemplateCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestCallTemplateCompletionProposal.java
index 41e59f5..4132fa7 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestCallTemplateCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestCallTemplateCompletionProposal.java
@@ -12,12 +12,15 @@
 
 import java.io.File;
 
+import static org.junit.Assert.*;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
 
 public class TestCallTemplateCompletionProposal extends
 		AbstractSourceViewerTest {
 
+	@Test
 	public void testXSLPropsoalAvailable() throws Exception {
 		fileName = "calltemplateTest.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -28,6 +31,7 @@
 		assertNotNull("Did not find proposals.", proposals);
 	}
 
+	@Test
 	public void testUtilsProposalAvailable() throws Exception {
 		fileName = "calltemplateTest.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestElementCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestElementCompletionProposal.java
index 3786f1a..dede0b2 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestElementCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestElementCompletionProposal.java
@@ -12,10 +12,12 @@
 package org.eclipse.wst.xsl.ui.tests.contentassist;
 
 import java.io.File;
+import static org.junit.Assert.*;
 
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -23,6 +25,7 @@
  */
 public class TestElementCompletionProposal extends AbstractSourceViewerTest {
 
+	@Test
 	public void testXSLPropsoalAvailable() throws Exception {
 		fileName = "testElementProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -39,6 +42,7 @@
 		assertNotNull("Did not find proposals.", proposals);
 	}
 
+	@Test
 	public void testXSLApplyTemplatesPropsoalAvailable() throws Exception {
 		fileName = "testElementProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -63,6 +67,7 @@
 				proposalName);
 	}
 
+	@Test
 	public void testXSLChoosePropsoalAvailable() throws Exception {
 		fileName = "testElementProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -87,6 +92,7 @@
 				proposalName);
 	}
 
+	@Test
 	public void testXSLWhenPropsoalNotAvailable() throws Exception {
 		fileName = "testElementProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestEmptyFileCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestEmptyFileCompletionProposal.java
index 89675d7..32f9026 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestEmptyFileCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestEmptyFileCompletionProposal.java
@@ -11,12 +11,15 @@
 package org.eclipse.wst.xsl.ui.tests.contentassist;
 
 import java.io.File;
+import static org.junit.Assert.*;
 
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
 
 public class TestEmptyFileCompletionProposal extends AbstractSourceViewerTest {
 
+	@Test
 	public void testXSLPropsoalAvailable() throws Exception {
 		fileName = "EmptyXSLFile.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestExcludeResultPrefixesCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestExcludeResultPrefixesCompletionProposal.java
index 5fe412d..b12d0b1 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestExcludeResultPrefixesCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestExcludeResultPrefixesCompletionProposal.java
@@ -13,6 +13,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import static org.junit.Assert.*;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.text.BadLocationException;
@@ -21,6 +22,7 @@
 import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -44,6 +46,7 @@
 		return proposals;
 	}
 
+	@Test
 	public void testAllDefaultValueNoProposals() throws Exception {
 		fileName = "TestResultPrefixes.xsl";
 		int column = 29;
@@ -53,6 +56,7 @@
 				proposals.length);
 	}
 
+	@Test
 	public void testXHTMLNamespacePropsoalAvailable() throws Exception {
 		fileName = "TestResultPrefixesEmpty.xsl";
 		int column = 29;
@@ -69,6 +73,7 @@
 				proposals[1].getDisplayString());
 	}
 
+	@Test
 	public void testAllPropsoalAvailable() throws Exception {
 		fileName = "TestResultPrefixesEmpty.xsl";
 		int column = 29;
@@ -85,6 +90,7 @@
 				proposals[0].getDisplayString());
 	}
 
+	@Test
 	public void testExcludeXHTMLProposal() throws Exception {
 		fileName = "TestResultPrefixesWithXhtml.xsl";
 		int column = 35;
@@ -100,6 +106,7 @@
 		}
 	}
 
+	@Test
 	public void testTestProposal() throws Exception {
 		fileName = "TestResultPrefixesWithXhtml.xsl";
 		int column = 35;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestHrefCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestHrefCompletionProposal.java
index 76e9719..a529980 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestHrefCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestHrefCompletionProposal.java
@@ -17,31 +17,42 @@
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 public class TestHrefCompletionProposal extends AbstractSourceViewerTest {
-	
-	protected void setUp() throws Exception {
-		
-	}
-	
-	protected void tearDown() throws Exception {
-		
+
+	@Before
+	public void setUp() throws Exception {
+
 	}
 
+	@After
+	public void tearDown() throws Exception {
+
+	}
+
+	@Ignore
+	@Test
 	public void testHrefProposalsAtStart() throws Exception {
-//		fileName = projectName + File.separator + "hrefs" + File.separator + "mainFile.xsl";
-//		loadFileForTesting(fileName);
-//		IStructuredDocument document = (IStructuredDocument) sourceViewer
-//				.getDocument();
-//		// Column is off by one when calculating for the offset position
-//		int column = 25;
-//		int line = 16;
-//
-//			int offset = document.getLineOffset(line) + column;
-//
-//			ICompletionProposal[] proposals = getProposals(offset);
-//			assertTrue("Incorrect number of proposals", proposals.length > 3);
-//			doCommonTests(proposals);
+		fileName = projectName + File.separator + "hrefs" + File.separator
+				+ "mainFile.xsl";
+		loadFileForTesting(fileName);
+		IStructuredDocument document = (IStructuredDocument) sourceViewer
+				.getDocument();
+		// Column is off by one when calculating for the offset position
+		int column = 25;
+		int line = 16;
+
+		int offset = document.getLineOffset(line) + column;
+
+		ICompletionProposal[] proposals = getProposals(offset);
+		assertTrue("Incorrect number of proposals", proposals.length > 3);
+		doCommonTests(proposals);
 	}
 
 	private void doCommonTests(ICompletionProposal[] proposals) {
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestNamedTemplateCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestNamedTemplateCompletionProposal.java
index ac118c5..b8b1daa 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestNamedTemplateCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestNamedTemplateCompletionProposal.java
@@ -18,6 +18,8 @@
 import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceAlreadyExists;
 import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
 public class TestNamedTemplateCompletionProposal extends
 		AbstractSourceViewerTest {
@@ -28,6 +30,7 @@
 		loadFileForTesting(xslFilePath);
 	}
 
+	@Test
 	public void testXSLPropsoalAvailable() throws Exception {
 		setupTestFile("TestNamedTemplatesAssist.xsl");
 
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestTemplateModeCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestTemplateModeCompletionProposal.java
index 6ddaf50..48c08db 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestTemplateModeCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestTemplateModeCompletionProposal.java
@@ -16,6 +16,8 @@
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
+import static org.junit.Assert.*;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -27,6 +29,7 @@
 	public TestTemplateModeCompletionProposal() {
 	}
 
+	@Test
 	public void testModeProposals() throws Exception {
 		fileName = "modeTest.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestXPathXMLCompletionProposal.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestXPathXMLCompletionProposal.java
index e157650..c59a8ac 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestXPathXMLCompletionProposal.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/TestXPathXMLCompletionProposal.java
@@ -15,6 +15,9 @@
 
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -22,6 +25,7 @@
  */
 public class TestXPathXMLCompletionProposal extends AbstractSourceViewerTest {
 
+	@Test
 	public void testProposalsIncludeXSD() throws Exception {
 		fileName = "TestXPathXMLProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -38,6 +42,7 @@
 		fail("Did not find XSD proposals.");
 	}
 
+	@Test
 	public void testProposalsIncludeAfterColon() throws Exception {
 		fileName = "TestXPathXMLProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -54,6 +59,7 @@
 		fail("Did not find XSD proposals.");
 	}
 
+	@Test
 	public void testProposalsIncludeXSDAfterForwardSlash() throws Exception {
 		fileName = "TestXPathXMLProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -70,6 +76,7 @@
 		fail("Did not find XSD proposals.");
 	}
 
+	@Test
 	public void testTestAttributeProposal() throws Exception {
 		fileName = "TestTestAttributeProposals.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -86,6 +93,7 @@
 		fail("Did not find XPath proposals for the test attribute.");
 	}
 
+	@Test
 	public void testCurlyBraceProposal() throws Exception {
 		fileName = "bug294079.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/XSLCompletionTest.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/XSLCompletionTest.java
index 3ba4ff7..98470a8 100755
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/XSLCompletionTest.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/contentassist/XSLCompletionTest.java
@@ -18,6 +18,9 @@
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal;
 import org.eclipse.wst.xsl.ui.tests.AbstractSourceViewerTest;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -25,6 +28,7 @@
  */
 public class XSLCompletionTest extends AbstractSourceViewerTest {
 
+	@Test
 	public void testGetNodeAtLine10() throws Exception {
 
 		fileName = "utils.xsl";
@@ -37,6 +41,7 @@
 				.getNodeName());
 	}
 
+	@Test
 	public void testGetNodeAtLine12() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -48,6 +53,7 @@
 				.getNodeName());
 	}
 
+	@Test
 	public void testGetNodeAtLine13() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -59,6 +65,7 @@
 				.getNodeName());
 	}
 
+	@Test
 	public void testAttributeNotValueAvailable() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -73,6 +80,7 @@
 				.equals("\"number(substring($date, 6, 2))\""));
 	}
 
+	@Test
 	public void testSelectAttributeProposalsAvailable() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -95,6 +103,7 @@
 	 * 
 	 * @throws Exception
 	 */
+	@Test
 	public void testSelectAttributeProposalsNarrow() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -111,6 +120,7 @@
 		assertEquals("Wrong Number of items returned: ", 6, proposals.length);
 	}
 
+	@Test
 	public void testTestAttributeProposalsAvailable() throws Exception {
 		fileName = "simple.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -118,10 +128,16 @@
 
 		ICompletionProposal[] proposals = getXMLProposals(4, 30);
 		assertTrue(proposals.length >= 1);
-		ICompletionProposal proposal = proposals[0];
-		assertEquals("Wrong attribute proposal returned:", "disable-output-escaping=\"no\"", proposal.getDisplayString());
+		for (int i = 0; i < proposals.length; i++) {
+			ICompletionProposal proposal = proposals[i];
+			if (proposal.getDisplayString().contains("disable-output-escaping")) {
+				return;
+			}
+		}
+		fail("Did not find disable-output-escaping=\"no\"");
 	}
 
+	@Test
 	public void testXSLElementProposalsAvailable() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -138,6 +154,7 @@
 	/*
 	 * Bug 259575
 	 */
+	@Test
 	public void testXPathProposalAvaialbleAfterComma() throws Exception {
 		fileName = "utils.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
@@ -148,6 +165,7 @@
 	}
 
 	// Bug 281420 - Variable inserts wrong.
+	@Test
 	public void testVariableInsertPositionOffset() throws Exception {
 		fileName = "bug281420.xsl";
 		String xslFilePath = projectName + File.separator + fileName;
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/hyperlinkdetector/TestXSLHyperlinkDetector.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/hyperlinkdetector/TestXSLHyperlinkDetector.java
index c4ac324..4421b44 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/hyperlinkdetector/TestXSLHyperlinkDetector.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/hyperlinkdetector/TestXSLHyperlinkDetector.java
@@ -48,6 +48,11 @@
 import org.eclipse.wst.xsl.ui.internal.editor.XSLHyperlinkDetector;
 import org.eclipse.wst.xsl.ui.tests.AbstractXSLUITest;
 import org.eclipse.wst.xsl.core.internal.text.rules.StructuredTextPartitionerForXSL;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -78,7 +83,8 @@
 	 * Setup the necessary projects, files, and source viewer for the tests.
 	 */
 	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		setupProject();
 
@@ -144,7 +150,8 @@
 	}
 
 	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		super.tearDown();
 		parent.dispose();
 	}
@@ -178,6 +185,7 @@
 		document.setDocumentPartitioner(partitioner);
 	}
 
+	@Test
 	public void testDetectHyperlinksDocument() throws Exception {
 		setUpTest("DraftReleaseCRs.xsl");
 
@@ -195,6 +203,7 @@
 		}
 	}
 
+	@Test
 	public void testDetectHyperlinksViewer() throws Exception {
 		setUpTest("DraftReleaseCRs.xsl");
 
@@ -212,6 +221,7 @@
 		}
 	}
 
+	@Test
 	public void testWithParmVariableLink() throws Exception {
 		setUpTest("DraftReleaseCRs.xsl");
 
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestSemanticHighlighting.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestSemanticHighlighting.java
index 0727472..6612528 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestSemanticHighlighting.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestSemanticHighlighting.java
@@ -11,28 +11,28 @@
 package org.eclipse.wst.xsl.ui.tests.style;
 
 import org.eclipse.jface.text.Position;
+import static org.junit.Assert.*;
+
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
 import org.eclipse.wst.sse.core.internal.text.BasicStructuredDocumentRegion;
 import org.eclipse.wst.xsl.ui.internal.style.XSLTagDelimsSemanticHighlighting;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 import junit.framework.TestCase;
 
-public class TestSemanticHighlighting extends TestCase {
+public class TestSemanticHighlighting {
 
     XSLTagDelimsSemanticHighlighting semantich = null;
     
-    @Override
-    protected void setUp() throws Exception {
-    	super.setUp();
+    @Before
+    public void setUp() throws Exception {
     	semantich = new XSLTagDelimsSemanticHighlighting();
     }
-    
-    @Override
-    protected void tearDown() throws Exception {
-    	super.tearDown();
-    }
-    
+        
     //bug 307924
+    @Test
     public void testNPECheck() throws Exception{
     	IStructuredDocumentRegion region = new FakeStructuredRegion();
     	Position[] p = semantich.consumes(region);
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXMLRegionMap.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXMLRegionMap.java
index 6fa8586..b024330 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXMLRegionMap.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXMLRegionMap.java
@@ -14,177 +14,212 @@
 import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
 import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML;
 import org.eclipse.wst.xsl.ui.internal.style.XMLRegionMap;
-import junit.framework.TestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
-public class TestXMLRegionMap extends TestCase {
+import static org.junit.Assert.*;
+
+public class TestXMLRegionMap {
 	private Map<String, String> regionMap = null;
-	
-	@Override
-	protected void setUp() throws Exception {
+
+	@Before
+	public void setUp() throws Exception {
 		regionMap = getRegionMap();
 	}
 	
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		regionMap = null;
 	}
 	
+	@Test
 	public void testXMLContentRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_CONTENT));
 		assertEquals("Incorrect value", IStyleConstantsXML.XML_CONTENT, regionMap.get(DOMRegionContext.XML_CONTENT));
 		
 	}
 	
+	@Test
 	public void testXMLDocTypeInternalSubsettRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_INTERNAL_SUBSET));
 		assertEquals("Incorrect value", IStyleConstantsXML.XML_CONTENT, regionMap.get(DOMRegionContext.XML_DOCTYPE_INTERNAL_SUBSET));
 		
 	}
 	
+	@Test
 	public void testXMLTagOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_BORDER, regionMap.get(DOMRegionContext.XML_TAG_OPEN));
 		
 	}
 
+	@Test
 	public void testXMLTagCloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_BORDER, regionMap.get(DOMRegionContext.XML_TAG_CLOSE));
 		
 	}
 
+	@Test
 	public void testXMLEndTagOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_END_TAG_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_BORDER, regionMap.get(DOMRegionContext.XML_END_TAG_OPEN));
 		
 	}
 
+	@Test
 	public void testXMLCDataOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_CDATA_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.CDATA_BORDER, regionMap.get(DOMRegionContext.XML_CDATA_OPEN));
 	}
 
+	@Test
 	public void testXMLCDataCloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_CDATA_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.CDATA_BORDER, regionMap.get(DOMRegionContext.XML_CDATA_CLOSE));
 	}
 
+	@Test
 	public void testXMLCDataTextRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_CDATA_TEXT));
 		assertEquals("Incorrect value", IStyleConstantsXML.CDATA_TEXT, regionMap.get(DOMRegionContext.XML_CDATA_TEXT));
 	}
 	
+	@Test
 	public void testXMLTagAttributeNameRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_ATTRIBUTE_NAME, regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME));
 	}
 	
+	@Test
 	public void testXMLDocTypeDeclartionRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_DECLARATION));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_NAME, regionMap.get(DOMRegionContext.XML_DOCTYPE_DECLARATION));
 	}
 	
+	@Test
 	public void testXMLTagNameRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_NAME));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_NAME, regionMap.get(DOMRegionContext.XML_TAG_NAME));
 		
 	}
 	
+	@Test
 	public void testXMLTagAttributeValueRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_ATTRIBUTE_VALUE, regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE));
 	}
 	
+	@Test
 	public void testXMLTagAttributeEqualsRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS, regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS));
 	}
 	
+	@Test
 	public void testXMLCommentOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_COMMENT_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.COMMENT_BORDER, regionMap.get(DOMRegionContext.XML_COMMENT_OPEN));
 	}
 	
+	@Test
 	public void testXMLCommentCloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_COMMENT_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.COMMENT_BORDER, regionMap.get(DOMRegionContext.XML_COMMENT_CLOSE));
 	}
 	
+	@Test
 	public void testXMLCommentTextRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_COMMENT_TEXT));
 		assertEquals("Incorrect value", IStyleConstantsXML.COMMENT_TEXT, regionMap.get(DOMRegionContext.XML_COMMENT_TEXT));
 	}
 	
+	@Test
 	public void testXMLDocTypeNameRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_NAME));
 		assertEquals("Incorrect value", IStyleConstantsXML.DOCTYPE_NAME, regionMap.get(DOMRegionContext.XML_DOCTYPE_NAME));
 	}
 	
+	@Test
 	public void testXMLCharReferenceRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_CHAR_REFERENCE));
 		assertEquals("Incorrect value", IStyleConstantsXML.ENTITY_REFERENCE, regionMap.get(DOMRegionContext.XML_CHAR_REFERENCE));
 	}
 	
+	@Test
 	public void testXMLPeReferenceRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_PE_REFERENCE));
 		assertEquals("Incorrect value", IStyleConstantsXML.ENTITY_REFERENCE, regionMap.get(DOMRegionContext.XML_PE_REFERENCE));
 	}
 	
+	@Test
 	public void testXMLPIContentRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_PI_CONTENT));
 		assertEquals("Incorrect value", IStyleConstantsXML.PI_CONTENT, regionMap.get(DOMRegionContext.XML_PI_CONTENT));
 	}
 	
+	@Test
 	public void testXMLPIOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_PI_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.PI_BORDER, regionMap.get(DOMRegionContext.XML_PI_OPEN));
 	}
 	
+	@Test
 	public void testXMLPICloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_PI_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.PI_BORDER, regionMap.get(DOMRegionContext.XML_PI_CLOSE));
 	}
 	
+	@Test
 	public void testXMLDeclartionOpenRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DECLARATION_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXML.DECL_BORDER, regionMap.get(DOMRegionContext.XML_DECLARATION_OPEN));
 	}
 	
+	@Test
 	public void testXMLDeclartionCloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DECLARATION_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.DECL_BORDER, regionMap.get(DOMRegionContext.XML_DECLARATION_CLOSE));
 	}
 	
+	@Test
 	public void testXMLDocTypeExternalIdSysrefRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSREF));
 		assertEquals("Incorrect value", IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF, regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSREF));
 	}
 	
+	@Test
 	public void testXMLDocTypeExternalIdPubrefRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBREF));
 		assertEquals("Incorrect value", IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF, regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBREF));
 	}
 	
+	@Test
 	public void testXMLDocTypeExternalIdPublicRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBLIC));
 		assertEquals("Incorrect value", IStyleConstantsXML.DOCTYPE_EXTERNAL_ID, regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_PUBLIC));
 	}
 	
+	@Test
 	public void testXMLDocTypeExternalIdSystemRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSTEM));
 		assertEquals("Incorrect value", IStyleConstantsXML.DOCTYPE_EXTERNAL_ID, regionMap.get(DOMRegionContext.XML_DOCTYPE_EXTERNAL_ID_SYSTEM));
 	}
 	
+	@Test
 	public void testUndefinedRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.UNDEFINED));
 		assertEquals("Incorrect value", IStyleConstantsXML.CDATA_TEXT, regionMap.get(DOMRegionContext.UNDEFINED));
 	}
 	
+	@Test
 	public void testWhiteSpaceRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.WHITE_SPACE));
 		assertEquals("Incorrect value", IStyleConstantsXML.XML_CONTENT, regionMap.get(DOMRegionContext.WHITE_SPACE));
 	}
 	
+	@Test
 	public void testXMLEmptyTagClose() throws Exception {
 		assertNotNull("Region Not Found.", regionMap.get(DOMRegionContext.XML_EMPTY_TAG_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXML.TAG_BORDER, regionMap.get(DOMRegionContext.XML_EMPTY_TAG_CLOSE));
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLLineStyleProvider.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLLineStyleProvider.java
index a103948..50bfc76 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLLineStyleProvider.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLLineStyleProvider.java
@@ -12,10 +12,10 @@
 package org.eclipse.wst.xsl.ui.tests.style;
 
 import java.io.File;
+import static org.junit.Assert.*;
 import java.io.IOException;
 import java.util.ArrayList;
 
-import junit.framework.Assert;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -54,6 +54,9 @@
 import org.eclipse.wst.xsl.ui.internal.StructuredTextViewerConfigurationXSL;
 import org.eclipse.wst.xsl.ui.tests.AbstractXSLUITest;
 import org.eclipse.wst.xsl.core.internal.text.rules.StructuredTextPartitionerForXSL;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Tests everything about code completion and code assistance.
@@ -83,8 +86,8 @@
 	/**
 	 * Setup the necessary projects, files, and source viewer for the tests.
 	 */
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		super.setUp();
 		setupProject();
 
@@ -96,7 +99,7 @@
 		file = ResourcesPlugin.getWorkspace().getRoot().getFile(
 				new Path(xslFilePath));
 		if (file != null && !file.exists()) {
-			Assert.fail("Unable to locate " + fileName + " stylesheet.");
+			fail("Unable to locate " + fileName + " stylesheet.");
 		}
 
 		loadXSLFile();
@@ -120,8 +123,7 @@
 			sourceViewer = new StructuredTextViewer(parent, null, null, false,
 					SWT.NONE);
 		} else {
-			Assert
-					.fail("Unable to run the test as a display must be available.");
+			fail("Unable to run the test as a display must be available.");
 		}
 
 		configureSourceViewer();
@@ -160,8 +162,8 @@
 		}
 	}
 
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		super.tearDown();
 		parent.dispose();
 		if (model != null) {
@@ -231,6 +233,7 @@
 		}
 	}
 
+	@Test
 	public void testHasLineStyleProvider() throws Exception {
 		setUpTest("utils.xsl");
 
@@ -239,11 +242,13 @@
 		assertEquals("Wrong number of providers", 1, lineStyleProviders.length);
 	}
 
+	@Test
 	public void testInitializeLineStyleProvider() throws Exception {
 		setUpTest("utils.xsl");
 		initializeProvider();
 	}
 
+	@Test
 	public void testPrepareRegion() throws Exception {
 		setUpTest("utils.xsl");
 		LineStyleProvider provider = initializeProvider();
diff --git a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLRegionMap.java b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLRegionMap.java
index 1c09350..2ea72a9 100644
--- a/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLRegionMap.java
+++ b/tests/org.eclipse.wst.xsl.ui.tests/src/org/eclipse/wst/xsl/ui/tests/style/TestXSLRegionMap.java
@@ -14,19 +14,24 @@
 import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
 import org.eclipse.wst.xsl.ui.internal.style.IStyleConstantsXSL;
 import org.eclipse.wst.xsl.ui.internal.style.XSLRegionMap;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 import junit.framework.TestCase;
 
-public class TestXSLRegionMap extends TestCase {
+public class TestXSLRegionMap {
 	Map<String, String> regionMap = null;
 	
-	@Override
-	protected void setUp() throws Exception {
+	@Before
+	public void setUp() throws Exception {
 		regionMap = getXSLRegionMap();
 	}
 	
-	@Override
-	protected void tearDown() throws Exception {
+	@After
+	public void tearDown() throws Exception {
 		regionMap = null;
 	}
 	
@@ -41,36 +46,42 @@
 		
 	}
 	
+	@Test
 	public void testXSLEndTagOpenContentRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_END_TAG_OPEN));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_BORDER, regionMap.get(DOMRegionContext.XML_END_TAG_OPEN));
 		
 	}
 	
+	@Test
 	public void testXSLTagCloseContentRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_BORDER, regionMap.get(DOMRegionContext.XML_TAG_CLOSE));
 		
 	}
 	
+	@Test
 	public void testXSLEmptyTagCloseRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_EMPTY_TAG_CLOSE));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_BORDER, regionMap.get(DOMRegionContext.XML_EMPTY_TAG_CLOSE));
 		
 	}
 	
+	@Test
 	public void testXSLTagAttributeNameRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_ATTRIBUTE_NAME, regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME));
 		
 	}
 	
+	@Test
 	public void testXSLTagNameRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_NAME));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_NAME, regionMap.get(DOMRegionContext.XML_TAG_NAME));
 		
 	}
 	
+	@Test
 	public void testXSLTagAttributeValueRegion() throws Exception {
 		assertNotNull("Region Not Found", regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE));
 		assertEquals("Incorrect value", IStyleConstantsXSL.TAG_ATTRIBUTE_VALUE, regionMap.get(DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE));
