Skip to content

Commit a8b5979

Browse files
committed
fix: improve error message formatting and add test for unknown parameter type
1 parent 9d6c811 commit a8b5979

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

cucumber_cpp/library/cucumber_expression/Errors.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ namespace cucumber_cpp::library::cucumber_expression
2020
auto pointer = PointAt(node.Start());
2121
if (node.Start() + 1 < node.End())
2222
{
23-
for (auto i = node.Start() + 1; i < node.End(); ++i)
24-
pointer += "-";
23+
pointer.resize(node.End() - 1, '-');
2524
pointer += "^";
2625
}
2726
return pointer;
@@ -161,8 +160,8 @@ For more complicated expressions consider using a regular expression instead.)",
161160
node.Start(),
162161
expression,
163162
PointAtLocated(node),
164-
std::format(R"('Undefined parameter type {}')", undefinedParameterName),
165-
std::format(R"('Please register a ParameterType for {}')", undefinedParameterName),
163+
std::format(R"(Undefined parameter type '{}')", undefinedParameterName),
164+
std::format(R"(Please register a ParameterType for '{}')", undefinedParameterName),
166165
}
167166
{}
168167
}

cucumber_cpp/library/cucumber_expression/test/TestExpression.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
#include "cucumber_cpp/library/cucumber_expression/Errors.hpp"
23
#include "cucumber_cpp/library/cucumber_expression/Expression.hpp"
34
#include "cucumber_cpp/library/cucumber_expression/ParameterRegistry.hpp"
45
#include "yaml-cpp/node/node.h"
@@ -200,4 +201,24 @@ namespace cucumber_cpp::library::cucumber_expression
200201
EXPECT_THAT(std::any_cast<bool>((*Match(R"__({bool})__", R"__(off)__"))[0]), testing::IsFalse());
201202
EXPECT_THAT(std::any_cast<bool>((*Match(R"__({bool})__", R"__(foo)__"))[0]), testing::IsFalse());
202203
}
204+
205+
TEST_F(TestExpression, ThrowUnknownParameterType)
206+
{
207+
auto expr = "I have {doesnotexist} cuke(s)";
208+
209+
try
210+
{
211+
Expression expression{ expr, parameterRegistry };
212+
FAIL() << "Expected UndefinedParameterTypeError to be thrown";
213+
}
214+
catch (UndefinedParameterTypeError e)
215+
{
216+
EXPECT_THAT(e.what(), testing::StrEq("This Cucumber Expression has a problem at column 8:\n"
217+
"\n"
218+
"I have {doesnotexist} cuke(s)\n"
219+
" ^------------^\n"
220+
"Undefined parameter type 'doesnotexist'\n"
221+
"Please register a ParameterType for 'doesnotexist'\n"));
222+
}
223+
}
203224
}

0 commit comments

Comments
 (0)