File indexing completed on 2023-10-25 09:39:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #define CATCH_CONFIG_MAIN
0016 #include "catch.hpp"
0017
0018
0019 #include "DataFormats/Histograms/interface/MonitorElementCollection.h"
0020
0021 TEST_CASE("MonitorElementData::Path", "[MonitorElementData_Path]") {
0022 MonitorElementData::Path p;
0023
0024 SECTION("Canonical Paths") {
0025 SECTION("short path") {
0026 std::string pathName = "Foo/";
0027 p.set(pathName, MonitorElementData::Path::Type::DIR);
0028 REQUIRE(p.getDirname() == pathName);
0029 REQUIRE(p.getObjectname().empty());
0030 REQUIRE(p.getFullname() == pathName);
0031 }
0032
0033 SECTION("2 dirs") {
0034 std::string pathName = "Foo/Bar/";
0035 p.set(pathName, MonitorElementData::Path::Type::DIR);
0036 REQUIRE(p.getDirname() == pathName);
0037 REQUIRE(p.getObjectname().empty());
0038 REQUIRE(p.getFullname() == pathName);
0039 }
0040
0041 SECTION("long path") {
0042 std::string pathName = "This/Is/A/Very/Long/Path/Name/";
0043 p.set(pathName, MonitorElementData::Path::Type::DIR);
0044 REQUIRE(p.getDirname() == pathName);
0045 REQUIRE(p.getObjectname().empty());
0046 REQUIRE(p.getFullname() == pathName);
0047 }
0048 }
0049 SECTION("extra /") {
0050 SECTION("only /") {
0051 std::string pathName = "/";
0052 std::string canonical = "";
0053 p.set(pathName, MonitorElementData::Path::Type::DIR);
0054 REQUIRE(p.getDirname() == canonical);
0055 REQUIRE(p.getObjectname().empty());
0056 REQUIRE(p.getFullname() == canonical);
0057 }
0058 SECTION("only //") {
0059 std::string pathName = "//";
0060 std::string canonical = "";
0061 p.set(pathName, MonitorElementData::Path::Type::DIR);
0062 REQUIRE(p.getDirname() == canonical);
0063 REQUIRE(p.getObjectname().empty());
0064 REQUIRE(p.getFullname() == canonical);
0065 }
0066 SECTION("leading /") {
0067 std::string pathName = "/Foo/";
0068 std::string canonical = "Foo/";
0069 p.set(pathName, MonitorElementData::Path::Type::DIR);
0070 REQUIRE(p.getDirname() == canonical);
0071 REQUIRE(p.getObjectname().empty());
0072 REQUIRE(p.getFullname() == canonical);
0073 }
0074 SECTION("ending //") {
0075 std::string pathName = "Foo//";
0076 std::string canonical = "Foo/";
0077 p.set(pathName, MonitorElementData::Path::Type::DIR);
0078 REQUIRE(p.getDirname() == canonical);
0079 REQUIRE(p.getObjectname().empty());
0080 REQUIRE(p.getFullname() == canonical);
0081 }
0082 SECTION("middle //") {
0083 std::string pathName = "Foo//Bar/";
0084 std::string canonical = "Foo/Bar/";
0085 p.set(pathName, MonitorElementData::Path::Type::DIR);
0086 REQUIRE(p.getDirname() == canonical);
0087 REQUIRE(p.getObjectname().empty());
0088 REQUIRE(p.getFullname() == canonical);
0089 }
0090 }
0091 SECTION("missing end /") {
0092 SECTION("blank") {
0093 std::string pathName = "";
0094 std::string canonical = "";
0095 p.set(pathName, MonitorElementData::Path::Type::DIR);
0096 REQUIRE(p.getDirname() == canonical);
0097 REQUIRE(p.getObjectname().empty());
0098 REQUIRE(p.getFullname() == canonical);
0099 }
0100 SECTION("one dir") {
0101 std::string pathName = "Foo";
0102 std::string canonical = "Foo/";
0103 p.set(pathName, MonitorElementData::Path::Type::DIR);
0104 REQUIRE(p.getDirname() == canonical);
0105 REQUIRE(p.getObjectname().empty());
0106 REQUIRE(p.getFullname() == canonical);
0107 }
0108 SECTION("two dir") {
0109 std::string pathName = "Foo/Bar";
0110 std::string canonical = "Foo/Bar/";
0111 p.set(pathName, MonitorElementData::Path::Type::DIR);
0112 REQUIRE(p.getDirname() == canonical);
0113 REQUIRE(p.getObjectname().empty());
0114 REQUIRE(p.getFullname() == canonical);
0115 }
0116 }
0117 SECTION("up dir") {
0118 SECTION("to beginning") {
0119 SECTION("end /") {
0120 std::string pathName = "Foo/../";
0121 std::string canonical = "";
0122 p.set(pathName, MonitorElementData::Path::Type::DIR);
0123 REQUIRE(p.getDirname() == canonical);
0124 REQUIRE(p.getObjectname().empty());
0125 REQUIRE(p.getFullname() == canonical);
0126 }
0127 SECTION("missing end /") {
0128 std::string pathName = "Foo/..";
0129 std::string canonical = "";
0130 p.set(pathName, MonitorElementData::Path::Type::DIR);
0131 REQUIRE(p.getDirname() == canonical);
0132 REQUIRE(p.getObjectname().empty());
0133 REQUIRE(p.getFullname() == canonical);
0134 }
0135 }
0136 SECTION("beyond beginning") {
0137 SECTION("end /") {
0138 std::string pathName = "Foo/../..";
0139 std::string canonical = "";
0140 p.set(pathName, MonitorElementData::Path::Type::DIR);
0141 REQUIRE(p.getDirname() == canonical);
0142 REQUIRE(p.getObjectname().empty());
0143 REQUIRE(p.getFullname() == canonical);
0144 }
0145 SECTION("missing end /") {
0146 std::string pathName = "Foo/../..";
0147 std::string canonical = "";
0148 p.set(pathName, MonitorElementData::Path::Type::DIR);
0149 REQUIRE(p.getDirname() == canonical);
0150 REQUIRE(p.getObjectname().empty());
0151 REQUIRE(p.getFullname() == canonical);
0152 }
0153 }
0154 SECTION("middle") {
0155 SECTION("back to beginning") {
0156 std::string pathName = "Foo/../Bar/";
0157 std::string canonical = "Bar/";
0158 p.set(pathName, MonitorElementData::Path::Type::DIR);
0159 REQUIRE(p.getDirname() == canonical);
0160 REQUIRE(p.getObjectname().empty());
0161 REQUIRE(p.getFullname() == canonical);
0162 }
0163 SECTION("midway") {
0164 std::string pathName = "Foo/Bar/../Biz/";
0165 std::string canonical = "Foo/Biz/";
0166 p.set(pathName, MonitorElementData::Path::Type::DIR);
0167 REQUIRE(p.getDirname() == canonical);
0168 REQUIRE(p.getObjectname().empty());
0169 REQUIRE(p.getFullname() == canonical);
0170 }
0171 SECTION("last") {
0172 std::string pathName = "Foo/Bar/../";
0173 std::string canonical = "Foo/";
0174 p.set(pathName, MonitorElementData::Path::Type::DIR);
0175 REQUIRE(p.getDirname() == canonical);
0176 REQUIRE(p.getObjectname().empty());
0177 REQUIRE(p.getFullname() == canonical);
0178 }
0179 }
0180 SECTION("multiple consecutive") {
0181 SECTION("two") {
0182 SECTION("back to beginning") {
0183 std::string pathName = "Foo/Biz/../../Bar/";
0184 std::string canonical = "Bar/";
0185 p.set(pathName, MonitorElementData::Path::Type::DIR);
0186 REQUIRE(p.getDirname() == canonical);
0187 REQUIRE(p.getObjectname().empty());
0188 REQUIRE(p.getFullname() == canonical);
0189 }
0190 SECTION("midway") {
0191 std::string pathName = "Foo/Bar/Blah/../../Biz/";
0192 std::string canonical = "Foo/Biz/";
0193 p.set(pathName, MonitorElementData::Path::Type::DIR);
0194 REQUIRE(p.getDirname() == canonical);
0195 REQUIRE(p.getObjectname().empty());
0196 REQUIRE(p.getFullname() == canonical);
0197 }
0198 SECTION("last") {
0199 std::string pathName = "Foo/Bar/Blah/../../";
0200 std::string canonical = "Foo/";
0201 p.set(pathName, MonitorElementData::Path::Type::DIR);
0202 REQUIRE(p.getDirname() == canonical);
0203 REQUIRE(p.getObjectname().empty());
0204 REQUIRE(p.getFullname() == canonical);
0205 }
0206 }
0207 SECTION("three") {
0208 SECTION("back to beginning") {
0209 std::string pathName = "Foo/Biz/Bleep/../../../Bar/";
0210 std::string canonical = "Bar/";
0211 p.set(pathName, MonitorElementData::Path::Type::DIR);
0212 REQUIRE(p.getDirname() == canonical);
0213 REQUIRE(p.getObjectname().empty());
0214 REQUIRE(p.getFullname() == canonical);
0215 }
0216 SECTION("midway") {
0217 std::string pathName = "Foo/Bar/Blah/Bleep/../../../Biz/";
0218 std::string canonical = "Foo/Biz/";
0219 p.set(pathName, MonitorElementData::Path::Type::DIR);
0220 REQUIRE(p.getDirname() == canonical);
0221 REQUIRE(p.getObjectname().empty());
0222 REQUIRE(p.getFullname() == canonical);
0223 }
0224 SECTION("last") {
0225 std::string pathName = "Foo/Bar/Blah/Bleep/../../../";
0226 std::string canonical = "Foo/";
0227 p.set(pathName, MonitorElementData::Path::Type::DIR);
0228 REQUIRE(p.getDirname() == canonical);
0229 REQUIRE(p.getObjectname().empty());
0230 REQUIRE(p.getFullname() == canonical);
0231 }
0232 }
0233 }
0234 }
0235 SECTION("object") {
0236 SECTION("no dir") {
0237 std::string pathName = "bar";
0238 std::string canonical = "";
0239 std::string objectName = "bar";
0240 p.set(pathName, MonitorElementData::Path::Type::DIR_AND_NAME);
0241 REQUIRE(p.getDirname() == canonical);
0242 REQUIRE(p.getObjectname() == objectName);
0243 REQUIRE(p.getFullname() == canonical + objectName);
0244 }
0245 SECTION("1 dir") {
0246 std::string pathName = "Foo/bar";
0247 std::string canonical = "Foo/";
0248 std::string objectName = "bar";
0249 p.set(pathName, MonitorElementData::Path::Type::DIR_AND_NAME);
0250 REQUIRE(p.getDirname() == canonical);
0251 REQUIRE(p.getObjectname() == objectName);
0252 REQUIRE(p.getFullname() == canonical + objectName);
0253 }
0254 SECTION("2 dir") {
0255 std::string pathName = "Foo/Biz/bar";
0256 std::string canonical = "Foo/Biz/";
0257 std::string objectName = "bar";
0258 p.set(pathName, MonitorElementData::Path::Type::DIR_AND_NAME);
0259 REQUIRE(p.getDirname() == canonical);
0260 REQUIRE(p.getObjectname() == objectName);
0261 REQUIRE(p.getFullname() == canonical + objectName);
0262 }
0263 }
0264 }