Skip to content

Commit 9d49116

Browse files
committed
add parser tests using catch2
1 parent a48e55d commit 9d49116

File tree

6 files changed

+104
-4
lines changed

6 files changed

+104
-4
lines changed

FWCore/Framework/bin/cmsRun.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ namespace {
8585
};
8686
} // namespace
8787

88-
int main(int argc, char* argv[]) {
88+
int main(int argc, const char* argv[]) {
8989
edm::TimingServiceBase::jobStarted();
9090

9191
int returnCode = 0;

FWCore/Framework/interface/CmsRunParser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace edm {
1010
public:
1111
using MapOrExit = std::variant<boost::program_options::variables_map, int>;
1212
CmsRunParser(const char* name);
13-
MapOrExit parse(int argc, char* argv[]) const;
13+
MapOrExit parse(int argc, const char* argv[]) const;
1414
//variant helpers
1515
static bool hasVM(const MapOrExit& output) {
1616
return std::holds_alternative<boost::program_options::variables_map>(output);

FWCore/Framework/src/CmsRunParser.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ namespace edm {
8787

8888
all_options_.add(desc_).add(hidden);
8989
}
90-
CmsRunParser::MapOrExit CmsRunParser::parse(int argc, char* argv[]) const {
90+
CmsRunParser::MapOrExit CmsRunParser::parse(int argc, const char* argv[]) const {
9191
boost::program_options::variables_map vm;
9292
try {
9393
store(boost::program_options::command_line_parser(argc, argv)

FWCore/Framework/test/BuildFile.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,13 @@
379379
<test name="testFWCoreFrameworkWrongOptionsNumberOfStreamsType" command="run_wrongOptionsType.sh numberOfStreams 'cms.untracked.int32(1)'"/>
380380
<test name="testFWCoreFrameworkWrongOptionssizeOfStackForThreadsInKBType" command="run_wrongOptionsType.sh sizeOfStackForThreadsInKB 'cms.untracked.int32(1024)'"/>
381381

382-
<test name="testFWCoreFrameworkCmsRunParser" command="run_cmsRun_parser.sh"/>
382+
<bin file="test_catch2_main.cc,test_catch2_CmsRunParser.cc" name="TestFWCoreFrameworkCmsRunParser">
383+
<use name="catch2"/>
384+
<use name="FWCore/Framework"/>
385+
<use name="FWCore/Utilities"/>
386+
</bin>
387+
388+
<test name="testFWCoreFrameworkCmsRunParsing" command="run_cmsRun_parsing.sh"/>
383389
<test name="testFWCoreFrameworkCmsRunVarparsing" command="run_cmsRun_varparsing.sh"/>
384390
<test name="testFWCoreFrameworkCmsRunArgparse" command="run_cmsRun_argparse.sh"/>
385391
<test name="testFWCoreFrameworkCmsRunArgv" command="run_cmsRun_argv.sh"/>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include "catch.hpp"
2+
3+
#include "FWCore/Framework/interface/CmsRunParser.h"
4+
#include "FWCore/Utilities/interface/EDMException.h"
5+
6+
#include <string>
7+
8+
TEST_CASE("test cmsRun command line parsing", "[commandline]") {
9+
edm::CmsRunParser parser("cmsRun");
10+
11+
SECTION("No arguments") {
12+
constexpr int kSize = 1;
13+
const char* args[kSize] = {"cmsRun"};
14+
const auto& output = parser.parse(kSize, args);
15+
16+
REQUIRE(edm::CmsRunParser::hasVM(output));
17+
auto vm = edm::CmsRunParser::getVM(output);
18+
19+
REQUIRE(not vm.count(edm::CmsRunParser::kHelpOpt));
20+
REQUIRE(not vm.count(edm::CmsRunParser::kParameterSetOpt));
21+
REQUIRE(not vm.count(edm::CmsRunParser::kStrictOpt));
22+
REQUIRE(not vm.count(edm::CmsRunParser::kJobreportOpt));
23+
REQUIRE(not vm.count(edm::CmsRunParser::kEnableJobreportOpt));
24+
REQUIRE(not vm.count(edm::CmsRunParser::kNumberOfThreadsOpt));
25+
REQUIRE(not vm.count(edm::CmsRunParser::kSizeOfStackForThreadOpt));
26+
REQUIRE(not vm.count(edm::CmsRunParser::kJobModeOpt));
27+
REQUIRE(not vm.count(edm::CmsRunParser::kPythonOpt));
28+
REQUIRE(not vm.count(edm::CmsRunParser::kCmdOpt));
29+
}
30+
31+
SECTION("help") {
32+
constexpr int kSize = 2;
33+
const char* args[kSize] = {"cmsRun", "-h"};
34+
const auto& output = parser.parse(kSize, args);
35+
36+
REQUIRE(not edm::CmsRunParser::hasVM(output));
37+
REQUIRE(edm::CmsRunParser::getExit(output) == 0);
38+
}
39+
40+
SECTION("wrong") {
41+
constexpr int kSize = 2;
42+
const char* args[kSize] = {"cmsRun", "--wrong"};
43+
const auto& output = parser.parse(kSize, args);
44+
45+
REQUIRE(not edm::CmsRunParser::hasVM(output));
46+
REQUIRE(edm::CmsRunParser::getExit(output) == edm::errors::CommandLineProcessing);
47+
}
48+
49+
SECTION("Config file only") {
50+
constexpr int kSize = 2;
51+
const std::string arg("config.py");
52+
const char* args[kSize] = {"cmsRun", arg.c_str()};
53+
const auto& output = parser.parse(kSize, args);
54+
55+
REQUIRE(edm::CmsRunParser::hasVM(output));
56+
auto vm = edm::CmsRunParser::getVM(output);
57+
58+
REQUIRE(vm.count(edm::CmsRunParser::kParameterSetOpt));
59+
REQUIRE(vm[edm::CmsRunParser::kParameterSetOpt].as<std::string>() == arg);
60+
REQUIRE(not vm.count(edm::CmsRunParser::kHelpOpt));
61+
REQUIRE(not vm.count(edm::CmsRunParser::kStrictOpt));
62+
REQUIRE(not vm.count(edm::CmsRunParser::kJobreportOpt));
63+
REQUIRE(not vm.count(edm::CmsRunParser::kEnableJobreportOpt));
64+
REQUIRE(not vm.count(edm::CmsRunParser::kNumberOfThreadsOpt));
65+
REQUIRE(not vm.count(edm::CmsRunParser::kSizeOfStackForThreadOpt));
66+
REQUIRE(not vm.count(edm::CmsRunParser::kJobModeOpt));
67+
REQUIRE(not vm.count(edm::CmsRunParser::kPythonOpt));
68+
REQUIRE(not vm.count(edm::CmsRunParser::kCmdOpt));
69+
}
70+
71+
SECTION("Command line input only") {
72+
constexpr int kSize = 3;
73+
const std::string arg(
74+
"import FWCore.ParameterSet.Config as cms; process = cms.Process('Test'); "
75+
"process.source=cms.Source('EmptySource'); process.maxEvents.input=10; print('Test3')");
76+
const char* args[kSize] = {"cmsRun", "-c", arg.c_str()};
77+
const auto& output = parser.parse(kSize, args);
78+
79+
REQUIRE(edm::CmsRunParser::hasVM(output));
80+
auto vm = edm::CmsRunParser::getVM(output);
81+
82+
REQUIRE(not vm.count(edm::CmsRunParser::kParameterSetOpt));
83+
REQUIRE(not vm.count(edm::CmsRunParser::kHelpOpt));
84+
REQUIRE(not vm.count(edm::CmsRunParser::kStrictOpt));
85+
REQUIRE(not vm.count(edm::CmsRunParser::kJobreportOpt));
86+
REQUIRE(not vm.count(edm::CmsRunParser::kEnableJobreportOpt));
87+
REQUIRE(not vm.count(edm::CmsRunParser::kNumberOfThreadsOpt));
88+
REQUIRE(not vm.count(edm::CmsRunParser::kSizeOfStackForThreadOpt));
89+
REQUIRE(not vm.count(edm::CmsRunParser::kJobModeOpt));
90+
REQUIRE(not vm.count(edm::CmsRunParser::kPythonOpt));
91+
REQUIRE(vm.count(edm::CmsRunParser::kCmdOpt));
92+
REQUIRE(vm[edm::CmsRunParser::kCmdOpt].as<std::string>() == arg);
93+
}
94+
}

0 commit comments

Comments
 (0)