diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal
index 83097a31553a58aad5670cf8a782701f467b773c..6d73a20db3197df180006a4f244b4acf8c44048f 100644
--- a/Cabal/Cabal.cabal
+++ b/Cabal/Cabal.cabal
@@ -261,11 +261,10 @@ test-suite unit-tests
   main-is: UnitTests.hs
   build-depends:
     base,
-    test-framework,
-    test-framework-hunit,
-    test-framework-quickcheck2,
-    HUnit,
-    QuickCheck < 2.8,
+    tasty,
+    tasty-hunit,
+    tasty-quickcheck,
+    QuickCheck < 2.9,
     Cabal
   ghc-options: -Wall
   default-language: Haskell98
@@ -308,11 +307,10 @@ test-suite package-tests
   build-depends:
     base,
     containers,
-    test-framework,
-    test-framework-quickcheck2 >= 0.2.12,
-    test-framework-hunit,
-    HUnit,
-    QuickCheck >= 2.1.0.1 && < 2.8,
+    tasty,
+    tasty-quickcheck,
+    tasty-hunit,
+    QuickCheck >= 2.1.0.1 && < 2.9,
     Cabal,
     process,
     directory,
diff --git a/Cabal/tests/PackageTests.hs b/Cabal/tests/PackageTests.hs
index a3b244438e752250c910ad40fdd23ed376526e40..e9b05d054bcb9fadc36717ab66fe73bd870f19d5 100644
--- a/Cabal/tests/PackageTests.hs
+++ b/Cabal/tests/PackageTests.hs
@@ -52,87 +52,78 @@ import Control.Exception (try, throw)
 import System.Directory
     ( getCurrentDirectory, setCurrentDirectory )
 import System.FilePath ((</>))
-import System.IO (BufferMode(NoBuffering), hSetBuffering, stdout)
-import Test.Framework (Test, TestName, defaultMain, testGroup)
-import Test.Framework.Providers.HUnit (hUnitTestToTests)
-import qualified Test.HUnit as HUnit
+import Test.Tasty
+import Test.Tasty.HUnit
 
 
-hunit :: TestName -> HUnit.Test -> Test
-hunit name test = testGroup name $ hUnitTestToTests test
-
-tests :: Version -> PackageSpec -> FilePath -> FilePath -> [Test]
+tests :: Version -> PackageSpec -> FilePath -> FilePath -> [TestTree]
 tests version inplaceSpec ghcPath ghcPkgPath =
-    [ hunit "BuildDeps/SameDepsAllRound"
+    [ testCase "BuildDeps/SameDepsAllRound"
       (PackageTests.BuildDeps.SameDepsAllRound.Check.suite ghcPath)
       -- The two following tests were disabled by Johan Tibell as
       -- they have been failing for a long time:
-      -- , hunit "BuildDeps/GlobalBuildDepsNotAdditive1/"
+      -- , testCase "BuildDeps/GlobalBuildDepsNotAdditive1/"
       --   (PackageTests.BuildDeps.GlobalBuildDepsNotAdditive1.Check.suite ghcPath)
-      -- , hunit "BuildDeps/GlobalBuildDepsNotAdditive2/"
+      -- , testCase "BuildDeps/GlobalBuildDepsNotAdditive2/"
       --   (PackageTests.BuildDeps.GlobalBuildDepsNotAdditive2.Check.suite ghcPath)
-    , hunit "BuildDeps/InternalLibrary0"
+    , testCase "BuildDeps/InternalLibrary0"
       (PackageTests.BuildDeps.InternalLibrary0.Check.suite version ghcPath)
-    , hunit "PreProcess" (PackageTests.PreProcess.Check.suite ghcPath)
-    , hunit "TestStanza" (PackageTests.TestStanza.Check.suite ghcPath)
+    , testCase "PreProcess" (PackageTests.PreProcess.Check.suite ghcPath)
+    , testCase "TestStanza" (PackageTests.TestStanza.Check.suite ghcPath)
       -- ^ The Test stanza test will eventually be required
       -- only for higher versions.
     , testGroup "TestSuiteExeV10" (PackageTests.TestSuiteExeV10.Check.checks ghcPath)
-    , hunit "TestOptions" (PackageTests.TestOptions.Check.suite ghcPath)
-    , hunit "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite ghcPath)
+    , testCase "TestOptions" (PackageTests.TestOptions.Check.suite ghcPath)
+    , testCase "BenchmarkStanza" (PackageTests.BenchmarkStanza.Check.suite ghcPath)
       -- ^ The benchmark stanza test will eventually be required
       -- only for higher versions.
-    , hunit "BenchmarkExeV10/Test"
+    , testCase "BenchmarkExeV10/Test"
       (PackageTests.BenchmarkExeV10.Check.checkBenchmark ghcPath)
-    , hunit "BenchmarkOptions" (PackageTests.BenchmarkOptions.Check.suite ghcPath)
-    , hunit "TemplateHaskell/vanilla"
+    , testCase "BenchmarkOptions" (PackageTests.BenchmarkOptions.Check.suite ghcPath)
+    , testCase "TemplateHaskell/vanilla"
       (PackageTests.TemplateHaskell.Check.vanilla ghcPath)
-    , hunit "TemplateHaskell/profiling"
+    , testCase "TemplateHaskell/profiling"
       (PackageTests.TemplateHaskell.Check.profiling ghcPath)
-    , hunit "PathsModule/Executable"
+    , testCase "PathsModule/Executable"
       (PackageTests.PathsModule.Executable.Check.suite ghcPath)
-    , hunit "PathsModule/Library" (PackageTests.PathsModule.Library.Check.suite ghcPath)
-    , hunit "DeterministicAr"
+    , testCase "PathsModule/Library" (PackageTests.PathsModule.Library.Check.suite ghcPath)
+    , testCase "DeterministicAr"
         (PackageTests.DeterministicAr.Check.suite ghcPath ghcPkgPath)
-    , hunit "EmptyLib/emptyLib"
+    , testCase "EmptyLib/emptyLib"
       (PackageTests.EmptyLib.Check.emptyLib ghcPath)
-    , hunit "Haddock" (PackageTests.Haddock.Check.suite ghcPath)
-    , hunit "BuildTestSuiteDetailedV09"
+    , testCase "Haddock" (PackageTests.Haddock.Check.suite ghcPath)
+    , testCase "BuildTestSuiteDetailedV09"
       (PackageTests.BuildTestSuiteDetailedV09.Check.suite inplaceSpec ghcPath)
-    , hunit "OrderFlags"
+    , testCase "OrderFlags"
       (PackageTests.OrderFlags.Check.suite ghcPath)
-    , hunit "TemplateHaskell/dynamic"
+    , testCase "TemplateHaskell/dynamic"
       (PackageTests.TemplateHaskell.Check.dynamic ghcPath)
-    , hunit "ReexportedModules"
+    , testCase "ReexportedModules"
       (PackageTests.ReexportedModules.Check.suite ghcPath)
     ] ++
     -- These tests are only required to pass on cabal version >= 1.7
     (if version >= Version [1, 7] []
-     then [ hunit "BuildDeps/TargetSpecificDeps1"
+     then [ testCase "BuildDeps/TargetSpecificDeps1"
             (PackageTests.BuildDeps.TargetSpecificDeps1.Check.suite ghcPath)
-          , hunit "BuildDeps/TargetSpecificDeps2"
+          , testCase "BuildDeps/TargetSpecificDeps2"
             (PackageTests.BuildDeps.TargetSpecificDeps2.Check.suite ghcPath)
-          , hunit "BuildDeps/TargetSpecificDeps3"
+          , testCase "BuildDeps/TargetSpecificDeps3"
             (PackageTests.BuildDeps.TargetSpecificDeps3.Check.suite ghcPath)
-          , hunit "BuildDeps/InternalLibrary1"
+          , testCase "BuildDeps/InternalLibrary1"
             (PackageTests.BuildDeps.InternalLibrary1.Check.suite ghcPath)
-          , hunit "BuildDeps/InternalLibrary2"
+          , testCase "BuildDeps/InternalLibrary2"
             (PackageTests.BuildDeps.InternalLibrary2.Check.suite ghcPath ghcPkgPath)
-          , hunit "BuildDeps/InternalLibrary3"
+          , testCase "BuildDeps/InternalLibrary3"
             (PackageTests.BuildDeps.InternalLibrary3.Check.suite ghcPath ghcPkgPath)
-          , hunit "BuildDeps/InternalLibrary4"
+          , testCase "BuildDeps/InternalLibrary4"
             (PackageTests.BuildDeps.InternalLibrary4.Check.suite ghcPath ghcPkgPath)
-          , hunit "PackageTests/CMain"
+          , testCase "PackageTests/CMain"
             (PackageTests.CMain.Check.checkBuild ghcPath)
           ]
      else [])
 
 main :: IO ()
 main = do
-    -- WORKAROUND: disable buffering on stdout to get streaming test logs
-    -- test providers _should_ do this themselves
-    hSetBuffering stdout NoBuffering
-
     wd <- getCurrentDirectory
     let dbFile = wd </> "dist/package.conf.inplace"
         inplaceSpec = PackageSpec
@@ -157,7 +148,8 @@ main = do
     setCurrentDirectory "tests"
     -- Create a shared Setup executable to speed up Simple tests
     compileSetup "." ghcPath
-    defaultMain (tests cabalVersion inplaceSpec ghcPath ghcPkgPath)
+    defaultMain $ testGroup "Package Tests"
+      (tests cabalVersion inplaceSpec ghcPath ghcPkgPath)
 
 -- Like Distribution.Simple.Configure.getPersistBuildConfig but
 -- doesn't check that the Cabal version matches, which it doesn't when
diff --git a/Cabal/tests/PackageTests/BenchmarkExeV10/Check.hs b/Cabal/tests/PackageTests/BenchmarkExeV10/Check.hs
index 6904048ee82fda19738f021c07c2225cd7ed509e..6316f972bd466f1fd09cd0ed501f4c9c38af98e1 100644
--- a/Cabal/tests/PackageTests/BenchmarkExeV10/Check.hs
+++ b/Cabal/tests/PackageTests/BenchmarkExeV10/Check.hs
@@ -4,13 +4,13 @@ module PackageTests.BenchmarkExeV10.Check
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 dir :: FilePath
 dir = "PackageTests" </> "BenchmarkExeV10"
 
-checkBenchmark :: FilePath -> Test
-checkBenchmark ghcPath = TestCase $ do
+checkBenchmark :: FilePath -> Assertion
+checkBenchmark ghcPath = do
     let spec = PackageSpec dir Nothing ["--enable-benchmarks"]
     buildResult <- cabal_build spec ghcPath
     assertBuildSucceeded buildResult
diff --git a/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs b/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs
index d217b04d213f5017af231008a0412adef25ef925..41f363c8deb61140b3a929d04642a16caa192b32 100644
--- a/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs
+++ b/Cabal/tests/PackageTests/BenchmarkOptions/Check.hs
@@ -2,10 +2,10 @@ module PackageTests.BenchmarkOptions.Check where
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BenchmarkOptions"
             , configOpts = ["--enable-benchmarks"]
diff --git a/Cabal/tests/PackageTests/BenchmarkStanza/Check.hs b/Cabal/tests/PackageTests/BenchmarkStanza/Check.hs
index fb4098524511e27e8b853bcd6ac1586fb1045e71..5ffdb4083ccf9dc6b563d15a2c14424b7c8e0bb9 100644
--- a/Cabal/tests/PackageTests/BenchmarkStanza/Check.hs
+++ b/Cabal/tests/PackageTests/BenchmarkStanza/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.BenchmarkStanza.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import System.FilePath
 import qualified Data.Map as Map
 import PackageTests.PackageTester
@@ -22,8 +22,8 @@ import Distribution.Compiler
         ( CompilerId(..), CompilerFlavor(..), unknownCompilerInfo, AbiTag(..) )
 import Distribution.Text
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let dir = "PackageTests" </> "BenchmarkStanza"
         pdFile = dir </> "my" <.> "cabal"
         spec = PackageSpec { directory = dir, configOpts = [], distPref = Nothing }
diff --git a/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive1/Check.hs b/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive1/Check.hs
index 998a1b9d1aee41e11ea3d33e9e0f2ba66a29b615..4dde5c403aa277e739131df471af34e0b55eebc2 100644
--- a/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive1/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive1/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.BuildDeps.GlobalBuildDepsNotAdditive1.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import Data.List
@@ -8,8 +8,8 @@ import Control.Exception
 import Prelude hiding (catch)
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec ("PackageTests" </> "BuildDeps" </> "GlobalBuildDepsNotAdditive1") []
     result <- cabal_build spec ghcPath
     do
diff --git a/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive2/Check.hs b/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive2/Check.hs
index d245711fc9cf1212ef5e16d1a8179210592d9aa8..6286d4982f731245f33563ec12ba5ea445be21a2 100644
--- a/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive2/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/GlobalBuildDepsNotAdditive2/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.BuildDeps.GlobalBuildDepsNotAdditive2.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import Data.List
@@ -8,8 +8,8 @@ import Control.Exception
 import Prelude hiding (catch)
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec ("PackageTests" </> "BuildDeps" </> "GlobalBuildDepsNotAdditive2") []
     result <- cabal_build spec ghcPath
     do
diff --git a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary0/Check.hs b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary0/Check.hs
index 14d979d07a75a84923792c5134dbda1f3f92bc1d..910ef703d5a66324b9efe9a81c666f476b32826a 100644
--- a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary0/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary0/Check.hs
@@ -4,11 +4,11 @@ import Control.Monad
 import Data.Version
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 
-suite :: Version -> FilePath -> Test
-suite cabalVersion ghcPath = TestCase $ do
+suite :: Version -> FilePath -> Assertion
+suite cabalVersion ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "InternalLibrary0"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary1/Check.hs b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary1/Check.hs
index 27e813301f5648bb53ca1d1e191c33d16bd1d117..a7d0c47d0cc5292fbd9030125452adec46c80aa6 100644
--- a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary1/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary1/Check.hs
@@ -2,11 +2,11 @@ module PackageTests.BuildDeps.InternalLibrary1.Check where
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "InternalLibrary1"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary2/Check.hs b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary2/Check.hs
index babf55e035fc1fbea6b23aa26f523ade0c5a18f7..dae1c884f7064d02660b529a8a8a112d62fef7f8 100644
--- a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary2/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary2/Check.hs
@@ -3,11 +3,11 @@ module PackageTests.BuildDeps.InternalLibrary2.Check where
 import qualified Data.ByteString.Char8 as C
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 
-suite :: FilePath -> FilePath -> Test
-suite ghcPath ghcPkgPath = TestCase $ do
+suite :: FilePath -> FilePath -> Assertion
+suite ghcPath ghcPkgPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "InternalLibrary2"
             , configOpts = []
@@ -29,4 +29,3 @@ suite ghcPath ghcPkgPath = TestCase $ do
     (_, _, output) <- run (Just $ directory spec) (directory spec </> "dist" </> "build" </> "lemon" </> "lemon") [] []
     C.appendFile (directory spec </> "test-log.txt") (C.pack $ "\ndist/build/lemon/lemon\n"++output)
     assertEqual "executable should have linked with the internal library" "myLibFunc internal" (concat $ lines output)
-
diff --git a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary3/Check.hs b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary3/Check.hs
index 255bbd38f9d7238d05ae85aed9aef705d7e4eca3..d39160bc9ce5c9ed6d3d5d66b9498cf1284da5c2 100644
--- a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary3/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary3/Check.hs
@@ -3,11 +3,11 @@ module PackageTests.BuildDeps.InternalLibrary3.Check where
 import qualified Data.ByteString.Char8 as C
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 
-suite :: FilePath -> FilePath -> Test
-suite ghcPath ghcPkgPath = TestCase $ do
+suite :: FilePath -> FilePath -> Assertion
+suite ghcPath ghcPkgPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "InternalLibrary3"
             , configOpts = []
@@ -29,4 +29,3 @@ suite ghcPath ghcPkgPath = TestCase $ do
     (_, _, output) <- run (Just $ directory spec) (directory spec </> "dist" </> "build" </> "lemon" </> "lemon") [] []
     C.appendFile (directory spec </> "test-log.txt") (C.pack $ "\ndist/build/lemon/lemon\n"++output)
     assertEqual "executable should have linked with the internal library" "myLibFunc internal" (concat $ lines output)
-
diff --git a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary4/Check.hs b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary4/Check.hs
index 23cbc179314583940a4213d70d47893411417523..7a890e6a01d37fec80c40d2c715543da523ee037 100644
--- a/Cabal/tests/PackageTests/BuildDeps/InternalLibrary4/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/InternalLibrary4/Check.hs
@@ -3,11 +3,11 @@ module PackageTests.BuildDeps.InternalLibrary4.Check where
 import qualified Data.ByteString.Char8 as C
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 
-suite :: FilePath -> FilePath -> Test
-suite ghcPath ghcPkgPath = TestCase $ do
+suite :: FilePath -> FilePath -> Assertion
+suite ghcPath ghcPkgPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "InternalLibrary4"
             , configOpts = []
@@ -29,4 +29,3 @@ suite ghcPath ghcPkgPath = TestCase $ do
     (_, _, output) <- run (Just $ directory spec) (directory spec </> "dist" </> "build" </> "lemon" </> "lemon") [] []
     C.appendFile (directory spec </> "test-log.txt") (C.pack $ "\ndist/build/lemon/lemon\n"++output)
     assertEqual "executable should have linked with the installed library" "myLibFunc installed" (concat $ lines output)
-
diff --git a/Cabal/tests/PackageTests/BuildDeps/SameDepsAllRound/Check.hs b/Cabal/tests/PackageTests/BuildDeps/SameDepsAllRound/Check.hs
index 8ee7e46bd56a94dfb32e2de4e8ce4ed698975ceb..adc3cdf647546026250651a315564820c0874690 100644
--- a/Cabal/tests/PackageTests/BuildDeps/SameDepsAllRound/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/SameDepsAllRound/Check.hs
@@ -1,13 +1,13 @@
 module PackageTests.BuildDeps.SameDepsAllRound.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import qualified Control.Exception as E
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "SameDepsAllRound"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps1/Check.hs b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps1/Check.hs
index 22ade2e7f01806833b9c34d6a9e7f2f610071c5a..454cdd37ac08365430223aae696e9ce4c3359497 100644
--- a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps1/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps1/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.BuildDeps.TargetSpecificDeps1.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import Data.List
@@ -8,8 +8,8 @@ import qualified Control.Exception as E
 import Text.Regex.Posix
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "TargetSpecificDeps1"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps2/Check.hs b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps2/Check.hs
index f8dbe8ba2e1ab512b608c59756d27b7f6d0ce304..c6adc1f5b9c4140400895632a0380615e06fec7c 100644
--- a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps2/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps2/Check.hs
@@ -1,13 +1,13 @@
 module PackageTests.BuildDeps.TargetSpecificDeps2.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import qualified Control.Exception as E
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "TargetSpecificDeps2"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps3/Check.hs b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps3/Check.hs
index c8881433bfb3619ff56e3941b2d8c05e05dc594c..6b4b91dd4c029ac34f84eb658172eb3abfa372a4 100644
--- a/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps3/Check.hs
+++ b/Cabal/tests/PackageTests/BuildDeps/TargetSpecificDeps3/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.BuildDeps.TargetSpecificDeps3.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import Data.List
@@ -8,8 +8,8 @@ import qualified Control.Exception as E
 import Text.Regex.Posix
 
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "BuildDeps" </> "TargetSpecificDeps3"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/BuildTestSuiteDetailedV09/Check.hs b/Cabal/tests/PackageTests/BuildTestSuiteDetailedV09/Check.hs
index 484a5ea60170eac45371217737c29b2b341224dd..d7a75b20c43515dd1ce60e0582b9b865f1d38fe6 100644
--- a/Cabal/tests/PackageTests/BuildTestSuiteDetailedV09/Check.hs
+++ b/Cabal/tests/PackageTests/BuildTestSuiteDetailedV09/Check.hs
@@ -1,12 +1,12 @@
 module PackageTests.BuildTestSuiteDetailedV09.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import System.FilePath ((</>))
 
 import PackageTests.PackageTester
 
-suite :: PackageSpec -> FilePath -> Test
-suite inplaceSpec ghcPath = TestCase $ do
+suite :: PackageSpec -> FilePath -> Assertion
+suite inplaceSpec ghcPath = do
     let dir = "PackageTests" </> "BuildTestSuiteDetailedV09"
         spec = inplaceSpec
             { directory = dir
diff --git a/Cabal/tests/PackageTests/CMain/Check.hs b/Cabal/tests/PackageTests/CMain/Check.hs
index 44fe4ae2f1abe234b06eac4125eb41dd06d3f0df..4f3c0d95da2dbcf8100e57371f8074af99d182cb 100644
--- a/Cabal/tests/PackageTests/CMain/Check.hs
+++ b/Cabal/tests/PackageTests/CMain/Check.hs
@@ -2,15 +2,15 @@ module PackageTests.CMain.Check
        ( checkBuild
        ) where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import System.FilePath
 import PackageTests.PackageTester
 
 dir :: FilePath
 dir = "PackageTests" </> "CMain"
 
-checkBuild :: FilePath -> Test
-checkBuild ghcPath = TestCase $ do
+checkBuild :: FilePath -> Assertion
+checkBuild ghcPath = do
     let spec = PackageSpec
             { directory = dir
             , distPref = Nothing
diff --git a/Cabal/tests/PackageTests/DeterministicAr/Check.hs b/Cabal/tests/PackageTests/DeterministicAr/Check.hs
index 8f35a56a735725e71e214f3fbcfbec0ba0177e3f..df231836f327fe1ddd05cb0112b0de260e9b5282 100644
--- a/Cabal/tests/PackageTests/DeterministicAr/Check.hs
+++ b/Cabal/tests/PackageTests/DeterministicAr/Check.hs
@@ -15,7 +15,7 @@ import PackageTests.PackageTester
 import System.Exit
 import System.FilePath
 import System.IO
-import Test.HUnit (Assertion, Test (TestCase), assertFailure)
+import Test.Tasty.HUnit (Assertion, assertFailure)
 
 import Distribution.Compiler              (CompilerFlavor(..), CompilerId(..))
 import Distribution.Package               (packageKeyHash)
@@ -58,8 +58,8 @@ ghcPkg_field1 libraryName fieldName ghcPkgPath = do
 this :: String
 this = "DeterministicAr"
 
-suite :: FilePath -> FilePath -> Test
-suite ghcPath ghcPkgPath = TestCase $ do
+suite :: FilePath -> FilePath -> Assertion
+suite ghcPath ghcPkgPath = do
     let dir = "PackageTests" </> this
     let spec = PackageSpec
             { directory = dir
diff --git a/Cabal/tests/PackageTests/EmptyLib/Check.hs b/Cabal/tests/PackageTests/EmptyLib/Check.hs
index e4f182cc658708ded9b627acc930c0ec0050c019..68d35f17cbebc8f177c4e46f58cd9a351cf47e46 100644
--- a/Cabal/tests/PackageTests/EmptyLib/Check.hs
+++ b/Cabal/tests/PackageTests/EmptyLib/Check.hs
@@ -2,11 +2,11 @@ module PackageTests.EmptyLib.Check where
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
 -- See https://github.com/haskell/cabal/issues/1241
-emptyLib :: FilePath -> Test
-emptyLib ghcPath = TestCase $ do
+emptyLib :: FilePath -> Assertion
+emptyLib ghcPath = do
    let spec = PackageSpec
           { directory = "PackageTests" </> "EmptyLib" </> "empty"
           , configOpts = []
diff --git a/Cabal/tests/PackageTests/Haddock/Check.hs b/Cabal/tests/PackageTests/Haddock/Check.hs
index 7fc2f3afbc8cf6fd2134dffe3ed4a47d9ea79668..720ec35d3c559502e18089d52639fbd912e20bf6 100644
--- a/Cabal/tests/PackageTests/Haddock/Check.hs
+++ b/Cabal/tests/PackageTests/Haddock/Check.hs
@@ -5,7 +5,7 @@ import Data.List (isInfixOf)
 
 import System.FilePath ((</>))
 import System.Directory (doesDirectoryExist, removeDirectoryRecursive)
-import Test.HUnit (Assertion, Test (TestCase), assertFailure)
+import Test.Tasty.HUnit (Assertion, assertFailure)
 
 import Distribution.Simple.Utils (withFileContents)
 import PackageTests.PackageTester
@@ -14,8 +14,8 @@ import PackageTests.PackageTester
 this :: String
 this = "Haddock"
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let dir = "PackageTests" </> this
         haddocksDir = dir </> "dist" </> "doc" </> "html" </> "Haddock"
         spec = PackageSpec
diff --git a/Cabal/tests/PackageTests/OrderFlags/Check.hs b/Cabal/tests/PackageTests/OrderFlags/Check.hs
index ebda768242d33d5580d700e3efcd134f6279fcbd..fac126a116d4f876ff102b8a76a1369a2e1a6fc3 100644
--- a/Cabal/tests/PackageTests/OrderFlags/Check.hs
+++ b/Cabal/tests/PackageTests/OrderFlags/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.OrderFlags.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import PackageTests.PackageTester
 import System.FilePath
 import Control.Exception
@@ -9,8 +9,8 @@ import Control.Exception
 import Prelude hiding (catch)
 #endif
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "OrderFlags"
             , configOpts = []
diff --git a/Cabal/tests/PackageTests/PackageTester.hs b/Cabal/tests/PackageTests/PackageTester.hs
index 10cf2380cc98d09cfaceb16a0d30957aa57ae80e..b2531893ab6290df94f742270af9765f5af90d39 100644
--- a/Cabal/tests/PackageTests/PackageTester.hs
+++ b/Cabal/tests/PackageTests/PackageTester.hs
@@ -41,7 +41,7 @@ import System.FilePath
 import System.IO (hIsEOF, hGetChar, hClose)
 import System.IO.Error (isDoesNotExistError)
 import System.Process (runProcess, waitForProcess)
-import Test.HUnit (Assertion, assertFailure)
+import Test.Tasty.HUnit (Assertion, assertFailure)
 
 import Distribution.Compat.CreatePipe (createPipe)
 import Distribution.Simple.BuildPaths (exeExtension)
diff --git a/Cabal/tests/PackageTests/PathsModule/Executable/Check.hs b/Cabal/tests/PackageTests/PathsModule/Executable/Check.hs
index f2a567a161a721ded4584b0f5e45bf901948b773..79f1362c0e6dc22dcf3d4177a5109ed45327fdb1 100644
--- a/Cabal/tests/PackageTests/PathsModule/Executable/Check.hs
+++ b/Cabal/tests/PackageTests/PathsModule/Executable/Check.hs
@@ -3,10 +3,10 @@ module PackageTests.PathsModule.Executable.Check (suite) where
 import PackageTests.PackageTester
     (PackageSpec(..), assertBuildSucceeded, cabal_build)
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "PathsModule" </> "Executable"
             , distPref = Nothing
diff --git a/Cabal/tests/PackageTests/PathsModule/Library/Check.hs b/Cabal/tests/PackageTests/PathsModule/Library/Check.hs
index b3a4ebbf034ddfd2f88d27205e649e64501bcca2..1218b2478d4996e2c8f81176d0a8eeff1a4a5011 100644
--- a/Cabal/tests/PackageTests/PathsModule/Library/Check.hs
+++ b/Cabal/tests/PackageTests/PathsModule/Library/Check.hs
@@ -3,10 +3,10 @@ module PackageTests.PathsModule.Library.Check (suite) where
 import PackageTests.PackageTester
     (PackageSpec(..), assertBuildSucceeded, cabal_build)
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "PathsModule" </> "Library"
             , distPref = Nothing
diff --git a/Cabal/tests/PackageTests/PreProcess/Check.hs b/Cabal/tests/PackageTests/PreProcess/Check.hs
index 7ee52d7d6b934735f6c284a9a0b8b014f9bb2081..97facb4b291cf1e6f0d35ac14c94737ad3a14a64 100644
--- a/Cabal/tests/PackageTests/PreProcess/Check.hs
+++ b/Cabal/tests/PackageTests/PreProcess/Check.hs
@@ -3,10 +3,10 @@ module PackageTests.PreProcess.Check (suite) where
 import PackageTests.PackageTester
     (PackageSpec(..), assertBuildSucceeded, cabal_build)
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "PreProcess"
             , distPref = Nothing
diff --git a/Cabal/tests/PackageTests/ReexportedModules/Check.hs b/Cabal/tests/PackageTests/ReexportedModules/Check.hs
index 18487253c082be3b8298b7129ff335c4b25cbb68..c24cf4ff4df2419d310b09c4e5c8a8cafa76afd5 100644
--- a/Cabal/tests/PackageTests/ReexportedModules/Check.hs
+++ b/Cabal/tests/PackageTests/ReexportedModules/Check.hs
@@ -3,7 +3,7 @@ module PackageTests.ReexportedModules.Check where
 import Data.Version
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 import Data.Maybe
 import Data.List
 import Control.Monad
@@ -18,8 +18,8 @@ orFail err r = case find (all isSpace . snd) r of
 find' :: (a -> Bool) -> [a] -> Maybe a
 find' = find
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     -- ToDo: Turn this into a utility function
     (_, _, xs) <- run Nothing ghcPath [] ["--info"]
     let compat = (>= Version [7,9] [])
diff --git a/Cabal/tests/PackageTests/TemplateHaskell/Check.hs b/Cabal/tests/PackageTests/TemplateHaskell/Check.hs
index 11d2c0e0aaa7a293c76b6ed25b8f9c06dbbe9c25..531d6157af52105f4aa22e10b9343e05e2d7eccd 100644
--- a/Cabal/tests/PackageTests/TemplateHaskell/Check.hs
+++ b/Cabal/tests/PackageTests/TemplateHaskell/Check.hs
@@ -2,10 +2,10 @@ module PackageTests.TemplateHaskell.Check where
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-vanilla :: FilePath -> Test
-vanilla ghcPath = TestCase $ do
+vanilla :: FilePath -> Assertion
+vanilla ghcPath = do
   let spec = PackageSpec
           { directory = "PackageTests" </> "TemplateHaskell" </> "vanilla"
           , configOpts = []
@@ -14,8 +14,8 @@ vanilla ghcPath = TestCase $ do
   result <- cabal_build spec ghcPath
   assertBuildSucceeded result
 
-profiling :: FilePath -> Test
-profiling ghcPath = TestCase $ do
+profiling :: FilePath -> Assertion
+profiling ghcPath = do
    let flags = ["--enable-library-profiling"
 --                ,"--disable-library-vanilla"
                ,"--enable-profiling"]
@@ -27,8 +27,8 @@ profiling ghcPath = TestCase $ do
    result <- cabal_build spec ghcPath
    assertBuildSucceeded result
 
-dynamic :: FilePath -> Test
-dynamic ghcPath = TestCase $ do
+dynamic :: FilePath -> Assertion
+dynamic ghcPath = do
     let flags = ["--enable-shared"
 --                ,"--disable-library-vanilla"
                 ,"--enable-executable-dynamic"]
diff --git a/Cabal/tests/PackageTests/TestOptions/Check.hs b/Cabal/tests/PackageTests/TestOptions/Check.hs
index 4731d36de66b7d0b7f1475f867961ca9d1df182e..d3a27214706a327bdb113e535714645e2148d1aa 100644
--- a/Cabal/tests/PackageTests/TestOptions/Check.hs
+++ b/Cabal/tests/PackageTests/TestOptions/Check.hs
@@ -2,10 +2,10 @@ module PackageTests.TestOptions.Check where
 
 import PackageTests.PackageTester
 import System.FilePath
-import Test.HUnit
+import Test.Tasty.HUnit
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let spec = PackageSpec
             { directory = "PackageTests" </> "TestOptions"
             , configOpts = ["--enable-tests"]
diff --git a/Cabal/tests/PackageTests/TestStanza/Check.hs b/Cabal/tests/PackageTests/TestStanza/Check.hs
index 940cbcebad41d23fd78bd34ce6b4ca71f449e24a..e7877de1ffa0fa791e2b575d86bfc84c3b8236b0 100644
--- a/Cabal/tests/PackageTests/TestStanza/Check.hs
+++ b/Cabal/tests/PackageTests/TestStanza/Check.hs
@@ -1,6 +1,6 @@
 module PackageTests.TestStanza.Check where
 
-import Test.HUnit
+import Test.Tasty.HUnit
 import System.FilePath
 import qualified  Data.Map as Map
 import PackageTests.PackageTester
@@ -19,8 +19,8 @@ import Distribution.Compiler
     ( CompilerId(..), CompilerFlavor(..), unknownCompilerInfo, AbiTag(..) )
 import Distribution.Text
 
-suite :: FilePath -> Test
-suite ghcPath = TestCase $ do
+suite :: FilePath -> Assertion
+suite ghcPath = do
     let dir = "PackageTests" </> "TestStanza"
         pdFile = dir </> "my" <.> "cabal"
         spec = PackageSpec
diff --git a/Cabal/tests/PackageTests/TestSuiteExeV10/Check.hs b/Cabal/tests/PackageTests/TestSuiteExeV10/Check.hs
index ab5b4f709c559a987a2ef0057e77799712d5d8f1..40fcfe9a09b7766cd705191d1e7367466f09cf9f 100644
--- a/Cabal/tests/PackageTests/TestSuiteExeV10/Check.hs
+++ b/Cabal/tests/PackageTests/TestSuiteExeV10/Check.hs
@@ -5,10 +5,8 @@ import Control.Monad (when)
 import Data.Maybe (catMaybes)
 import System.Directory ( doesFileExist )
 import System.FilePath
-import qualified Test.Framework as TF
-import Test.Framework (testGroup)
-import Test.Framework.Providers.HUnit (hUnitTestToTests)
-import Test.HUnit hiding ( path )
+import Test.Tasty
+import Test.Tasty.HUnit
 
 import Distribution.Compiler (CompilerFlavor(..), CompilerId(..))
 import Distribution.PackageDescription (package)
@@ -25,15 +23,15 @@ import Distribution.Version (Version(..), orLaterVersion)
 
 import PackageTests.PackageTester
 
-checks :: FilePath -> [TF.Test]
+checks :: FilePath -> [TestTree]
 checks ghcPath =
-    [ hunit "Test" $ checkTest ghcPath ]
+    [ testCase "Test" $ checkTest ghcPath ]
     ++ hpcTestMatrix ghcPath ++
-    [ hunit "TestNoHpc/NoTix" $ checkTestNoHpcNoTix ghcPath
-    , hunit "TestNoHpc/NoMarkup" $ checkTestNoHpcNoMarkup ghcPath
+    [ testCase "TestNoHpc/NoTix" $ checkTestNoHpcNoTix ghcPath
+    , testCase "TestNoHpc/NoMarkup" $ checkTestNoHpcNoMarkup ghcPath
     ]
 
-hpcTestMatrix :: FilePath -> [TF.Test]
+hpcTestMatrix :: FilePath -> [TestTree]
 hpcTestMatrix ghcPath = do
     libProf <- [True, False]
     exeProf <- [True, False]
@@ -55,13 +53,13 @@ hpcTestMatrix ghcPath = do
             , enable exeDyn "executable-dynamic"
             , enable shared "shared"
             ]
-    return $ hunit name $ checkTestWithHpc ghcPath name opts
+    return $ testCase name $ checkTestWithHpc ghcPath name opts
 
 dir :: FilePath
 dir = "PackageTests" </> "TestSuiteExeV10"
 
-checkTest :: FilePath -> Test
-checkTest ghcPath = TestCase $ buildAndTest ghcPath "Default" [] []
+checkTest :: FilePath -> Assertion
+checkTest ghcPath = buildAndTest ghcPath "Default" [] []
 
 shouldExist :: FilePath -> Assertion
 shouldExist path = doesFileExist path >>= assertBool (path ++ " should exist")
@@ -71,8 +69,8 @@ shouldNotExist path =
     doesFileExist path >>= assertBool (path ++ " should exist") . not
 
 -- | Ensure that both .tix file and markup are generated if coverage is enabled.
-checkTestWithHpc :: FilePath -> String -> [String] -> Test
-checkTestWithHpc ghcPath name extraOpts = TestCase $ do
+checkTestWithHpc :: FilePath -> String -> [String] -> Assertion
+checkTestWithHpc ghcPath name extraOpts = do
     isCorrectVersion <- correctHpcVersion
     when isCorrectVersion $ do
         let distPref' = dir </> "dist-" ++ name
@@ -92,8 +90,8 @@ checkTestWithHpc ghcPath name extraOpts = TestCase $ do
             ]
 
 -- | Ensures that even if -fhpc is manually provided no .tix file is output.
-checkTestNoHpcNoTix :: FilePath -> Test
-checkTestNoHpcNoTix ghcPath = TestCase $ do
+checkTestNoHpcNoTix :: FilePath -> Assertion
+checkTestNoHpcNoTix ghcPath = do
     buildAndTest ghcPath "NoHpcNoTix" []
       [ "--ghc-option=-fhpc"
       , "--ghc-option=-hpcdir"
@@ -104,8 +102,8 @@ checkTestNoHpcNoTix ghcPath = TestCase $ do
 
 -- | Ensures that even if a .tix file happens to be left around
 -- markup isn't generated.
-checkTestNoHpcNoMarkup :: FilePath -> Test
-checkTestNoHpcNoMarkup ghcPath = TestCase $ do
+checkTestNoHpcNoMarkup :: FilePath -> Assertion
+checkTestNoHpcNoMarkup ghcPath = do
     let tixFile = tixFilePath "dist-NoHpcNoMarkup" Vanilla "test-Foo"
     buildAndTest ghcPath "NoHpcNoMarkup"
       [("HPCTIXFILE", Just tixFile)]
@@ -129,9 +127,6 @@ buildAndTest ghcPath name envOverrides flags = do
     testResult <- cabal_test spec envOverrides [] ghcPath
     assertTestSucceeded testResult
 
-hunit :: TF.TestName -> Test -> TF.Test
-hunit name = testGroup name . hUnitTestToTests
-
 -- | Checks for a suitable HPC version for testing.
 correctHpcVersion :: IO Bool
 correctHpcVersion = do
diff --git a/Cabal/tests/UnitTests.hs b/Cabal/tests/UnitTests.hs
index ef99dd239e281bc8ffc0771606de99376b4c9966..fe78268b79d99991394642dcb7c829db478916f2 100644
--- a/Cabal/tests/UnitTests.hs
+++ b/Cabal/tests/UnitTests.hs
@@ -2,15 +2,14 @@ module Main
     ( main
     ) where
 
-import System.IO (BufferMode(NoBuffering), hSetBuffering, stdout)
-import Test.Framework
+import Test.Tasty
 
 import qualified UnitTests.Distribution.Compat.CreatePipe
 import qualified UnitTests.Distribution.Compat.ReadP
 import qualified UnitTests.Distribution.Utils.NubList
 
-tests :: [Test]
-tests =
+tests :: TestTree
+tests = testGroup "Unit Tests" $
     [ testGroup "Distribution.Compat.ReadP"
         UnitTests.Distribution.Compat.ReadP.tests
     , testGroup "Distribution.Compat.CreatePipe"
@@ -20,8 +19,4 @@ tests =
     ]
 
 main :: IO ()
-main = do
-    -- WORKAROUND: disable buffering on stdout to get streaming test logs
-    -- test providers _should_ do this themselves
-    hSetBuffering stdout NoBuffering
-    defaultMain tests
+main = defaultMain tests
diff --git a/Cabal/tests/UnitTests/Distribution/Compat/CreatePipe.hs b/Cabal/tests/UnitTests/Distribution/Compat/CreatePipe.hs
index a9f8db5cf3032218839ecc7d0a382e2c955de376..621670a88ffccdb1a474cc30dee2d5f100c7604e 100644
--- a/Cabal/tests/UnitTests/Distribution/Compat/CreatePipe.hs
+++ b/Cabal/tests/UnitTests/Distribution/Compat/CreatePipe.hs
@@ -2,11 +2,10 @@ module UnitTests.Distribution.Compat.CreatePipe (tests) where
 
 import Distribution.Compat.CreatePipe
 import System.IO (hClose, hGetContents, hPutStr, hSetEncoding, localeEncoding)
-import Test.Framework
-import Test.Framework.Providers.HUnit
-import Test.HUnit hiding (Test)
+import Test.Tasty
+import Test.Tasty.HUnit
 
-tests :: [Test]
+tests :: [TestTree]
 tests = [testCase "Locale Encoding" case_Locale_Encoding]
 
 case_Locale_Encoding :: Assertion
diff --git a/Cabal/tests/UnitTests/Distribution/Compat/ReadP.hs b/Cabal/tests/UnitTests/Distribution/Compat/ReadP.hs
index 0998edf919b2fa0dd9a0a4c7b71cc38add47de0a..6fefc3a4012c1b4c90e317aceac6e2f680e30b60 100644
--- a/Cabal/tests/UnitTests/Distribution/Compat/ReadP.hs
+++ b/Cabal/tests/UnitTests/Distribution/Compat/ReadP.hs
@@ -20,10 +20,10 @@ module UnitTests.Distribution.Compat.ReadP
 
 import Data.List
 import Distribution.Compat.ReadP
-import Test.Framework
-import Test.Framework.Providers.QuickCheck2
+import Test.Tasty
+import Test.Tasty.QuickCheck
 
-tests :: [Test]
+tests :: [TestTree]
 tests =
     [ testProperty "Get Nil" prop_Get_Nil
     , testProperty "Get Cons" prop_Get_Cons
diff --git a/Cabal/tests/UnitTests/Distribution/Utils/NubList.hs b/Cabal/tests/UnitTests/Distribution/Utils/NubList.hs
index b0093cec75b224544d12c86ee882f06a729d54ad..fc3c3b5ec17887b5ef6b7a1c492b5aaa96588ba5 100644
--- a/Cabal/tests/UnitTests/Distribution/Utils/NubList.hs
+++ b/Cabal/tests/UnitTests/Distribution/Utils/NubList.hs
@@ -7,12 +7,11 @@ module UnitTests.Distribution.Utils.NubList
 import Data.Monoid
 #endif
 import Distribution.Utils.NubList
-import Test.Framework
-import Test.Framework.Providers.HUnit (testCase)
-import Test.Framework.Providers.QuickCheck2
-import Test.HUnit (Assertion, assertBool)
+import Test.Tasty
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
 
-tests :: [Test]
+tests :: [TestTree]
 tests =
     [ testCase "Numlist retains ordering" testOrdering
     , testCase "Numlist removes duplicates" testDeDupe
diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal
index d54ae0e26a828f5078329aa963d7e4dec6781836..865ad15992770bc09c923c01ac5dae917f7315e3 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -197,10 +197,9 @@ Test-Suite unit-tests
         HTTP,
         zlib,
 
-        test-framework,
-        test-framework-hunit,
-        test-framework-quickcheck2 >= 0.3,
-        HUnit,
+        tasty,
+        tasty-hunit,
+        tasty-quickcheck,
         QuickCheck >= 2.5
 
   if flag(old-directory)
@@ -235,8 +234,7 @@ test-suite package-tests
     PackageTests.PackageTester
   build-depends:
     Cabal,
-    HUnit,
-    QuickCheck >= 2.1.0.1 && < 2.8,
+    QuickCheck >= 2.1.0.1 && < 2.9,
     base,
     bytestring,
     directory,
@@ -244,9 +242,9 @@ test-suite package-tests
     filepath,
     process,
     regex-posix,
-    test-framework,
-    test-framework-hunit,
-    test-framework-quickcheck2 >= 0.2.12
+    tasty,
+    tasty-hunit,
+    tasty-quickcheck
 
   if os(windows)
     build-depends: Win32 >= 2 && < 3
diff --git a/cabal-install/tests/PackageTests.hs b/cabal-install/tests/PackageTests.hs
index d4a1c837e6b2c07cb234a11140de4c5973c58c65..f4d10ef0cf9f3d4f68f9bf1c48f5314623654583 100644
--- a/cabal-install/tests/PackageTests.hs
+++ b/cabal-install/tests/PackageTests.hs
@@ -23,7 +23,7 @@ import System.Directory
         ( canonicalizePath, getCurrentDirectory, setCurrentDirectory
         , removeFile, doesFileExist )
 import System.FilePath ((</>))
-import Test.Framework (Test, defaultMain, testGroup)
+import Test.Tasty (TestTree, defaultMain, testGroup)
 import Control.Monad ( when )
 
 -- Module containing common test code.
@@ -39,8 +39,8 @@ import qualified PackageTests.MultipleSource.Check
 
 -- List of tests to run. Each test will be called with the path to the
 -- cabal binary to use.
-tests :: PackageTests.PackageTester.TestsPaths -> [Test]
-tests paths =
+tests :: PackageTests.PackageTester.TestsPaths -> TestTree
+tests paths = testGroup "Package Tests" $
     [ testGroup "Freeze"         $ PackageTests.Freeze.Check.tests         paths
     , testGroup "Exec"           $ PackageTests.Exec.Check.tests           paths
     , testGroup "MultipleSource" $ PackageTests.MultipleSource.Check.tests paths
diff --git a/cabal-install/tests/PackageTests/Exec/Check.hs b/cabal-install/tests/PackageTests/Exec/Check.hs
index 4e01272013fb7d4e4ce9b45d75f53fc290e05d1d..2e811540ba41df58d714c66d0f149a20f7f47041 100644
--- a/cabal-install/tests/PackageTests/Exec/Check.hs
+++ b/cabal-install/tests/PackageTests/Exec/Check.hs
@@ -6,9 +6,8 @@ module PackageTests.Exec.Check
 
 import PackageTests.PackageTester
 
-import Test.Framework                 as TF (Test)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit                     (assertBool)
+import Test.Tasty
+import Test.Tasty.HUnit
 
 #if !MIN_VERSION_base(4,8,0)
 import Control.Applicative ((<$>))
@@ -21,7 +20,7 @@ import System.Directory (getDirectoryContents)
 dir :: FilePath
 dir = packageTestsDirectory </> "Exec"
 
-tests :: TestsPaths -> [TF.Test]
+tests :: TestsPaths -> [TestTree]
 tests paths =
     [ testCase "exits with failure if given no argument" $ do
           result <- cabal_exec paths dir []
diff --git a/cabal-install/tests/PackageTests/Freeze/Check.hs b/cabal-install/tests/PackageTests/Freeze/Check.hs
index bfcbea8f15df49e70973550e7f01f1877670cfa4..00c87f361926f1d63d16c9aa8a59f4aa9abb6443 100644
--- a/cabal-install/tests/PackageTests/Freeze/Check.hs
+++ b/cabal-install/tests/PackageTests/Freeze/Check.hs
@@ -6,9 +6,8 @@ module PackageTests.Freeze.Check
 
 import PackageTests.PackageTester
 
-import Test.Framework                 as TF (Test)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit                     (assertBool)
+import Test.Tasty
+import Test.Tasty.HUnit
 
 import qualified Control.Exception.Extensible as E
 import Data.List (intercalate, isInfixOf)
@@ -19,7 +18,7 @@ import System.IO.Error (isDoesNotExistError)
 dir :: FilePath
 dir = packageTestsDirectory </> "Freeze"
 
-tests :: TestsPaths -> [TF.Test]
+tests :: TestsPaths -> [TestTree]
 tests paths =
     [ testCase "runs without error" $ do
           removeCabalConfig
diff --git a/cabal-install/tests/PackageTests/MultipleSource/Check.hs b/cabal-install/tests/PackageTests/MultipleSource/Check.hs
index b9ba2189ab40a72c496e5a94433e09b714087405..0fe6361299fb7780725b54b2aa2bc5082cca16d4 100644
--- a/cabal-install/tests/PackageTests/MultipleSource/Check.hs
+++ b/cabal-install/tests/PackageTests/MultipleSource/Check.hs
@@ -5,8 +5,8 @@ module PackageTests.MultipleSource.Check
 
 import PackageTests.PackageTester
 
-import Test.Framework                 as TF (Test)
-import Test.Framework.Providers.HUnit (testCase)
+import Test.Tasty
+import Test.Tasty.HUnit
 
 import Control.Monad    (void, when)
 import System.Directory (doesDirectoryExist)
@@ -15,7 +15,7 @@ import System.FilePath  ((</>))
 dir :: FilePath
 dir = packageTestsDirectory </> "MultipleSource"
 
-tests :: TestsPaths -> [TF.Test]
+tests :: TestsPaths -> [TestTree]
 tests paths =
     [ testCase "finds second source of multiple source" $ do
           sandboxExists <- doesDirectoryExist $ dir </> ".cabal-sandbox"
diff --git a/cabal-install/tests/PackageTests/PackageTester.hs b/cabal-install/tests/PackageTests/PackageTester.hs
index eb29499b3452563f11608936d6f53bd056debde5..2068099b6d58c415dd0d76dedf572719008424aa 100644
--- a/cabal-install/tests/PackageTests/PackageTester.hs
+++ b/cabal-install/tests/PackageTests/PackageTester.hs
@@ -50,7 +50,7 @@ import System.FilePath ( (<.>)  )
 import System.IO (hClose, hGetChar, hIsEOF)
 import System.IO.Error (isDoesNotExistError)
 import System.Process (runProcess, waitForProcess)
-import Test.HUnit (Assertion, assertFailure)
+import Test.Tasty.HUnit (Assertion, assertFailure)
 
 import Distribution.Simple.BuildPaths (exeExtension)
 import Distribution.Simple.Utils (printRawCommandAndArgs)
diff --git a/cabal-install/tests/UnitTests.hs b/cabal-install/tests/UnitTests.hs
index a0d47d518b797e912dcd026aed949b84bf7688dc..f457d266d4f4928b23b6d99082ada062be872b87 100644
--- a/cabal-install/tests/UnitTests.hs
+++ b/cabal-install/tests/UnitTests.hs
@@ -1,15 +1,15 @@
 module Main
        where
 
-import Test.Framework
+import Test.Tasty
 
 import qualified UnitTests.Distribution.Client.Sandbox
 import qualified UnitTests.Distribution.Client.UserConfig
 import qualified UnitTests.Distribution.Client.Targets
 import qualified UnitTests.Distribution.Client.Dependency.Modular.PSQ
 
-tests :: [Test]
-tests = [
+tests :: TestTree
+tests = testGroup "Unit Tests" [
    testGroup "UnitTests.Distribution.Client.UserConfig"
        UnitTests.Distribution.Client.UserConfig.tests
   ,testGroup "Distribution.Client.Sandbox"
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular/PSQ.hs b/cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular/PSQ.hs
index c3dc72eac114828fc1e8441d5e03d6c13f83ffee..b24e028a2d1e09f4bd8f1f266923443c1a7d2a66 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular/PSQ.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/Dependency/Modular/PSQ.hs
@@ -4,10 +4,10 @@ module UnitTests.Distribution.Client.Dependency.Modular.PSQ (
 
 import Distribution.Client.Dependency.Modular.PSQ
 
-import Test.Framework as TF (Test)
-import Test.Framework.Providers.QuickCheck2
+import Test.Tasty
+import Test.Tasty.QuickCheck
 
-tests :: [TF.Test]
+tests :: [TestTree]
 tests = [ testProperty "splitsAltImplementation" splitsTest
         ]
 
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Sandbox.hs b/cabal-install/tests/UnitTests/Distribution/Client/Sandbox.hs
index 059e6e1e710ca63775d6eb2707095f7120b4f2d8..3bf2d28e114d6d21817da287a846533c6a5d64ca 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/Sandbox.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/Sandbox.hs
@@ -2,15 +2,14 @@ module UnitTests.Distribution.Client.Sandbox (
   tests
   ) where
 
-import Distribution.Client.Sandbox    (withSandboxBinDirOnSearchPath)
+import Distribution.Client.Sandbox (withSandboxBinDirOnSearchPath)
 
-import Test.Framework                 as TF (Test)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit                     (Assertion, assertBool, assertEqual)
+import Test.Tasty
+import Test.Tasty.HUnit
 
-import System.FilePath                (getSearchPath, (</>))
+import System.FilePath             (getSearchPath, (</>))
 
-tests :: [TF.Test]
+tests :: [TestTree]
 tests = [ testCase "sandboxBinDirOnSearchPath" sandboxBinDirOnSearchPathTest
         , testCase "oldSearchPathRestored" oldSearchPathRestoreTest
         ]
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Targets.hs b/cabal-install/tests/UnitTests/Distribution/Client/Targets.hs
index e641c50a4200c6cd71b007a22cfde6ef70bad6c2..8e42e5add7e60f8a6489a72ae30b79fbf4e388b8 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/Targets.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/Targets.hs
@@ -8,13 +8,12 @@ import Distribution.Package            (PackageName (..))
 import Distribution.ParseUtils         (parseCommaList)
 import Distribution.Text               (parse)
 
-import Test.Framework                  as TF (Test)
-import Test.Framework.Providers.HUnit  (testCase)
-import Test.HUnit                      (Assertion, assertEqual)
+import Test.Tasty
+import Test.Tasty.HUnit
 
 import Data.Char                       (isSpace)
 
-tests :: [TF.Test]
+tests :: [TestTree]
 tests = [ testCase "readUserConstraint" readUserConstraintTest
         , testCase "parseUserConstraint" parseUserConstraintTest
         , testCase "readUserConstraints" readUserConstraintsTest
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs
index 286172c40ef6bfa3471b20a985b28956bee1095c..8df77576c0eebdc91d51b90e7def7dc2e08816f8 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/UserConfig.hs
@@ -11,9 +11,8 @@ import Data.Monoid
 import System.Directory (getCurrentDirectory, removeDirectoryRecursive, createDirectoryIfMissing)
 import System.FilePath (takeDirectory)
 
-import Test.Framework as TF (Test)
-import Test.Framework.Providers.HUnit (testCase)
-import Test.HUnit (Assertion, assertBool)
+import Test.Tasty
+import Test.Tasty.HUnit
 
 import Distribution.Client.Compat.Environment (lookupEnv, setEnv)
 import Distribution.Client.Config
@@ -22,7 +21,7 @@ import Distribution.Client.Setup (GlobalFlags (..), InstallFlags (..))
 import Distribution.Simple.Setup (ConfigFlags (..), fromFlag)
 import Distribution.Verbosity (silent)
 
-tests :: [TF.Test]
+tests :: [TestTree]
 tests = [ testCase "nullDiffOnCreate" nullDiffOnCreateTest
         , testCase "canDetectDifference" canDetectDifference
         , testCase "canUpdateConfig" canUpdateConfig