cmCTestTestCommand.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file LICENSE.rst or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <memory>
  6. #include <string>
  7. #include <type_traits>
  8. #include <cm/optional>
  9. #include <cmext/string_view>
  10. #include "cmArgumentParser.h"
  11. #include "cmArgumentParserTypes.h"
  12. #include "cmCTestHandlerCommand.h"
  13. class cmExecutionStatus;
  14. class cmCTestTestHandler;
  15. class cmCTestTestCommand : public cmCTestHandlerCommand
  16. {
  17. public:
  18. using cmCTestHandlerCommand::cmCTestHandlerCommand;
  19. protected:
  20. struct TestArguments : HandlerArguments
  21. {
  22. std::string Start;
  23. std::string End;
  24. std::string Stride;
  25. std::string Exclude;
  26. std::string Include;
  27. std::string ExcludeLabel;
  28. std::string IncludeLabel;
  29. std::string IncludeTestsFromFile;
  30. std::string ExcludeTestsFromFile;
  31. std::string ExcludeFixture;
  32. std::string ExcludeFixtureSetup;
  33. std::string ExcludeFixtureCleanup;
  34. cm::optional<ArgumentParser::Maybe<std::string>> ParallelLevel;
  35. std::string Repeat;
  36. std::string ScheduleRandom;
  37. std::string ScheduleRandomSeed;
  38. std::string StopTime;
  39. std::string TestLoad;
  40. std::string ResourceSpecFile;
  41. std::string OutputJUnit;
  42. bool StopOnFailure = false;
  43. };
  44. template <typename Args>
  45. static auto MakeTestParser() -> cmArgumentParser<Args>
  46. {
  47. static_assert(std::is_base_of<TestArguments, Args>::value, "");
  48. return cmArgumentParser<Args>{ MakeHandlerParser<Args>() }
  49. .Bind("START"_s, &TestArguments::Start)
  50. .Bind("END"_s, &TestArguments::End)
  51. .Bind("STRIDE"_s, &TestArguments::Stride)
  52. .Bind("EXCLUDE"_s, &TestArguments::Exclude)
  53. .Bind("INCLUDE"_s, &TestArguments::Include)
  54. .Bind("EXCLUDE_LABEL"_s, &TestArguments::ExcludeLabel)
  55. .Bind("INCLUDE_LABEL"_s, &TestArguments::IncludeLabel)
  56. .Bind("EXCLUDE_FROM_FILE"_s, &TestArguments::ExcludeTestsFromFile)
  57. .Bind("INCLUDE_FROM_FILE"_s, &TestArguments::IncludeTestsFromFile)
  58. .Bind("EXCLUDE_FIXTURE"_s, &TestArguments::ExcludeFixture)
  59. .Bind("EXCLUDE_FIXTURE_SETUP"_s, &TestArguments::ExcludeFixtureSetup)
  60. .Bind("EXCLUDE_FIXTURE_CLEANUP"_s, &TestArguments::ExcludeFixtureCleanup)
  61. .Bind("PARALLEL_LEVEL"_s, &TestArguments::ParallelLevel)
  62. .Bind("REPEAT"_s, &TestArguments::Repeat)
  63. .Bind("SCHEDULE_RANDOM"_s, &TestArguments::ScheduleRandom)
  64. .Bind("SCHEDULE_RANDOM_SEED"_s, &TestArguments::ScheduleRandomSeed)
  65. .Bind("STOP_TIME"_s, &TestArguments::StopTime)
  66. .Bind("TEST_LOAD"_s, &TestArguments::TestLoad)
  67. .Bind("RESOURCE_SPEC_FILE"_s, &TestArguments::ResourceSpecFile)
  68. .Bind("STOP_ON_FAILURE"_s, &TestArguments::StopOnFailure)
  69. .Bind("OUTPUT_JUNIT"_s, &TestArguments::OutputJUnit);
  70. }
  71. private:
  72. std::string GetName() const override { return "ctest_test"; }
  73. virtual std::unique_ptr<cmCTestTestHandler> InitializeActualHandler(
  74. HandlerArguments& arguments, cmExecutionStatus& status) const;
  75. std::unique_ptr<cmCTestGenericHandler> InitializeHandler(
  76. HandlerArguments& arguments, cmExecutionStatus& status) const override;
  77. bool InitialPass(std::vector<std::string> const& args,
  78. cmExecutionStatus& status) const override;
  79. };