@@ -98,6 +98,7 @@ std::unique_ptr<StatsTracker> UnitTestRunner_Descriptor::make_stats() const{
9898
9999
100100UnitTestRunner::~UnitTestRunner (){
101+ SUBSTRING_TEST .remove_listener (*this );
101102 RUN_MODE .remove_listener (*this );
102103}
103104UnitTestRunner::UnitTestRunner ()
@@ -111,25 +112,33 @@ UnitTestRunner::UnitTestRunner()
111112 , RUN_MODE(
112113 " <b>Run Mode:</b>" ,
113114 {
114- {RunMode::RUN_ALL , " run-all" , " Run All Tests" },
115- {RunMode::RUN_ONE , " run-one" , " Run One Test" },
115+ {RunMode::RUN_ONE , " run-one" , " Run One Test" },
116+ {RunMode::RUN_SUBSTRING_MATCH , " run-substring-match" , " Run Matching Substrings" },
117+ {RunMode::RUN_ALL , " run-all" , " Run All Tests" },
116118 },
117119 LockMode::LOCK_WHILE_RUNNING ,
118- RunMode::RUN_ALL
120+ RunMode::RUN_SUBSTRING_MATCH
119121 )
120122 , SINGLE_TEST_LABEL(" <b>Test Name:</b>" )
121123 , SINGLE_TEST(
122124 TEST_DATABASE (),
123125 LockMode::LOCK_WHILE_RUNNING,
124126 0
125127 )
128+ , SUBSTRING_TEST_LABEL(" <b>Run All Tests Containing This Substring:</b>" )
129+ , SUBSTRING_TEST(false , LockMode::LOCK_WHILE_RUNNING , " " , " PokemonSwSh" )
130+ , TESTS_TO_RUN(
131+ " <b>Tests to Run:</b>" ,
132+ LockMode::READ_ONLY ,
133+ " " , " "
134+ )
126135 , PASSED_TESTS(
127- " <b>Passing Tests</b>" ,
136+ " <b>Passing Tests: </b>" ,
128137 LockMode::READ_ONLY ,
129138 " " , " "
130139 )
131140 , FAILED_TESTS(
132- " <b>Failing Tests</b>" ,
141+ " <b>Failing Tests: </b>" ,
133142 LockMode::READ_ONLY ,
134143 " " , " "
135144 )
@@ -139,20 +148,51 @@ UnitTestRunner::UnitTestRunner()
139148 PA_ADD_OPTION (RUN_MODE );
140149 PA_ADD_STATIC (SINGLE_TEST_LABEL );
141150 PA_ADD_OPTION (SINGLE_TEST );
151+ PA_ADD_STATIC (SUBSTRING_TEST_LABEL );
152+ PA_ADD_OPTION (SUBSTRING_TEST );
153+ PA_ADD_OPTION (TESTS_TO_RUN );
142154 PA_ADD_OPTION (PASSED_TESTS );
143155 PA_ADD_OPTION (FAILED_TESTS );
144156
145157 UnitTestRunner::on_config_value_changed (this );
146158
147159 RUN_MODE .add_listener (*this );
160+ SUBSTRING_TEST .add_listener (*this );
148161}
149162void UnitTestRunner::on_config_value_changed (void * object){
150- if ((RunMode)RUN_MODE == RunMode::RUN_ONE ){
151- SINGLE_TEST_LABEL .set_visibility (ConfigOptionState::ENABLED );
152- SINGLE_TEST .set_visibility (ConfigOptionState::ENABLED );
153- }else {
163+ if (object == &RUN_MODE ){
154164 SINGLE_TEST_LABEL .set_visibility (ConfigOptionState::HIDDEN );
155165 SINGLE_TEST .set_visibility (ConfigOptionState::HIDDEN );
166+ SUBSTRING_TEST_LABEL .set_visibility (ConfigOptionState::HIDDEN );
167+ SUBSTRING_TEST .set_visibility (ConfigOptionState::HIDDEN );
168+ TESTS_TO_RUN .set_visibility (ConfigOptionState::HIDDEN );
169+
170+ switch ((RunMode)RUN_MODE ){
171+ case RunMode::RUN_ONE :
172+ SINGLE_TEST_LABEL .set_visibility (ConfigOptionState::ENABLED );
173+ SINGLE_TEST .set_visibility (ConfigOptionState::ENABLED );
174+ break ;
175+ case RunMode::RUN_SUBSTRING_MATCH :
176+ SUBSTRING_TEST_LABEL .set_visibility (ConfigOptionState::ENABLED );
177+ SUBSTRING_TEST .set_visibility (ConfigOptionState::ENABLED );
178+ TESTS_TO_RUN .set_visibility (ConfigOptionState::ENABLED );
179+ break ;
180+ case RunMode::RUN_ALL :
181+ break ;
182+ }
183+ return ;
184+ }
185+ if (object == &SUBSTRING_TEST ){
186+ std::string name = SUBSTRING_TEST ;
187+ TESTS_TO_RUN .set (" " );
188+ size_t count = 0 ;
189+ for (const auto & test : UNIT_TESTS_ALL ()){
190+ if (test.first .contains (name)){
191+ count++;
192+ TESTS_TO_RUN .append (test.first + " \n " );
193+ }
194+ }
195+ TESTS_TO_RUN .set_label (" <b>Tests to Run: " + tostr_u_commas (count) + " </b>" );
156196 }
157197}
158198
@@ -176,11 +216,8 @@ void UnitTestRunner::program(ProgramEnvironment& env, CancellableScope& scope){
176216
177217 const UnitTestDatabase& all_tests = UNIT_TESTS_ALL ();
178218
179- if ((RunMode)RUN_MODE == RunMode::RUN_ALL ){
180- for (const auto & test : all_tests){
181- runner.add_test (test.second );
182- }
183- }else {
219+ switch ((RunMode)RUN_MODE ){
220+ case RunMode::RUN_ONE :{
184221 auto iter = all_tests.find (SINGLE_TEST .slug ());
185222 if (iter == all_tests.end ()){
186223 throw InternalProgramError (
@@ -190,6 +227,23 @@ void UnitTestRunner::program(ProgramEnvironment& env, CancellableScope& scope){
190227 );
191228 }
192229 runner.add_test (iter->second );
230+ break ;
231+ }
232+ case RunMode::RUN_SUBSTRING_MATCH :{
233+ std::string name = SUBSTRING_TEST ;
234+ for (const auto & test : all_tests){
235+ if (test.first .contains (name)){
236+ runner.add_test (test.second );
237+ }
238+ }
239+ break ;
240+ }
241+ case RunMode::RUN_ALL :{
242+ for (const auto & test : all_tests){
243+ runner.add_test (test.second );
244+ }
245+ break ;
246+ }
193247 }
194248
195249 runner.run ();
0 commit comments