@@ -204,6 +204,136 @@ TEST(ToolchainTestGroup, VerifyToolchain_LockedFolder) {
204204 }
205205}
206206
207+ TEST (ToolchainTestGroup, VerifyToolchain_ConditionalAdd_CompilerVersion) {
208+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
209+ " gcc" ," g++" ," ar" ," ld" );
210+
211+ buildcc::base::VerifyToolchainConfig config;
212+ config.env_vars .clear ();
213+ config.absolute_search_paths .push_back (
214+ (fs::current_path () /" toolchains" /" gcc" ).string ());
215+ config.compiler_version =" 10.2.1" ;
216+
217+ std::vector<std::string> compiler_version{" 10.2.1" };
218+ std::vector<std::string> arch{" none" };
219+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
220+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
221+
222+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
223+ gcc.Verify (config);
224+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
225+ CHECK_EQUAL (verified_toolchains.size (),1 );
226+ }
227+
228+ TEST (ToolchainTestGroup,
229+ VerifyToolchain_ConditionalAdd_CompilerVersionFailure) {
230+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
231+ " gcc" ," g++" ," ar" ," ld" );
232+
233+ buildcc::base::VerifyToolchainConfig config;
234+ config.env_vars .clear ();
235+ config.absolute_search_paths .push_back (
236+ (fs::current_path () /" toolchains" /" gcc" ).string ());
237+ config.compiler_version =" 11.0.0" ;
238+
239+ std::vector<std::string> compiler_version{" 10.2.1" };
240+ std::vector<std::string> arch{" none" };
241+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
242+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
243+
244+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
245+ gcc.Verify (config);
246+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
247+ CHECK_EQUAL (verified_toolchains.size (),0 );
248+ }
249+
250+ TEST (ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArch) {
251+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
252+ " gcc" ," g++" ," ar" ," ld" );
253+
254+ buildcc::base::VerifyToolchainConfig config;
255+ config.env_vars .clear ();
256+ config.absolute_search_paths .push_back (
257+ (fs::current_path () /" toolchains" /" gcc" ).string ());
258+ config.target_arch =" arm-none-eabi" ;
259+
260+ std::vector<std::string> compiler_version{" 10.2.1" };
261+ std::vector<std::string> arch{" arm-none-eabi" };
262+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
263+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
264+
265+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
266+ gcc.Verify (config);
267+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
268+ CHECK_EQUAL (verified_toolchains.size (),1 );
269+ }
270+
271+ TEST (ToolchainTestGroup, VerifyToolchain_ConditionalAdd_TargetArchFailure) {
272+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
273+ " gcc" ," g++" ," ar" ," ld" );
274+
275+ buildcc::base::VerifyToolchainConfig config;
276+ config.env_vars .clear ();
277+ config.absolute_search_paths .push_back (
278+ (fs::current_path () /" toolchains" /" gcc" ).string ());
279+ config.target_arch =" none" ;
280+
281+ std::vector<std::string> compiler_version{" 10.2.1" };
282+ std::vector<std::string> arch{" arm-none-eabi" };
283+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
284+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
285+
286+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
287+ gcc.Verify (config);
288+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
289+ CHECK_EQUAL (verified_toolchains.size (),0 );
290+ }
291+
292+ TEST (ToolchainTestGroup, VerifyToolchain_ConditionalAdd_BothFailure) {
293+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
294+ " gcc" ," g++" ," ar" ," ld" );
295+
296+ buildcc::base::VerifyToolchainConfig config;
297+ config.env_vars .clear ();
298+ config.absolute_search_paths .push_back (
299+ (fs::current_path () /" toolchains" /" gcc" ).string ());
300+ config.compiler_version =" none" ;
301+ config.target_arch =" none" ;
302+
303+ std::vector<std::string> compiler_version{" 10.2.1" };
304+ std::vector<std::string> arch{" arm-none-eabi" };
305+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
306+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
307+
308+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
309+ gcc.Verify (config);
310+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
311+ CHECK_EQUAL (verified_toolchains.size (),0 );
312+ }
313+
314+ TEST (ToolchainTestGroup, VerifyToolchain_UpdateFalse) {
315+ buildcc::base::Toolchaingcc (buildcc::base::Toolchain::Id::Gcc," gcc" ," as" ,
316+ " gcc" ," g++" ," ar" ," ld" );
317+
318+ buildcc::base::VerifyToolchainConfig config;
319+ config.env_vars .clear ();
320+ config.absolute_search_paths .push_back (
321+ (fs::current_path () /" toolchains" /" gcc" ).string ());
322+ // config.compiler_version = "none";
323+ // config.target_arch = "none";
324+ config.update =false ;
325+
326+ std::vector<std::string> compiler_version{" 10.2.1" };
327+ std::vector<std::string> arch{" arm-none-eabi" };
328+ buildcc::env::m::CommandExpect_Execute (1 ,true , &compiler_version,nullptr );
329+ buildcc::env::m::CommandExpect_Execute (1 ,true , &arch,nullptr );
330+
331+ std::vector<buildcc::base::VerifiedToolchain> verified_toolchains =
332+ gcc.Verify (config);
333+ UT_PRINT (std::to_string (verified_toolchains.size ()).c_str ());
334+ CHECK_EQUAL (verified_toolchains.size (),1 );
335+ }
336+
207337int main (int ac,char **av) {
208338 buildcc::env::m::VectorStringCopier copier;
209339mock ().installCopier (TEST_VECTOR_STRING_TYPE, copier);