From 2c6411e70a9325b8fdaf5051ad20cfe9b8c5a8be Mon Sep 17 00:00:00 2001 From: Phil Nash Date: Fri, 23 Oct 2015 18:34:16 +0100 Subject: [PATCH] Tweaks --- projects/SelfTest/PartTrackerTests.cpp | 147 ++++++++++++------------- 1 file changed, 71 insertions(+), 76 deletions(-) diff --git a/projects/SelfTest/PartTrackerTests.cpp b/projects/SelfTest/PartTrackerTests.cpp index 6323f376..19a9c806 100644 --- a/projects/SelfTest/PartTrackerTests.cpp +++ b/projects/SelfTest/PartTrackerTests.cpp @@ -20,29 +20,29 @@ namespace Catch { - struct IContainerPart; - struct ITrackedPart : SharedImpl<> { virtual ~ITrackedPart() {} + + // queries virtual std::string name() const = 0; - virtual bool isUnstarted() const = 0; - virtual bool isCompleteOrFailed() const = 0; - virtual bool isComplete() const = 0; + virtual bool hasStarted() const = 0; // true even if ended + virtual bool hasEnded() const = 0; + virtual bool didCompleteSuccessfully() const = 0; virtual bool isOpen() const = 0; - virtual IContainerPart& parent() = 0; + virtual ITrackedPart& parent() = 0; + // actions virtual void close() = 0; virtual void fail() = 0; - }; - - struct IContainerPart : ITrackedPart { + virtual void addChild( Ptr const& child ) = 0; virtual ITrackedPart* findChild( std::string const& name ) = 0; virtual void openChild() = 0; virtual void childFailed() = 0; + }; - + class TrackerContext { @@ -52,8 +52,8 @@ namespace Catch CompletedCycle }; - Ptr m_rootPartTracker; - IContainerPart* m_currentPart; + Ptr m_rootPart; + ITrackedPart* m_currentPart; RunState m_runState; public: @@ -67,21 +67,18 @@ namespace Catch : m_currentPart( CATCH_NULL ), m_runState( NotStarted ) {} - - int i() { - return 42; - } - IContainerPart& startRun(); + + ITrackedPart& startRun(); void endRun() { - m_rootPartTracker.reset(); + m_rootPart.reset(); m_currentPart = CATCH_NULL; m_runState = NotStarted; } void startCycle() { - m_currentPart = m_rootPartTracker.get(); + m_currentPart = m_rootPart.get(); m_runState = Executing; } void completeCycle() { @@ -92,10 +89,10 @@ namespace Catch return m_runState == CompletedCycle; } - IContainerPart& currentPart() { + ITrackedPart& currentPart() { return *m_currentPart; } - void setCurrentPart( IContainerPart* part ) { + void setCurrentPart( ITrackedPart* part ) { m_currentPart = part; } @@ -103,12 +100,10 @@ namespace Catch return m_currentPart->findChild( name ); } - - private: }; - class PartTracker : public IContainerPart { + class SectionTracker : public ITrackedPart { enum RunState { NotStarted, Executing, @@ -128,11 +123,11 @@ namespace Catch typedef std::vector > Children; std::string m_name; TrackerContext& m_ctx; - IContainerPart* m_parent; + ITrackedPart* m_parent; Children m_children; RunState m_runState; public: - PartTracker( std::string const& name, TrackerContext& ctx, IContainerPart* parent ) + SectionTracker( std::string const& name, TrackerContext& ctx, ITrackedPart* parent ) : m_name( name ), m_ctx( ctx ), m_parent( parent ), @@ -142,14 +137,14 @@ namespace Catch return m_name; } - virtual bool isCompleteOrFailed() const CATCH_OVERRIDE { + virtual bool hasEnded() const CATCH_OVERRIDE { return m_runState == CompletedSuccessfully || m_runState == Failed; } - virtual bool isComplete() const CATCH_OVERRIDE { + virtual bool didCompleteSuccessfully() const CATCH_OVERRIDE { return m_runState == CompletedSuccessfully; } - virtual bool isUnstarted() const CATCH_OVERRIDE { - return m_runState == NotStarted; + virtual bool hasStarted() const CATCH_OVERRIDE { + return m_runState != NotStarted; } virtual bool isOpen() const CATCH_OVERRIDE { return m_runState == Executing || m_runState == ExecutingChildren; @@ -167,7 +162,7 @@ namespace Catch ? it->get() : CATCH_NULL; } - virtual IContainerPart& parent() CATCH_OVERRIDE { + virtual ITrackedPart& parent() CATCH_OVERRIDE { assert( m_parent ); // Should always be non-null except for root return *m_parent; } @@ -226,15 +221,15 @@ namespace Catch } bool hasUnstartedChildren() const { - return !m_children.empty() && m_children.back()->isUnstarted(); + return !m_children.empty() && !m_children.back()->hasStarted(); } }; - IContainerPart& TrackerContext::startRun() { - m_rootPartTracker = new PartTracker( "{root}", *this, CATCH_NULL ); + ITrackedPart& TrackerContext::startRun() { + m_rootPart = new SectionTracker( "{root}", *this, CATCH_NULL ); m_currentPart = CATCH_NULL; m_runState = Executing; - return *m_rootPartTracker; + return *m_rootPart; } class LocalContext { @@ -245,16 +240,16 @@ namespace Catch } }; - class SectionPart : public PartTracker { + class SectionPart : public SectionTracker { public: - SectionPart( std::string const& name, TrackerContext& ctx, IContainerPart* parent ) - : PartTracker( name, ctx, parent ) + SectionPart( std::string const& name, TrackerContext& ctx, ITrackedPart* parent ) + : SectionTracker( name, ctx, parent ) {} static SectionPart& acquire( TrackerContext& ctx, std::string const& name ) { SectionPart* section = CATCH_NULL; - IContainerPart& currentPart = ctx.currentPart(); + ITrackedPart& currentPart = ctx.currentPart(); if( ITrackedPart* part = currentPart.findChild( name ) ) { section = dynamic_cast( part ); assert( section ); @@ -263,7 +258,7 @@ namespace Catch section = new SectionPart( name, ctx, ¤tPart ); currentPart.addChild( section ); } - if( !ctx.completedCycle() && !section->isCompleteOrFailed() ) { + if( !ctx.completedCycle() && !section->hasEnded() ) { section->open(); } return *section; @@ -284,7 +279,7 @@ using namespace Catch; inline void testCase( Catch::LocalContext const& C_A_T_C_H_Context ) { - REQUIRE( C_A_T_C_H_Context().i() == 42 ); +// REQUIRE( C_A_T_C_H_Context().i() == 42 ); } TEST_CASE( "PartTracker" ) { @@ -294,53 +289,53 @@ TEST_CASE( "PartTracker" ) { ctx.startCycle(); SectionPart& testCase = SectionPart::acquire( ctx, "Testcase" ); - REQUIRE( testCase.isComplete() == false ); + REQUIRE( testCase.didCompleteSuccessfully() == false ); SectionPart& s1 = SectionPart::acquire( ctx, "S1" ); - REQUIRE( s1.isComplete() == false ); + REQUIRE( s1.didCompleteSuccessfully() == false ); SECTION( "successfully close one section" ) { s1.close(); - REQUIRE( s1.isComplete() == true ); - REQUIRE( testCase.isCompleteOrFailed() == false ); + REQUIRE( s1.didCompleteSuccessfully() == true ); + REQUIRE( testCase.hasEnded() == false ); testCase.close(); - REQUIRE( testCase.isComplete() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == true ); REQUIRE( ctx.completedCycle() == true ); } SECTION( "fail one section" ) { s1.fail(); - REQUIRE( s1.isComplete() == false ); - REQUIRE( s1.isCompleteOrFailed() == true ); - REQUIRE( testCase.isComplete() == false ); - REQUIRE( testCase.isCompleteOrFailed() == false ); + REQUIRE( s1.didCompleteSuccessfully() == false ); + REQUIRE( s1.hasEnded() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == false ); + REQUIRE( testCase.hasEnded() == false ); testCase.close(); REQUIRE( ctx.completedCycle() == true ); - REQUIRE( testCase.isComplete() == false ); + REQUIRE( testCase.didCompleteSuccessfully() == false ); SECTION( "re-enter after failed section" ) { ctx.startCycle(); SectionPart& testCase2 = SectionPart::acquire( ctx, "Testcase" ); - REQUIRE( testCase2.isComplete() == false ); + REQUIRE( testCase2.didCompleteSuccessfully() == false ); SectionPart& s1b = SectionPart::acquire( ctx, "S1" ); - REQUIRE( s1b.isComplete() == false ); + REQUIRE( s1b.didCompleteSuccessfully() == false ); testCase2.close(); REQUIRE( ctx.completedCycle() == true ); - REQUIRE( testCase.isComplete() == true ); - REQUIRE( testCase.isCompleteOrFailed() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == true ); + REQUIRE( testCase.hasEnded() == true ); } SECTION( "re-enter after failed section and find next section" ) { ctx.startCycle(); SectionPart& testCase2 = SectionPart::acquire( ctx, "Testcase" ); - REQUIRE( testCase2.isComplete() == false ); + REQUIRE( testCase2.didCompleteSuccessfully() == false ); SectionPart& s1b = SectionPart::acquire( ctx, "S1" ); - REQUIRE( s1b.isComplete() == false ); + REQUIRE( s1b.didCompleteSuccessfully() == false ); SectionPart& s2 = SectionPart::acquire( ctx, "S2" ); REQUIRE( s2.isOpen() ); @@ -348,8 +343,8 @@ TEST_CASE( "PartTracker" ) { REQUIRE( ctx.completedCycle() == true ); testCase2.close(); - REQUIRE( testCase.isComplete() == true ); - REQUIRE( testCase.isCompleteOrFailed() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == true ); + REQUIRE( testCase.hasEnded() == true ); } } @@ -358,22 +353,22 @@ TEST_CASE( "PartTracker" ) { REQUIRE( ctx.completedCycle() == true ); SectionPart& s2 = SectionPart::acquire( ctx, "S2" ); - REQUIRE( s2.isComplete() == false ); + REQUIRE( s2.didCompleteSuccessfully() == false ); REQUIRE( s2.isOpen() == false ); testCase.close(); - REQUIRE( testCase.isComplete() == false ); + REQUIRE( testCase.didCompleteSuccessfully() == false ); SECTION( "Re-enter - skip S1 and enter S2" ) { ctx.startCycle(); SectionPart& testCase2 = SectionPart::acquire( ctx, "Testcase" ); - REQUIRE( testCase2.isComplete() == false ); + REQUIRE( testCase2.didCompleteSuccessfully() == false ); SectionPart& s1b = SectionPart::acquire( ctx, "S1" ); - REQUIRE( s1b.isComplete() == true ); + REQUIRE( s1b.didCompleteSuccessfully() == true ); SectionPart& s2b = SectionPart::acquire( ctx, "S2" ); - REQUIRE( s2b.isComplete() == false ); + REQUIRE( s2b.didCompleteSuccessfully() == false ); REQUIRE( s2b.isOpen() ); REQUIRE( ctx.completedCycle() == false ); @@ -382,22 +377,22 @@ TEST_CASE( "PartTracker" ) { s2b.close(); REQUIRE( ctx.completedCycle() == true ); - REQUIRE( s2b.isComplete() == true ); - REQUIRE( testCase2.isCompleteOrFailed() == false ); + REQUIRE( s2b.didCompleteSuccessfully() == true ); + REQUIRE( testCase2.hasEnded() == false ); testCase2.close(); - REQUIRE( testCase2.isComplete() == true ); + REQUIRE( testCase2.didCompleteSuccessfully() == true ); } SECTION ("fail S2") { s2b.fail(); REQUIRE( ctx.completedCycle() == true ); - REQUIRE( s2b.isComplete() == false ); - REQUIRE( s2b.isCompleteOrFailed() == true ); - REQUIRE( testCase2.isCompleteOrFailed() == false ); + REQUIRE( s2b.didCompleteSuccessfully() == false ); + REQUIRE( s2b.hasEnded() == true ); + REQUIRE( testCase2.hasEnded() == false ); testCase2.close(); - REQUIRE( testCase2.isComplete() == false ); + REQUIRE( testCase2.didCompleteSuccessfully() == false ); } } } @@ -407,15 +402,15 @@ TEST_CASE( "PartTracker" ) { REQUIRE( s2.isOpen() == true ); s2.close(); - REQUIRE( s2.isComplete() == true ); - REQUIRE( s1.isComplete() == false ); + REQUIRE( s2.didCompleteSuccessfully() == true ); + REQUIRE( s1.didCompleteSuccessfully() == false ); s1.close(); - REQUIRE( s1.isComplete() == true ); - REQUIRE( testCase.isComplete() == false ); + REQUIRE( s1.didCompleteSuccessfully() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == false ); testCase.close(); - REQUIRE( testCase.isComplete() == true ); + REQUIRE( testCase.didCompleteSuccessfully() == true ); }