aboutsummaryrefslogtreecommitdiff
path: root/include/internal/catch_section_info.hpp
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2017-12-22 16:53:56 +0100
committerSzczepan Zalega <szczepan@nitrokey.com>2017-12-22 16:53:56 +0100
commit48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391 (patch)
tree83645ddf58fd9514e1fe6d566839bb2747ee4706 /include/internal/catch_section_info.hpp
downloadlibnitrokey-48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391.tar.gz
libnitrokey-48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391.tar.bz2
Squashed 'unittest/Catch/' content from commit ae5ee2cf
git-subtree-dir: unittest/Catch git-subtree-split: ae5ee2cf63d6d67bd1369b512d2a7b60b571c907
Diffstat (limited to 'include/internal/catch_section_info.hpp')
-rw-r--r--include/internal/catch_section_info.hpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/include/internal/catch_section_info.hpp b/include/internal/catch_section_info.hpp
new file mode 100644
index 0000000..6258a28
--- /dev/null
+++ b/include/internal/catch_section_info.hpp
@@ -0,0 +1,113 @@
+/*
+ * Created by Phil Nash on 4/5/2012
+ * Copyright 2012 Two Blue Cubes Ltd. All rights reserved.
+ *
+ * Distributed under the Boost Software License, Version 1.0. (See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+#ifndef TWOBLUECUBES_CATCH_SECTION_INFO_HPP_INCLUDED
+#define TWOBLUECUBES_CATCH_SECTION_INFO_HPP_INCLUDED
+
+#include "catch_common.h"
+
+#include <map>
+#include <string>
+
+namespace Catch {
+
+ class RunningSection {
+ public:
+
+ typedef std::vector<RunningSection*> SubSections;
+
+ enum State {
+ Root,
+ Unknown,
+ Branch,
+ TestedBranch,
+ TestedLeaf
+ };
+
+ RunningSection( RunningSection* parent, std::string const& name )
+ : m_state( Unknown ),
+ m_parent( parent ),
+ m_name( name )
+ {}
+
+ RunningSection( std::string const& name )
+ : m_state( Root ),
+ m_parent( CATCH_NULL ),
+ m_name( name )
+ {}
+
+ ~RunningSection() {
+ deleteAll( m_subSections );
+ }
+
+ std::string getName() const {
+ return m_name;
+ }
+
+ bool shouldRun() const {
+ return m_state < TestedBranch;
+ }
+
+ bool isBranch() const {
+ return m_state == Branch;
+ }
+
+ const RunningSection* getParent() const {
+ return m_parent;
+ }
+
+ bool hasUntestedSections() const {
+ if( m_state == Unknown )
+ return true;
+ for( SubSections::const_iterator it = m_subSections.begin();
+ it != m_subSections.end();
+ ++it)
+ if( (*it)->hasUntestedSections() )
+ return true;
+ return false;
+ }
+
+ // Mutable methods:
+
+ RunningSection* getParent() {
+ return m_parent;
+ }
+
+ RunningSection* findOrAddSubSection( std::string const& name, bool& changed ) {
+ for( SubSections::const_iterator it = m_subSections.begin();
+ it != m_subSections.end();
+ ++it)
+ if( (*it)->getName() == name )
+ return *it;
+ RunningSection* subSection = new RunningSection( this, name );
+ m_subSections.push_back( subSection );
+ m_state = Branch;
+ changed = true;
+ return subSection;
+ }
+
+ bool ran() {
+ if( m_state >= Branch )
+ return false;
+ m_state = TestedLeaf;
+ return true;
+ }
+
+ void ranToCompletion() {
+ if( m_state == Branch && !hasUntestedSections() )
+ m_state = TestedBranch;
+ }
+
+ private:
+ State m_state;
+ RunningSection* m_parent;
+ std::string m_name;
+ SubSections m_subSections;
+ };
+}
+
+#endif // TWOBLUECUBES_CATCH_SECTION_INFO_HPP_INCLUDED