1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
#include <cassert>
#include <iostream>
#include <catch.hpp>
#include "DataFormats/Provenance/interface/ProductNamePattern.h"
#include "DataFormats/Provenance/interface/ProductDescription.h"
#include "DataFormats/TestObjects/interface/ToyProducts.h"
#include "FWCore/Utilities/interface/EDMException.h"
#include "FWCore/Utilities/interface/Exception.h"
namespace {
template <typename T>
edm::ProductDescription make_ProductDescription(std::string const& module,
std::string const& instance,
std::string const& process) {
edm::TypeWithDict type(typeid(T));
edm::ProductDescription prod(edm::InEvent, module, process, type.name(), type.friendlyClassName(), instance, type);
//prod.write(std::cerr);
return prod;
}
} // namespace
TEST_CASE("test ProductNamePattern", "[ProductNamePattern]") {
// int_module__TEST
edm::ProductDescription prod1 = make_ProductDescription<int>("module", "", "TEST");
// int_other__TEST
edm::ProductDescription prod2 = make_ProductDescription<int>("other", "", "TEST");
// int_module_label_TEST
edm::ProductDescription prod3 = make_ProductDescription<int>("module", "label", "TEST");
// int_module__PROC
edm::ProductDescription prod4 = make_ProductDescription<int>("module", "", "PROC");
// double_module__TEST
edm::ProductDescription prod5 = make_ProductDescription<double>("module", "", "TEST");
// Only transient products may have additional underscores in the module label.
CHECK_THROWS(make_ProductDescription<bool>("transient_module", "", "TEST"));
// edmtestTransientIntProduct_transient_module__TEST
edm::ProductDescription prod6 = make_ProductDescription<edmtest::TransientIntProduct>("transient_module", "", "TEST");
SECTION("Invalid pattern \"\"") {
// An empty pattern is invalid.
CHECK_THROWS_AS(edm::ProductNamePattern(""), edm::Exception);
}
SECTION("Simple pattern \"module\"") {
// A simple pattern consisting only of a single field, without any underscores, is interpreted as a module label.
edm::ProductNamePattern pattern("module");
CHECK(pattern.match(prod1));
CHECK(not pattern.match(prod2));
CHECK(pattern.match(prod3));
CHECK(pattern.match(prod4));
CHECK(pattern.match(prod5));
CHECK(not pattern.match(prod6));
}
SECTION("Invalid pattern \"transient_module\"") {
// A pattern with a single underscore is invalid.
CHECK_THROWS_AS(edm::ProductNamePattern("transient_module"), edm::Exception);
}
SECTION("Invalid pattern \"transient_module_label\"") {
// A pattern with two underscores is invalid.
CHECK_THROWS_AS(edm::ProductNamePattern("transient_module_label"), edm::Exception);
}
SECTION("Full branch pattern \"int_module__TEST\"") {
// A full branch pattern must contain four fields, separated by an underscore.
edm::ProductNamePattern pattern("int_module__TEST");
CHECK(pattern.match(prod1));
CHECK(not pattern.match(prod2));
CHECK(not pattern.match(prod3));
CHECK(not pattern.match(prod4));
CHECK(not pattern.match(prod5));
CHECK(not pattern.match(prod6));
}
SECTION("Simple wildcard \"*\"") {
// A single * is interpreted as a wildcard that matches all branches.
edm::ProductNamePattern pattern("*");
CHECK(pattern.match(prod1));
CHECK(pattern.match(prod2));
CHECK(pattern.match(prod3));
CHECK(pattern.match(prod4));
CHECK(pattern.match(prod5));
CHECK(pattern.match(prod6));
}
SECTION("Full branch wildcard \"*_*_*_*\"") {
// Individual fields can be represented by a wildcard.
edm::ProductNamePattern pattern("*_*_*_*");
CHECK(pattern.match(prod1));
CHECK(pattern.match(prod2));
CHECK(pattern.match(prod3));
CHECK(pattern.match(prod4));
CHECK(pattern.match(prod5));
CHECK(pattern.match(prod6));
}
SECTION("Branch wildcard with module label \"*_module_*_*\"") {
// Individual fields can be represented by a wildcard.
edm::ProductNamePattern pattern("*_module_*_*");
CHECK(pattern.match(prod1));
CHECK(not pattern.match(prod2));
CHECK(pattern.match(prod3));
CHECK(pattern.match(prod4));
CHECK(pattern.match(prod5));
CHECK(not pattern.match(prod6));
}
SECTION("Branch wildcard with module label \"*_transient_module_*_*\"") {
// The module label may contain additional underscores.
edm::ProductNamePattern pattern("*_transient_module_*_*");
CHECK(not pattern.match(prod1));
CHECK(not pattern.match(prod2));
CHECK(not pattern.match(prod3));
CHECK(not pattern.match(prod4));
CHECK(not pattern.match(prod5));
CHECK(pattern.match(prod6));
}
SECTION("Branch wildcard with process name \"*_*_*_TEST\"") {
// Individual fields can be represented by a wildcard.
edm::ProductNamePattern pattern("*_*_*_TEST");
CHECK(pattern.match(prod1));
CHECK(pattern.match(prod2));
CHECK(pattern.match(prod3));
CHECK(not pattern.match(prod4));
CHECK(pattern.match(prod5));
CHECK(pattern.match(prod6));
}
}
|