@@ -274,6 +274,167 @@ int main(int argc, char** argv)
274274 scriptInfo.Equals (parsedOutput));
275275 };
276276
277+ ssTEST (" ScriptInfo Should Parse Fields Without Platform And Profile As Default" )
278+ {
279+ ssTEST_OUTPUT_SETUP
280+ (
281+ // NOTE: This is just a test YAML for validating parsing, don't use it for actual config
282+ const char * yamlStr = R"(
283+ Language: C++
284+ OverrideCompileFlags:
285+ Remove: /W4
286+ Append: /W3
287+ OverrideLinkFlags:
288+ Remove: /SUBSYSTEM:CONSOLE
289+ Append: /SUBSYSTEM:WINDOWS
290+ OtherFilesToBeCompiled:
291+ - src/extra.cpp
292+ - src/debug.cpp
293+ IncludePaths:
294+ - include
295+ - src/include
296+ Defines:
297+ - _DEBUG
298+ - VERSION=1.0.0
299+ Setup:
300+ - echo 1
301+ - echo 2
302+ PreBuild:
303+ - echo 3
304+ - echo 4
305+ PostBuild:
306+ - echo 5
307+ - echo 6
308+ Cleanup:
309+ - echo 7
310+ - echo 8
311+ )" ;
312+
313+ ryml::Tree tree = ryml::parse_in_arena (c4::to_csubstr (yamlStr));
314+ ryml::ConstNodeRef root = tree.rootref ();
315+
316+ runcpp2::Data::ScriptInfo scriptInfo;
317+ );
318+
319+ ssTEST_OUTPUT_EXECUTION
320+ (
321+ bool parseResult = scriptInfo.ParseYAML_Node (root);
322+ );
323+
324+ ssTEST_OUTPUT_ASSERT (" ParseYAML_Node should succeed" , parseResult);
325+
326+ // Verify basic fields
327+ ssTEST_OUTPUT_ASSERT (" Language" , scriptInfo.Language == " C++" );
328+
329+ // Verify OverrideCompileFlags with default platform and profile
330+ ssTEST_OUTPUT_SETUP
331+ (
332+ const runcpp2::Data::FlagsOverrideInfo& defaultCompileFlags =
333+ scriptInfo .OverrideCompileFlags
334+ .at (" DefaultPlatform" )
335+ .FlagsOverrides
336+ .at (" DefaultProfile" );
337+ );
338+ ssTEST_OUTPUT_ASSERT (" Default compile remove flag" , defaultCompileFlags.Remove == " /W4" );
339+ ssTEST_OUTPUT_ASSERT (" Default compile append flag" , defaultCompileFlags.Append == " /W3" );
340+
341+ // Verify OverrideLinkFlags with default platform and profile
342+ ssTEST_OUTPUT_SETUP
343+ (
344+ const runcpp2::Data::FlagsOverrideInfo& defaultLinkFlags =
345+ scriptInfo .OverrideLinkFlags
346+ .at (" DefaultPlatform" )
347+ .FlagsOverrides
348+ .at (" DefaultProfile" );
349+ );
350+ ssTEST_OUTPUT_ASSERT ( " Default link remove flag" ,
351+ defaultLinkFlags.Remove == " /SUBSYSTEM:CONSOLE" );
352+ ssTEST_OUTPUT_ASSERT ( " Default link append flag" ,
353+ defaultLinkFlags.Append == " /SUBSYSTEM:WINDOWS" );
354+
355+ // Verify OtherFilesToBeCompiled with default platform and profile
356+ ssTEST_OUTPUT_SETUP
357+ (
358+ const std::vector<ghc::filesystem::path>& defaultCompileFiles =
359+ scriptInfo .OtherFilesToBeCompiled .at (" DefaultPlatform" ).Paths .at (" DefaultProfile" );
360+ );
361+ ssTEST_OUTPUT_ASSERT (" Default files count" , defaultCompileFiles.size () == 2 );
362+ ssTEST_OUTPUT_ASSERT (" Default first file" , defaultCompileFiles.at (0 ) == " src/extra.cpp" );
363+ ssTEST_OUTPUT_ASSERT (" Default second file" , defaultCompileFiles.at (1 ) == " src/debug.cpp" );
364+
365+ // Verify IncludePaths with default platform and profile
366+ ssTEST_OUTPUT_SETUP
367+ (
368+ const std::vector<ghc::filesystem::path>& defaultIncludePaths =
369+ scriptInfo.IncludePaths .at (" DefaultPlatform" ).Paths .at (" DefaultProfile" );
370+ );
371+ ssTEST_OUTPUT_ASSERT (" Default include paths count" , defaultIncludePaths.size () == 2 );
372+ ssTEST_OUTPUT_ASSERT (" Default first include path" , defaultIncludePaths.at (0 ) == " include" );
373+ ssTEST_OUTPUT_ASSERT ( " Default second include path" ,
374+ defaultIncludePaths.at (1 ) == " src/include" );
375+
376+ // Verify Defines with default platform and profile
377+ ssTEST_OUTPUT_SETUP
378+ (
379+ const std::vector<runcpp2::Data::Define>& defaultDefines =
380+ scriptInfo.Defines .at (" DefaultPlatform" ).Defines .at (" DefaultProfile" );
381+ );
382+ ssTEST_OUTPUT_ASSERT (" Default defines count" , defaultDefines.size () == 2 );
383+ ssTEST_OUTPUT_ASSERT (" Default first define" , defaultDefines.at (0 ).Name == " _DEBUG" );
384+ ssTEST_OUTPUT_ASSERT (" Default second define name" , defaultDefines.at (1 ).Name == " VERSION" );
385+ ssTEST_OUTPUT_ASSERT (" Default second define value" , defaultDefines.at (1 ).Value == " 1.0.0" );
386+
387+ // Verify Setup with default platform and profile
388+ ssTEST_OUTPUT_SETUP
389+ (
390+ const std::vector<std::string>& defaultSetupCommands =
391+ scriptInfo.Setup .at (" DefaultPlatform" ).CommandSteps .at (" DefaultProfile" );
392+ );
393+ ssTEST_OUTPUT_ASSERT (" Default setup commands count" , defaultSetupCommands.size () == 2 );
394+ ssTEST_OUTPUT_ASSERT ( " Default first setup command" ,
395+ defaultSetupCommands.at (0 ) == " echo 1" );
396+ ssTEST_OUTPUT_ASSERT ( " Default second setup command" ,
397+ defaultSetupCommands.at (1 ) == " echo 2" );
398+
399+ // Verify PreBuild with default platform and profile
400+ ssTEST_OUTPUT_SETUP
401+ (
402+ const std::vector<std::string>& defaultPreBuildCommands =
403+ scriptInfo.PreBuild .at (" DefaultPlatform" ).CommandSteps .at (" DefaultProfile" );
404+ );
405+ ssTEST_OUTPUT_ASSERT (" Default prebuild commands count" , defaultPreBuildCommands.size () == 2 );
406+ ssTEST_OUTPUT_ASSERT ( " Default first prebuild command" ,
407+ defaultPreBuildCommands.at (0 ) == " echo 3" );
408+ ssTEST_OUTPUT_ASSERT ( " Default second prebuild command" ,
409+ defaultPreBuildCommands.at (1 ) == " echo 4" );
410+
411+ // Verify PostBuild with default platform and profile
412+ ssTEST_OUTPUT_SETUP
413+ (
414+ const std::vector<std::string>& defaultPostBuildCommands =
415+ scriptInfo.PostBuild .at (" DefaultPlatform" ).CommandSteps .at (" DefaultProfile" );
416+ );
417+ ssTEST_OUTPUT_ASSERT ( " Default postbuild commands count" ,
418+ defaultPostBuildCommands.size () == 2 );
419+ ssTEST_OUTPUT_ASSERT ( " Default first postbuild command" ,
420+ defaultPostBuildCommands.at (0 ) == " echo 5" );
421+ ssTEST_OUTPUT_ASSERT ( " Default second postbuild command" ,
422+ defaultPostBuildCommands.at (1 ) == " echo 6" );
423+
424+ // Verify Cleanup with default platform and profile
425+ ssTEST_OUTPUT_SETUP
426+ (
427+ const std::vector<std::string>& defaultCleanupCommands =
428+ scriptInfo.Cleanup .at (" DefaultPlatform" ).CommandSteps .at (" DefaultProfile" );
429+ );
430+ ssTEST_OUTPUT_ASSERT ( " Default cleanup commands count" ,
431+ defaultCleanupCommands.size () == 2 );
432+ ssTEST_OUTPUT_ASSERT ( " Default first cleanup command" ,
433+ defaultCleanupCommands.at (0 ) == " echo 7" );
434+ ssTEST_OUTPUT_ASSERT ( " Default second cleanup command" ,
435+ defaultCleanupCommands.at (1 ) == " echo 8" );
436+ };
437+
277438 ssTEST_END_TEST_GROUP ();
278439 return 0 ;
279440}
0 commit comments