1 /*
2  *  Created by Phil on 29/10/2010.
3  *  Copyright 2010 Two Blue Cubes Ltd. All rights reserved.
4  *
5  *  Distributed under the Boost Software License, Version 1.0. (See accompanying
6  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7  */
8 #ifndef TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED
9 #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED
10 
11 #include "catch_common.h"
12 #include "catch_test_registry.h"
13 
14 #include <string>
15 #include <vector>
16 #include <memory>
17 
18 #ifdef __clang__
19 #pragma clang diagnostic push
20 #pragma clang diagnostic ignored "-Wpadded"
21 #endif
22 
23 namespace Catch {
24 
25     struct ITestInvoker;
26 
27     struct TestCaseInfo {
28         enum SpecialProperties{
29             None = 0,
30             IsHidden = 1 << 1,
31             ShouldFail = 1 << 2,
32             MayFail = 1 << 3,
33             Throws = 1 << 4,
34             NonPortable = 1 << 5,
35             Benchmark = 1 << 6
36         };
37 
38         TestCaseInfo(   std::string const& _name,
39                         std::string const& _className,
40                         std::string const& _description,
41                         std::vector<std::string> const& _tags,
42                         SourceLineInfo const& _lineInfo );
43 
44         friend void setTags( TestCaseInfo& testCaseInfo, std::vector<std::string> tags );
45 
46         bool isHidden() const;
47         bool throws() const;
48         bool okToFail() const;
49         bool expectedToFail() const;
50 
51         std::string tagsAsString() const;
52 
53         std::string name;
54         std::string className;
55         std::string description;
56         std::vector<std::string> tags;
57         std::vector<std::string> lcaseTags;
58         SourceLineInfo lineInfo;
59         SpecialProperties properties;
60     };
61 
62     class TestCase : public TestCaseInfo {
63     public:
64 
65         TestCase( ITestInvoker* testCase, TestCaseInfo&& info );
66 
67         TestCase withName( std::string const& _newName ) const;
68 
69         void invoke() const;
70 
71         TestCaseInfo const& getTestCaseInfo() const;
72 
73         bool operator == ( TestCase const& other ) const;
74         bool operator < ( TestCase const& other ) const;
75 
76     private:
77         std::shared_ptr<ITestInvoker> test;
78     };
79 
80     TestCase makeTestCase(  ITestInvoker* testCase,
81                             std::string const& className,
82                             NameAndTags const& nameAndTags,
83                             SourceLineInfo const& lineInfo );
84 }
85 
86 #ifdef __clang__
87 #pragma clang diagnostic pop
88 #endif
89 
90 #endif // TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED
91