Branch Coverage

src/panda/protocol/websocket/HeaderValueParamsParser.cc
Criterion Covered Total %
branch 56 88 63.6


line true false branch
20 154 0 auto cur = strval.begin();
21 154 0 auto end = strval.end();
29 10508 154 for (; cur != end; ++cur) {
31 9656 852 if (!header_value_special[(uchar)c]) {
35 291 561 if (c == ' ') continue;
37 142 419 if (mode == PARSE_MODE_NAME) {
38 0 142 if (c == ';' || c == ',') {
0 0 if (c == ';' || c == ',') {
40 142 0 values.resize(sz+1);
42 142 0 elem->name.assign(accstr, acc-accstr);
44 142 0 if (c == ';') mode = PARSE_MODE_KEY;
48 280 139 else if (mode == PARSE_MODE_KEY) {
49 273 7 if (c == ';' || c == ',') {
0 273 if (c == ';' || c == ',') {
50 7 0 elem->params.emplace(string(accstr, acc-accstr), string());
7 0 elem->params.emplace(string(accstr, acc-accstr), string());
52 0 7 if (c == ',') mode = PARSE_MODE_NAME;
54 273 0 else if (c == '=') {
55 273 0 key.assign(accstr, acc-accstr);
62 1 138 if (c == ';' || c == ',') {
1 0 if (c == ';' || c == ',') {
63 139 0 elem->params.emplace(key, string(accstr, acc-accstr));
139 0 elem->params.emplace(key, string(accstr, acc-accstr));
65 1 138 if (c == ',') mode = PARSE_MODE_NAME;
73 13 141 if (mode == PARSE_MODE_NAME) values.push_back(HeaderValue{string(accstr, acc-accstr), HeaderValueParams()});
13 0 if (mode == PARSE_MODE_NAME) values.push_back(HeaderValue{string(accstr, acc-accstr), HeaderValueParams()});
13 0 if (mode == PARSE_MODE_NAME) values.push_back(HeaderValue{string(accstr, acc-accstr), HeaderValueParams()});
74 7 134 else if (mode == PARSE_MODE_KEY) elem->params.emplace(string(accstr, acc-accstr), string());
7 0 else if (mode == PARSE_MODE_KEY) elem->params.emplace(string(accstr, acc-accstr), string());
7 0 else if (mode == PARSE_MODE_KEY) elem->params.emplace(string(accstr, acc-accstr), string());
75 134 0 else /* PARSE_MODE_VAL */ elem->params.emplace(key, string(accstr, acc-accstr));
134 0 else /* PARSE_MODE_VAL */ elem->params.emplace(key, string(accstr, acc-accstr));
81 168 168 for (const auto& elem : values) {
82 168 0 str += elem.name;
83 315 168 for (const auto& param : elem.params) {
84 315 0 str += "; ";
85 315 0 str += param.first;
86 300 15 if (param.second) {
87 300 0 str += '=';
88 300 0 str += param.second;
91 168 0 str += ", ";
94 168 0 if (str) str.length(str.length() - 2);
99 18 0 }}}
18 0 }}}