onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 1 | <!DOCTYPE html> |
| 2 | <html> |
| 3 | <title>roadmap</title> |
| 4 | <xmp theme="united" style="display:none;"> |
| 5 | |
| 6 | ## Roadmap |
| 7 | |
onqtam | e34600e | 2016-11-15 02:16:56 +0200 | [diff] [blame] | 8 | This library is free, and will stay free but needs your support to sustain its development. There are lots of [**new features**](roadmap.html) and maintenance to do. If you work for a company using **doctest** or have the means to do so, please consider financial support. |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 9 | |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 10 | [![Patreon](https://cloud.githubusercontent.com/assets/8225057/5990484/70413560-a9ab-11e4-8942-1a63607c0b00.png)](http://www.patreon.com/onqtam) |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 11 | [![PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.me/onqtam/10) |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 12 | |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 13 | Planned features for future releases - order changes constantly... |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 14 | |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 15 | ### For 1.3: |
| 16 | |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 17 | - reporters |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 18 | - output to file |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 19 | - a system for writing custom reporters |
| 20 | - ability to use multiple reporters at once (but only 1 to stdout) |
| 21 | - a compact reporter |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 22 | - a progress reporter - or maybe just an option for the console reporter |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 23 | - an xml reporter ([junit related stuff](https://github.com/ujiro99/doctest-junit-report)) |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 24 | - xUnit reporter |
| 25 | - a listener interface - similar to a reporter - look at Catch |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 26 | - ability to have no output when everything succeeds |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 27 | - option to output summary only |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 28 | - thread safety - asserts/subcases/captures should be safe to be used by multiple threads simultaneously |
| 29 | - https://github.com/blastrock/doctest/tree/threadsafe |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 30 | - matchers - should investigate what they are - look at google test/mock and Catch (also predicates and boost test) |
| 31 | - convolution support for the assertion macros (with a predicate) |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 32 | |
| 33 | ### For 1.4: |
| 34 | |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 35 | - Value-Parameterized test cases |
| 36 | - generators? - look at Catch - and investigate what they are |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 37 | - look at property based testing |
| 38 | - [rapidcheck](https://github.com/emil-e/rapidcheck) |
| 39 | - [autocheck](https://github.com/thejohnfreeman/autocheck) |
| 40 | - [CppQuickCheck](https://github.com/grogers0/CppQuickCheck) |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 41 | - proper conan package |
onqtam | 8cec917 | 2018-02-06 23:34:14 +0200 | [diff] [blame] | 42 | - https://github.com/onqtam/doctest/issues/103 |
| 43 | - https://github.com/bincrafters/conan-doctest |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 44 | - https://github.com/uilianries/conan-catch |
| 45 | - https://github.com/philsquared/Catch/pull/938 |
| 46 | - https://stackoverflow.com/questions/40311363/conan-io-header-only-package |
| 47 | - https://github.com/conan-io/docs/issues/67 |
| 48 | - https://github.com/agauniyal/rang |
| 49 | - https://github.com/conan-io/conan/issues/324 |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 50 | - IDE integration |
| 51 | - https://blogs.msdn.microsoft.com/vcblog/2017/05/10/unit-testing-and-the-future-announcing-the-test-adapter-for-google-test/ |
| 52 | - https://www.reddit.com/r/cpp/comments/65c0f1/run_cpp_unit_tests_from_xcode_and_visual_studio/ |
| 53 | - https://github.com/k-brac/CUTI |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 54 | - https://github.com/csoltenborn/GoogleTestAdapter |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 55 | - MSTest |
| 56 | - http://accu.org/index.php/journals/1851 |
| 57 | - https://msdn.microsoft.com/en-us/library/hh270865.aspx |
| 58 | - https://msdn.microsoft.com/en-us/library/hh598953.aspx |
| 59 | - https://blogs.msdn.microsoft.com/vcblog/2017/04/19/cpp-testing-in-visual-studio/ |
| 60 | - https://msdn.microsoft.com/en-us/library/hh419385.aspx |
| 61 | - XCode - https://github.com/philsquared/Catch/pull/454 |
| 62 | - CLion |
| 63 | - https://www.jetbrains.com/clion/features/unit-testing.html |
| 64 | - https://blog.jetbrains.com/clion/2017/03/clion-2017-1-released/#catch |
| 65 | |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 66 | ### For 1.5: |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 67 | |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 68 | - log levels - like in [boost test](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/boost_test/utf_reference/rt_param_reference/log_level.html) |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 69 | - running tests a [few times](https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.html#repeating-the-tests) |
| 70 | - test execution in [separate processes](https://github.com/philsquared/Catch/issues/853) - ```fork()``` for UNIX and [this](https://github.com/nemequ/munit/issues/2) for Windows |
| 71 | - killing a test that exceeds a time limit (will perhaps require threading or processes) |
| 72 | - [symbolizer](https://github.com/facebook/folly/tree/master/folly/experimental/symbolizer) - for a stack trace - when an assertion fails - and it's in a user function with some deep callstack away from the current test case - how to know the exact code path that lead to the failing assert |
| 73 | - ability to make the framework not capture unexpected exceptions - as requested [here](https://github.com/onqtam/doctest/issues/12#issuecomment-235334585) |
| 74 | - add Approx ability to compare with absolute epsilon - [Catch PR](https://github.com/philsquared/Catch/pull/538) |
onqtam | 8cec917 | 2018-02-06 23:34:14 +0200 | [diff] [blame] | 75 | - ability to customize the colors in the console output (may also use styles - based on [this](https://github.com/agauniyal/rang) or [this](https://github.com/ikalnytskyi/termcolor)) |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 76 | - implement breaking into the debugger under linux - see [here](https://github.com/philsquared/Catch/pull/585) and [here](https://github.com/scottt/debugbreak) |
| 77 | - better testing of the library |
| 78 | - unit test the String class |
| 79 | - should unit test internals - currently even if a bug is caught by different output it's very difficult to track the reason |
| 80 | - should test stuff that should not compile |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 81 | - https://github.com/ldionne/dyno/blob/master/cmake/CompileFailTest.cmake |
| 82 | - see slide 38 here - https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 83 | - should test crash handling |
| 84 | - should test more config options |
onqtam | c80eed1 | 2017-10-06 11:01:05 +0300 | [diff] [blame] | 85 | - don't cheat for maxing out code coverage (see [coverage_maxout.cpp](../../examples/all_features/coverage_maxout.cpp)) |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 86 | - should test C++11 stuff - perhaps inspect the CMAKE_CXX_FLAGS for -std=c++11 on the CI and add more targets/tests |
| 87 | - test tricky stuff like expressions with commas in asserts |
| 88 | |
| 89 | ### For 2.0: |
| 90 | |
| 91 | - remove C++98 support |
| 92 | - remove the config identifiers for C++11 features |
| 93 | - use variadic templates where appropriate |
| 94 | - update type lists to C++11 |
| 95 | - update traits - use declval, etc. |
| 96 | - move initialization of fields from initializer lists to class bodies |
| 97 | - update static code analysis - less warning suppressing |
| 98 | |
| 99 | ### For 3.0: |
| 100 | |
| 101 | - use modules - use ```std::string``` and whatever else comes from the standard - no more hand rolled traits and classes |
| 102 | - minimize the use of the preprocessor |
| 103 | |
| 104 | ### Things that are being considered but not part of the roadmap yet: |
| 105 | |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 106 | - FakeIt mocking integration - like [catch](https://github.com/eranpeer/FakeIt/tree/master/config/catch) (also checkout [this](https://github.com/ujiro99/doctest-sample)) |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 107 | - look into https://github.com/cpp-testing/GUnit - https://www.youtube.com/watch?v=NVrZjT5lW5o |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 108 | - consider the following 2 properties for the MSVC static code analyzer: EnableCppCoreCheck, EnableExperimentalCppCoreCheck |
| 109 | - rpm package? like this: https://github.com/vietjtnguyen/argagg/blob/master/packaging/rpm/argagg.spec |
| 110 | - get the current test case/section path - https://github.com/philsquared/Catch/issues/522 |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 111 | - when no assertion is encountered in a test case it should fail - and should also add a SUCCEED() call |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 112 | - failure reporting should print out previous SECTIONs for data-driven testing - as requested [here](https://github.com/philsquared/Catch/issues/734) |
| 113 | - ```Bitwise()``` class that has overloaded operators for comparison - to be used to check objects bitwise against each other |
| 114 | - detect floating point exceptions |
| 115 | - checkpoint/passpoint - like in [boost test](http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/boost_test/test_output/test_tools_support_for_logging/checkpoints.html) (also make all assert/subcase/logging macros to act as passpoints and print the last one on crashes or exceptions) |
| 116 | - queries for the current test case - name (and probably decorators) |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 117 | - support for LibIdentify |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 118 | - support for running tests in parallel in multiple threads |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 119 | - death tests - as in [google test](https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.html#death-tests) |
| 120 | - config options |
| 121 | - test case name uniqueness - reject the ones with identical names |
| 122 | - command line options |
| 123 | - ability to specify ASC/DESC for the order option |
| 124 | - global timeout option (per test or per entire session?) |
| 125 | - command line error handling/reporting |
onqtam | 6a5da42 | 2017-09-04 17:56:08 +0300 | [diff] [blame] | 126 | - option to not print context info when the --success option is used |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 127 | - ability for the user to extend the command line - as requested [here](https://github.com/philsquared/Catch/issues/622) |
| 128 | - option to list files in which there are test cases who match the current filters |
| 129 | - option for filters to switch from "match any" to "match all" mode |
| 130 | - option to list test suites and test cases in a tree view |
onqtam | 68681e6 | 2018-05-10 16:18:17 +0300 | [diff] [blame^] | 131 | - add a "wait key" option (before and after tests) - as requested [here](https://github.com/philsquared/Catch/issues/477#issuecomment-256417686) |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 132 | - decorators for test cases and test suites- like in boost test |
| 133 | - depends_on |
| 134 | - precondition |
| 135 | - fixture |
| 136 | - label (tag) - with the ability to have multiple labels (tags) for a test case and also the ability to list them |
| 137 | - run X times (should also multiply with (or just override) the global test run times) |
| 138 | - throw an exception when incompatible decorators are given in the same list of decorators - like may_fail and should_fail |
| 139 | - setup / teardown support |
| 140 | - global setup / teardown - can be currently achieved by providing a custom main function |
| 141 | - per test suite (block? only? and not all blocks of the same test suite?) |
| 142 | - as decorators |
| 143 | - see how it's done in boost test - with the fixture decorator |
| 144 | - perhaps for fixtures in addition to the constructor / destructor - since throwing in the destructor might terminate the program |
| 145 | - or just ignore all of this this - it would require globals or classes and inheritance - and we already have subcases |
| 146 | - doctest in a GUI environment? with no console? APIs for attaching a console? querying if there is one? [investigate...](https://github.com/philsquared/Catch/blob/master/docs/configuration.html#stdout) |
| 147 | - runtime performance |
| 148 | - startup - the set holding all registered tests should use a specialized allocator to minimize program startup time |
| 149 | - failing - optimize createStream/freeStream to reuse a pool of ostringstream objects |
| 150 | - ability to provide a temp folder that is cleared between each test case |
| 151 | - make the _MESSAGE assert macros work with variadic arguments - and maybe write the ones for binary/unary/fast asserts as well |
| 152 | - move from operator "<<" to "<=" for capturing the left operand when decomposing binary expressions with templates |
| 153 | - think about silencing warnings about unused variables when DOCTEST_CONFIG_DISABLE is used - see commit 6b61e8aa3818c5ea100cedc1bb48a60ea10df6e8 or issue #61 |
| 154 | - think about optionally using ```<typeinfo>``` and libcxxabi for demangling so users don't have to use ```TYPE_TO_STRING()``` |
| 155 | - handle more complex expressions - ```CHECK(foo() == 1 || bar() == 2);``` |
| 156 | - think about using a string view of some sorts |
| 157 | - benchmark against google test and boost test |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 158 | |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 159 | ### Things that are very unlikely to enter the roadmap: |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 160 | |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 161 | - think about removing the binary asserts (leaving only the fast binary asserts) because normal asserts + no try/catch in asserts are almost the same |
| 162 | - move the "react()" part (the one that throws for REQUIRE asserts - or for when "abort-after=<int>" is reached) to a function call in the while() part of the asserts |
| 163 | - stop using underscores for the begining of identifiers - the anonymous variables - against the standard... |
| 164 | - templated fixture test cases |
| 165 | - test with missed warning flags for GCC |
| 166 | - https://github.com/Barro/compiler-warnings |
| 167 | - http://stackoverflow.com/a/34971392/3162383 |
| 168 | - utf8 / unicode ??? |
| 169 | - https://github.com/philsquared/Catch/pull/903 |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 170 | - handle ```wchar``` strings??? |
onqtam | b8220c5 | 2017-05-16 00:21:15 +0300 | [diff] [blame] | 171 | - hierarchical test suites - using a stack for the pushed ones |
| 172 | - ability to specify the width of the terminal in terms of characters (for example 60 - less than 80 - the default) |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 173 | - ability to re-run only newly compiled tests based on time stamps using ```__DATE__``` and ```__TIME__``` - stored in some file |
onqtam | 1435c01 | 2016-09-21 15:29:11 +0300 | [diff] [blame] | 174 | - add underscores to all preprocessor identifiers not intended for use by the user |
| 175 | - put everything from the ```detail``` namespace also in a nested anonymous namespace to make them with internal linkage |
| 176 | - ability to put everything from doctest into an anonymous namespace - to allow the use of multiple different versions of **doctest** within the same binary (executable/dll) - like the [**stb**](https://github.com/nothings/stb) libraries can |
onqtam | 8126b56 | 2016-05-27 17:01:15 +0300 | [diff] [blame] | 177 | |
| 178 | --------------- |
| 179 | |
| 180 | [Home](readme.html#reference) |
| 181 | |
| 182 | |
| 183 | </xmp> |
| 184 | <script src="strapdown.js/strapdown.js"></script> |
| 185 | </html> |