fix broken tests
diff --git a/tests/TestTestRunner.cpp b/tests/TestTestRunner.cpp
index fa05356..8a69241 100644
--- a/tests/TestTestRunner.cpp
+++ b/tests/TestTestRunner.cpp
@@ -1,328 +1,314 @@
-#include "UnitTest++/UnitTestPP.h"
+#include "../UnitTest++.h"
 #include "RecordingReporter.h"
-#include "UnitTest++/ReportAssert.h"
-#include "UnitTest++/TestList.h"
-#include "UnitTest++/TimeHelpers.h"
-#include "UnitTest++/TimeConstraint.h"
-#include "UnitTest++/ReportAssertImpl.h"
+#include "../ReportAssert.h"
+#include "../TestList.h"
+#include "../TimeHelpers.h"
+#include "../TimeConstraint.h"
 
 using namespace UnitTest;
 
 namespace
 {
-
-struct TestRunnerFixture
-{
-	TestRunnerFixture()
-		: runner(reporter)
-	{
-		s_testRunnerFixtureTestResults = runner.GetTestResults();
-	}
-
-	static TestResults* s_testRunnerFixtureTestResults;
-
-    RecordingReporter reporter;
-    TestList list;
-	TestRunner runner;
-};
-
-TestResults* TestRunnerFixture::s_testRunnerFixtureTestResults = NULL;
-
-struct MockTest : public Test
-{
-    MockTest(char const* testName, bool const success_, bool const assert_, int const count_ = 1)
+    
+    struct MockTest : public Test
+    {
+        MockTest(char const* testName, bool const success_, bool const assert_, int const count_ = 1)
         : Test(testName)
         , success(success_)
         , asserted(assert_)
         , count(count_)
-    {
-		m_isMockTest = true;
-    }
-
-    virtual void RunImpl() const
-    {
-		TestResults* testResults = TestRunnerFixture::s_testRunnerFixtureTestResults;
-
-        for (int i=0; i < count; ++i)
         {
-            if (asserted)
-				Detail::ReportAssertEx(testResults, &m_details, "desc", "file", 0);
-            else if (!success)
-				testResults->OnTestFailure(m_details, "message");
         }
-    }
-
-    bool const success;
-    bool const asserted;
-    int const count;
-};
-
-TEST_FIXTURE(TestRunnerFixture, TestStartIsReportedCorrectly)
-{
-    MockTest test("goodtest", true, false);
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(1, reporter.testRunCount);
-    CHECK_EQUAL("goodtest", reporter.lastStartedTest);
-}
-
-TEST_FIXTURE(TestRunnerFixture, TestFinishIsReportedCorrectly)
-{
-    MockTest test("goodtest", true, false);
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(1, reporter.testFinishedCount);
-    CHECK_EQUAL("goodtest", reporter.lastFinishedTest);
-}
-
-class SlowTest : public Test
-{
-public:
-    SlowTest() : Test("slow", "somesuite", "filename", 123) {}
-    virtual void RunImpl() const
+        
+        virtual void RunImpl() const
+        {
+            TestResults& testResults_ = *CurrentTest::Results();
+            for (int i=0; i < count; ++i)
+            {
+                if (asserted)
+                    ReportAssert("desc", "file", 0);
+                else if (!success)
+                    testResults_.OnTestFailure(m_details, "message");
+            }
+        }
+        
+        bool const success;
+        bool const asserted;
+        int const count;
+    };
+    
+    struct FixtureBase {
+        explicit FixtureBase() : runner(reporter) { }
+        template <class Predicate>
+        int RunTestsIf(TestList const& list, char const* suiteName,
+                       const Predicate& predicate, int maxTestTimeInMs)
+        {
+            TestResults* oldResults = CurrentTest::Results();
+            const TestDetails* oldDetails = CurrentTest::Details();
+            int result = runner.RunTestsIf(list, suiteName, predicate, maxTestTimeInMs);
+            CurrentTest::Results() = oldResults;
+            CurrentTest::Details() = oldDetails;
+            return result;
+        }
+        TestRunner runner;
+        RecordingReporter reporter;
+    };
+    
+    struct TestRunnerFixture : public FixtureBase
     {
-        TimeHelpers::SleepMs(20);
-    }
-};
-
-TEST_FIXTURE(TestRunnerFixture, TestFinishIsCalledWithCorrectTime)
-{
-    SlowTest test;
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK(reporter.lastFinishedTestTime >= 0.005f && reporter.lastFinishedTestTime <= 0.050f);
-}
-
-TEST_FIXTURE(TestRunnerFixture, FailureCountIsZeroWhenNoTestsAreRun)
-{
-	CHECK_EQUAL(0, runner.RunTestsIf(list, NULL, True(), 0));
-    CHECK_EQUAL(0, reporter.testRunCount);
-    CHECK_EQUAL(0, reporter.testFailedCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, CallsReportFailureOncePerFailingTest)
-{
-    MockTest test1("test", false, false);
-    list.Add(&test1);
-    MockTest test2("test", true, false);
-    list.Add(&test2);
-    MockTest test3("test", false, false);
-    list.Add(&test3);
-
-	CHECK_EQUAL(2, runner.RunTestsIf(list, NULL, True(), 0));
-    CHECK_EQUAL(2, reporter.testFailedCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, TestsThatAssertAreReportedAsFailing)
-{
-    MockTest test("test", true, true);
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(1, reporter.testFailedCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, AssertingTestAbortsAsSoonAsAssertIsHit)
-{
-	MockTest test("test", false, true, 3);
-	list.Add(&test);
-	runner.RunTestsIf(list, NULL, True(), 0);
-	CHECK_EQUAL(1, reporter.summaryFailureCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfTestCount)
-{
-    MockTest test1("test", true, false);
-    MockTest test2("test", true, false);
-    MockTest test3("test", true, false);
-    list.Add(&test1);
-    list.Add(&test2);
-    list.Add(&test3);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(3, reporter.summaryTotalTestCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfFailedTests)
-{
-    MockTest test1("test", false, false, 2);
-    MockTest test2("test", true, false);
-    MockTest test3("test", false, false, 3);
-    list.Add(&test1);
-    list.Add(&test2);
-    list.Add(&test3);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(2, reporter.summaryFailedTestCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfFailures)
-{
-    MockTest test1("test", false, false, 2);
-    MockTest test2("test", true, false);
-    MockTest test3("test", false, false, 3);
-    list.Add(&test1);
-    list.Add(&test2);
-    list.Add(&test3);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-	CHECK_EQUAL(5, reporter.summaryFailureCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, SlowTestPassesForHighTimeThreshold)
-{
-    SlowTest test;
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(0, reporter.testFailedCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, SlowTestFailsForLowTimeThreshold)
-{
-    SlowTest test;
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 3);
-    CHECK_EQUAL(1, reporter.testFailedCount);
-}
-
-TEST_FIXTURE(TestRunnerFixture, SlowTestHasCorrectFailureInformation)
-{
-    SlowTest test;
-    list.Add(&test);
-
-	runner.RunTestsIf(list, NULL, True(), 3);
-
-	using namespace std;
-
-    CHECK_EQUAL(test.m_details.testName, reporter.lastFailedTest);
-    CHECK(strstr(test.m_details.filename, reporter.lastFailedFile));
-    CHECK_EQUAL(test.m_details.lineNumber, reporter.lastFailedLine);
-
-	CHECK(strstr(reporter.lastFailedMessage, "Global time constraint failed"));
-    CHECK(strstr(reporter.lastFailedMessage, "3ms"));
-}
-
-
-namespace SlowTestHelper
-{
-    TestRunnerFixture testRunnerFixture;
-
-    TEST_EX(SlowExemptedTest, testRunnerFixture.list)
+        TestList list;
+    };
+    
+    TEST_FIXTURE(TestRunnerFixture, TestStartIsReportedCorrectly)
     {
-        UNITTEST_TIME_CONSTRAINT_EXEMPT();
-        TimeHelpers::SleepMs(20);
+        MockTest test("goodtest", true, false);
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(1, reporter.testRunCount);
+        CHECK_EQUAL("goodtest", reporter.lastStartedTest);
     }
     
-    class Fixture {};
-    
-    TEST_FIXTURE_EX(Fixture, SlowExemptedTest, testRunnerFixture.list)
+    TEST_FIXTURE(TestRunnerFixture, TestFinishIsReportedCorrectly)
     {
-        UNITTEST_TIME_CONSTRAINT_EXEMPT();
-        TimeHelpers::SleepMs(20);
+        MockTest test("goodtest", true, false);
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(1, reporter.testFinishedCount);
+        CHECK_EQUAL("goodtest", reporter.lastFinishedTest);
     }
-}
-
-TEST(SlowTestsWithTimeExemptionPass)
-{
-    SlowTestHelper::testRunnerFixture.runner.RunTestsIf(SlowTestHelper::testRunnerFixture.list, NULL, True(), 3);
-    CHECK_EQUAL(0, SlowTestHelper::testRunnerFixture.reporter.testFailedCount);
-}
-
-struct TestSuiteFixture
-{
-    TestSuiteFixture()
+    
+    class SlowTest : public Test
+    {
+    public:
+        SlowTest() : Test("slow", "somesuite", "filename", 123) {}
+        virtual void RunImpl() const
+        {
+            TimeHelpers::SleepMs(20);
+        }
+    };
+    
+    TEST_FIXTURE(TestRunnerFixture, TestFinishIsCalledWithCorrectTime)
+    {
+        SlowTest test;
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK(reporter.lastFinishedTestTime >= 0.005f && reporter.lastFinishedTestTime <= 0.050f);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, FailureCountIsZeroWhenNoTestsAreRun)
+    {
+        CHECK_EQUAL(0, RunTestsIf(list, NULL, True(), 0));
+        CHECK_EQUAL(0, reporter.testRunCount);
+        CHECK_EQUAL(0, reporter.testFailedCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, CallsReportFailureOncePerFailingTest)
+    {
+        MockTest test1("test", false, false);
+        list.Add(&test1);
+        MockTest test2("test", true, false);
+        list.Add(&test2);
+        MockTest test3("test", false, false);
+        list.Add(&test3);
+        
+        CHECK_EQUAL(2, RunTestsIf(list, NULL, True(), 0));
+        CHECK_EQUAL(2, reporter.testFailedCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, TestsThatAssertAreReportedAsFailing)
+    {
+        MockTest test("test", true, true);
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(1, reporter.testFailedCount);
+    }
+    
+    
+    TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfTestCount)
+    {
+        MockTest test1("test", true, false);
+        MockTest test2("test", true, false);
+        MockTest test3("test", true, false);
+        list.Add(&test1);
+        list.Add(&test2);
+        list.Add(&test3);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(3, reporter.summaryTotalTestCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfFailedTests)
+    {
+        MockTest test1("test", false, false, 2);
+        MockTest test2("test", true, false);
+        MockTest test3("test", false, false, 3);
+        list.Add(&test1);
+        list.Add(&test2);
+        list.Add(&test3);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(2, reporter.summaryFailedTestCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, ReporterNotifiedOfFailures)
+    {
+        MockTest test1("test", false, false, 2);
+        MockTest test2("test", true, false);
+        MockTest test3("test", false, false, 3);
+        list.Add(&test1);
+        list.Add(&test2);
+        list.Add(&test3);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(5, reporter.summaryFailureCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, SlowTestPassesForHighTimeThreshold)
+    {
+        SlowTest test;
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(0, reporter.testFailedCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, SlowTestFailsForLowTimeThreshold)
+    {
+        SlowTest test;
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 3);
+        CHECK_EQUAL(1, reporter.testFailedCount);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, SlowTestHasCorrectFailureInformation)
+    {
+        SlowTest test;
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 3);
+        
+        using namespace std;
+        
+        CHECK_EQUAL(test.m_details.testName, reporter.lastFailedTest);
+        CHECK(strstr(test.m_details.filename, reporter.lastFailedFile));
+        CHECK_EQUAL(test.m_details.lineNumber, reporter.lastFailedLine);
+        
+        CHECK(strstr(reporter.lastFailedMessage, "Global time constraint failed"));
+        CHECK(strstr(reporter.lastFailedMessage, "3ms"));
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, SlowTestWithTimeExemptionPasses)
+    {
+        class SlowExemptedTest : public Test
+        {
+        public:
+            SlowExemptedTest() : Test("slowexempted", "", 0) {}
+            virtual void RunImpl() const
+            {
+                UNITTEST_TIME_CONSTRAINT_EXEMPT();
+                TimeHelpers::SleepMs(20);
+            }
+        };
+        
+        SlowExemptedTest test;
+        list.Add(&test);
+        
+        RunTestsIf(list, NULL, True(), 3);
+        CHECK_EQUAL(0, reporter.testFailedCount);
+    }
+    
+    struct TestSuiteFixture : FixtureBase
+    {
+        TestSuiteFixture()
         : test1("TestInDefaultSuite")
         , test2("TestInOtherSuite", "OtherSuite")
         , test3("SecondTestInDefaultSuite")
-		, runner(reporter)
-    {
-        list.Add(&test1);
-        list.Add(&test2);
-    }
-
-    Test test1;
-    Test test2;
-    Test test3;
-    RecordingReporter reporter;
-    TestList list;
-	TestRunner runner;
-};
-
-TEST_FIXTURE(TestSuiteFixture, TestRunnerRunsAllSuitesIfNullSuiteIsPassed)
-{
-	runner.RunTestsIf(list, NULL, True(), 0);
-    CHECK_EQUAL(2, reporter.summaryTotalTestCount);
-}
-
-TEST_FIXTURE(TestSuiteFixture,TestRunnerRunsOnlySpecifiedSuite)
-{
-	runner.RunTestsIf(list, "OtherSuite", True(), 0);
-    CHECK_EQUAL(1, reporter.summaryTotalTestCount);
-    CHECK_EQUAL("TestInOtherSuite", reporter.lastFinishedTest);
-}
-
-struct RunTestIfNameIs
-{
-	RunTestIfNameIs(char const* name_)
-	: name(name_)
-	{		
-	}
-	
-	bool operator()(const Test* const test) const
-	{
-		using namespace std;
-		return (0 == strcmp(test->m_details.testName, name));
-	}
-	
-	char const* name;
-};
-
-TEST(TestMockPredicateBehavesCorrectly)
-{
-	RunTestIfNameIs predicate("pass");
-	
-	Test pass("pass");
-	Test fail("fail");
-	
-	CHECK(predicate(&pass));
-	CHECK(!predicate(&fail));	
-}
-
-TEST_FIXTURE(TestRunnerFixture, TestRunnerRunsTestsThatPassPredicate)
-{
-    Test should_run("goodtest");
-    list.Add(&should_run);
-
-    Test should_not_run("badtest");
-	list.Add(&should_not_run);
- 
-	runner.RunTestsIf(list, NULL, RunTestIfNameIs("goodtest"), 0);
-	CHECK_EQUAL(1, reporter.testRunCount);
-    CHECK_EQUAL("goodtest", reporter.lastStartedTest);
-}
-
-TEST_FIXTURE(TestRunnerFixture, TestRunnerOnlyRunsTestsInSpecifiedSuiteAndThatPassPredicate)
-{
-    Test runningTest1("goodtest", "suite");
-    Test skippedTest2("goodtest");
-    Test skippedTest3("badtest", "suite");
-    Test skippedTest4("badtest");
+        {
+            list.Add(&test1);
+            list.Add(&test2);
+        }
+        
+        Test test1;
+        Test test2;
+        Test test3;
+        TestList list;
+    };
     
-    list.Add(&runningTest1);
-    list.Add(&skippedTest2);
-    list.Add(&skippedTest3);
-    list.Add(&skippedTest4);   
-
-	runner.RunTestsIf(list, "suite", RunTestIfNameIs("goodtest"), 0);
-
-	CHECK_EQUAL(1, reporter.testRunCount);
-    CHECK_EQUAL("goodtest", reporter.lastStartedTest); 
-    CHECK_EQUAL("suite", reporter.lastStartedSuite);    
-}
-
-}
+    TEST_FIXTURE(TestSuiteFixture, TestRunnerRunsAllSuitesIfNullSuiteIsPassed)
+    {
+        RunTestsIf(list, NULL, True(), 0);
+        CHECK_EQUAL(2, reporter.summaryTotalTestCount);
+    }
+    
+    TEST_FIXTURE(TestSuiteFixture,TestRunnerRunsOnlySpecifiedSuite)
+    {
+        RunTestsIf(list, "OtherSuite", True(), 0);
+        CHECK_EQUAL(1, reporter.summaryTotalTestCount);
+        CHECK_EQUAL("TestInOtherSuite", reporter.lastFinishedTest);
+    }
+    
+    struct RunTestIfNameIs
+    {
+        RunTestIfNameIs(char const* name_)
+        : name(name_)
+        {
+        }
+        
+        bool operator()(const Test* const test) const
+        {
+            using namespace std;
+            return (0 == strcmp(test->m_details.testName, name));
+        }
+        
+        char const* name;
+    };
+    
+    TEST(TestMockPredicateBehavesCorrectly)
+    {
+        RunTestIfNameIs predicate("pass");
+        
+        Test pass("pass");
+        Test fail("fail");
+        
+        CHECK(predicate(&pass));
+        CHECK(!predicate(&fail));	
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, TestRunnerRunsTestsThatPassPredicate)
+    {
+        Test should_run("goodtest");
+        list.Add(&should_run);
+        
+        Test should_not_run("badtest");
+        list.Add(&should_not_run);
+        
+        RunTestsIf(list, NULL, RunTestIfNameIs("goodtest"), 0);
+        CHECK_EQUAL(1, reporter.testRunCount);
+        CHECK_EQUAL("goodtest", reporter.lastStartedTest);
+    }
+    
+    TEST_FIXTURE(TestRunnerFixture, TestRunnerOnlyRunsTestsInSpecifiedSuiteAndThatPassPredicate)
+    {
+        Test runningTest1("goodtest", "suite");
+        Test skippedTest2("goodtest");
+        Test skippedTest3("badtest", "suite");
+        Test skippedTest4("badtest");
+        
+        list.Add(&runningTest1);
+        list.Add(&skippedTest2);
+        list.Add(&skippedTest3);
+        list.Add(&skippedTest4);
+        
+        RunTestsIf(list, "suite", RunTestIfNameIs("goodtest"), 0);
+        
+        CHECK_EQUAL(1, reporter.testRunCount);
+        CHECK_EQUAL("goodtest", reporter.lastStartedTest);
+        CHECK_EQUAL("suite", reporter.lastStartedSuite);
+    }
+    
+}
\ No newline at end of file