Home | History | Annotate | Download | only in internal
      1 /*
      2  *  Created by Phil on 08/11/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_CONFIG_HPP_INCLUDED
      9 #define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED
     10 
     11 #include "catch_test_spec_parser.h"
     12 #include "catch_interfaces_config.h"
     13 
     14 // Libstdc++ doesn't like incomplete classes for unique_ptr
     15 #include "catch_stream.h"
     16 
     17 #include <memory>
     18 #include <vector>
     19 #include <string>
     20 
     21 #ifndef CATCH_CONFIG_CONSOLE_WIDTH
     22 #define CATCH_CONFIG_CONSOLE_WIDTH 80
     23 #endif
     24 
     25 namespace Catch {
     26 
     27     struct IStream;
     28 
     29     struct ConfigData {
     30         bool listTests = false;
     31         bool listTags = false;
     32         bool listReporters = false;
     33         bool listTestNamesOnly = false;
     34 
     35         bool showSuccessfulTests = false;
     36         bool shouldDebugBreak = false;
     37         bool noThrow = false;
     38         bool showHelp = false;
     39         bool showInvisibles = false;
     40         bool filenamesAsTags = false;
     41         bool libIdentify = false;
     42 
     43         int abortAfter = -1;
     44         unsigned int rngSeed = 0;
     45         int benchmarkResolutionMultiple = 100;
     46 
     47         Verbosity verbosity = Verbosity::Normal;
     48         WarnAbout::What warnings = WarnAbout::Nothing;
     49         ShowDurations::OrNot showDurations = ShowDurations::DefaultForReporter;
     50         RunTests::InWhatOrder runOrder = RunTests::InDeclarationOrder;
     51         UseColour::YesOrNo useColour = UseColour::Auto;
     52         WaitForKeypress::When waitForKeypress = WaitForKeypress::Never;
     53 
     54         std::string outputFilename;
     55         std::string name;
     56         std::string processName;
     57 #ifndef CATCH_CONFIG_DEFAULT_REPORTER
     58 #define CATCH_CONFIG_DEFAULT_REPORTER "console"
     59 #endif
     60         std::string reporterName = CATCH_CONFIG_DEFAULT_REPORTER;
     61 #undef CATCH_CONFIG_DEFAULT_REPORTER
     62 
     63         std::vector<std::string> testsOrTags;
     64         std::vector<std::string> sectionsToRun;
     65     };
     66 
     67 
     68     class Config : public IConfig {
     69     public:
     70 
     71         Config() = default;
     72         Config( ConfigData const& data );
     73         virtual ~Config() = default;
     74 
     75         std::string const& getFilename() const;
     76 
     77         bool listTests() const;
     78         bool listTestNamesOnly() const;
     79         bool listTags() const;
     80         bool listReporters() const;
     81 
     82         std::string getProcessName() const;
     83         std::string const& getReporterName() const;
     84 
     85         std::vector<std::string> const& getTestsOrTags() const;
     86         std::vector<std::string> const& getSectionsToRun() const override;
     87 
     88         virtual TestSpec const& testSpec() const override;
     89         bool hasTestFilters() const override;
     90 
     91         bool showHelp() const;
     92 
     93         // IConfig interface
     94         bool allowThrows() const override;
     95         std::ostream& stream() const override;
     96         std::string name() const override;
     97         bool includeSuccessfulResults() const override;
     98         bool warnAboutMissingAssertions() const override;
     99         bool warnAboutNoTests() const override;
    100         ShowDurations::OrNot showDurations() const override;
    101         RunTests::InWhatOrder runOrder() const override;
    102         unsigned int rngSeed() const override;
    103         int benchmarkResolutionMultiple() const override;
    104         UseColour::YesOrNo useColour() const override;
    105         bool shouldDebugBreak() const override;
    106         int abortAfter() const override;
    107         bool showInvisibles() const override;
    108         Verbosity verbosity() const override;
    109 
    110     private:
    111 
    112         IStream const* openStream();
    113         ConfigData m_data;
    114 
    115         std::unique_ptr<IStream const> m_stream;
    116         TestSpec m_testSpec;
    117         bool m_hasTestFilters = false;
    118     };
    119 
    120 } // end namespace Catch
    121 
    122 #endif // TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED
    123