Skip to content

Commit e2add96

Browse files
committed
chore: extending FailureHandler tests
1 parent 70b1471 commit e2add96

File tree

4 files changed

+91
-38
lines changed

4 files changed

+91
-38
lines changed

cucumber_cpp/library/engine/ContextManager.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,18 +91,16 @@ namespace cucumber_cpp::library::engine
9191

9292
[[nodiscard]] ScopedStepContext CreateStepContext(const StepInfo& stepInfo);
9393

94+
cucumber_cpp::library::engine::StepContext& StepContext();
95+
96+
cucumber_cpp::library::engine::RunnerContext& CurrentContext();
97+
9498
private:
9599
void DisposeFeatureContext();
96100
void DisposeRuleContext();
97101
void DisposeScenarioContext();
98102
void DisposeStepContext();
99103

100-
public:
101-
cucumber_cpp::library::engine::StepContext& StepContext();
102-
103-
cucumber_cpp::library::engine::RunnerContext& CurrentContext();
104-
105-
private:
106104
std::shared_ptr<cucumber_cpp::library::engine::ProgramContext> programContext;
107105
std::shared_ptr<cucumber_cpp::library::engine::FeatureContext> featureContext;
108106
std::shared_ptr<cucumber_cpp::library::engine::RuleContext> ruleContext;

cucumber_cpp/library/engine/FailureHandler.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
#include "cucumber_cpp/library/engine/ContextManager.hpp"
21
#include "cucumber_cpp/library/engine/FailureHandler.hpp"
2+
#include "cucumber_cpp/library/engine/ContextManager.hpp"
33
#include "cucumber_cpp/library/engine/Result.hpp"
44
#include "cucumber_cpp/library/report/Report.hpp"
55
#include "gtest/gtest.h"
66
#include <filesystem>
7-
#include <format>
8-
#include <iomanip>
97
#include <memory>
108
#include <string>
119

@@ -15,7 +13,7 @@ namespace cucumber_cpp::library::engine
1513
{
1614
std::string AppendUserMessage(const std::string& gtest_msg, const testing::Message& user_msg)
1715
{
18-
const std::string user_msg_string = user_msg.GetString();
16+
std::string user_msg_string = user_msg.GetString();
1917

2018
if (user_msg_string.empty())
2119
return gtest_msg;
@@ -27,7 +25,7 @@ namespace cucumber_cpp::library::engine
2725
}
2826
}
2927

30-
TestAssertionHandler* TestAssertionHandler::instance{ nullptr };
28+
TestAssertionHandler* TestAssertionHandler::instance{ nullptr }; // NOLINT
3129

3230
TestAssertionHandler::TestAssertionHandler()
3331
{
@@ -49,7 +47,7 @@ namespace cucumber_cpp::library::engine
4947
, reportHandler{ reportHandler }
5048
{}
5149

52-
void TestAssertionHandlerImpl::AddAssertionError(testing::TestPartResult::Type type, const char* const file, int line, std::string message)
50+
void TestAssertionHandlerImpl::AddAssertionError(const char* file, int line, std::string message)
5351
{
5452
std::filesystem::path relativeFilePath = std::filesystem::relative(file);
5553

@@ -62,8 +60,8 @@ namespace cucumber_cpp::library::engine
6260
: data(std::make_unique<CucumberAssertHelperData>(type, file, line, message))
6361
{}
6462

65-
void CucumberAssertHelper::operator=(const testing::Message& message) const
63+
void CucumberAssertHelper::operator=(const testing::Message& message) const // NOLINT
6664
{
67-
TestAssertionHandler::Instance().AddAssertionError(data->type, data->file, data->line, AppendUserMessage(data->message, message));
65+
TestAssertionHandler::Instance().AddAssertionError(data->file, data->line, AppendUserMessage(data->message, message));
6866
}
6967
}

cucumber_cpp/library/engine/FailureHandler.hpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
#include "cucumber_cpp/library/engine/ContextManager.hpp"
55
#include "cucumber_cpp/library/report/Report.hpp"
6-
#include "gtest/gtest.h"
7-
#include <gmock/gmock.h>
86
#include <gtest/gtest.h>
97
#include <memory>
108
#include <string>
@@ -22,18 +20,18 @@ namespace cucumber_cpp::library::engine
2220

2321
static TestAssertionHandler& Instance();
2422

25-
virtual void AddAssertionError(testing::TestPartResult::Type type, const char* const file, int line, std::string message) = 0;
23+
virtual void AddAssertionError(const char* file, int line, std::string message) = 0;
2624

2725
private:
28-
static TestAssertionHandler* instance;
26+
static TestAssertionHandler* instance; // NOLINT
2927
};
3028

3129
struct TestAssertionHandlerImpl : TestAssertionHandler
3230
{
3331
explicit TestAssertionHandlerImpl(cucumber_cpp::library::engine::ContextManager& contextManager, report::ReportForwarder& reportHandler);
3432
virtual ~TestAssertionHandlerImpl() = default;
3533

36-
void AddAssertionError(testing::TestPartResult::Type type, const char* const file, int line, std::string message) override;
34+
void AddAssertionError(const char* file, int line, std::string message) override;
3735

3836
private:
3937
cucumber_cpp::library::engine::ContextManager& contextManager;
@@ -46,8 +44,11 @@ namespace cucumber_cpp::library::engine
4644
CucumberAssertHelper(testing::TestPartResult::Type type, const char* file, int line,
4745
const char* message);
4846

47+
CucumberAssertHelper(const CucumberAssertHelper&) = delete;
48+
CucumberAssertHelper& operator=(const CucumberAssertHelper&) = delete;
49+
4950
// see testing::internal::AssertHelper
50-
void operator=(const testing::Message& message) const;
51+
void operator=(const testing::Message& message) const; // NOLINT
5152

5253
private:
5354
// see testing::internal::AssertHelper::AssertHelperData
@@ -61,20 +62,16 @@ namespace cucumber_cpp::library::engine
6162
, message(msg)
6263
{}
6364

64-
testing::TestPartResult::Type const type;
65+
const testing::TestPartResult::Type type;
6566
const char* const file;
66-
int const line;
67-
std::string const message;
67+
const int line;
68+
const std::string message;
6869

69-
private:
7070
CucumberAssertHelperData(const CucumberAssertHelperData&) = delete;
7171
CucumberAssertHelperData& operator=(const CucumberAssertHelperData&) = delete;
7272
};
7373

7474
std::unique_ptr<const CucumberAssertHelperData> data;
75-
76-
CucumberAssertHelper(const CucumberAssertHelper&) = delete;
77-
CucumberAssertHelper& operator=(const CucumberAssertHelper&) = delete;
7875
};
7976
}
8077

cucumber_cpp/library/engine/test/TestFailureHandler.cpp

Lines changed: 71 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,87 @@
33
#include "cucumber_cpp/library/engine/Result.hpp"
44
#include "cucumber_cpp/library/engine/test_helper/ContextManagerInstance.hpp"
55
#include "cucumber_cpp/library/report/Report.hpp"
6+
#include <cstddef>
7+
#include <filesystem>
68
#include <gmock/gmock.h>
79
#include <gtest/gtest.h>
10+
#include <optional>
11+
#include <string>
812

913
namespace cucumber_cpp::library::engine
1014
{
11-
struct TestFailureHandler : testing::Test
15+
namespace
1216
{
13-
};
17+
void ErrorWithFailureMessage(const char* failure)
18+
{
19+
CucumberAssertHelper{ testing::TestPartResult::kNonFatalFailure, "custom_file.cpp", 0, failure } = testing::Message();
20+
}
1421

15-
TEST_F(TestFailureHandler, ConstructThisNeedsToBeExtendedAndSeparatedWorkInProgress)
16-
{
17-
test_helper::ContextManagerInstance contextManager;
18-
report::ReportForwarderImpl reportHandler{ contextManager };
19-
TestAssertionHandlerImpl testAssertionHandler{ contextManager, reportHandler };
22+
void ErrorWithUserMessage(const char* user)
23+
{
24+
CucumberAssertHelper{ testing::TestPartResult::kNonFatalFailure, "custom_file.cpp", 0, "" } = testing::Message() << user;
25+
}
2026

21-
ASSERT_THAT(contextManager.StepContext().ExecutionStatus(), testing::Eq(Result::passed));
27+
void ErrorWithFailureAndUserMessage(const char* failure, const char* user)
28+
{
29+
CucumberAssertHelper{ testing::TestPartResult::kNonFatalFailure, "custom_file.cpp", 0, failure } = testing::Message() << user;
30+
}
31+
32+
struct ReportForwarderMock : report::ReportForwarderImpl
33+
{
34+
using ReportForwarderImpl::ReportForwarderImpl;
35+
virtual ~ReportForwarderMock() = default;
2236

23-
CucumberAssertHelper assertHelper{ testing::TestPartResult::kNonFatalFailure, __FILE__, __LINE__, "message" };
37+
MOCK_METHOD(void, Failure, (const std::string& error, std::optional<std::filesystem::path> path, std::optional<std::size_t> line, std::optional<std::size_t> column), (override));
38+
MOCK_METHOD(void, Error, (const std::string& error, std::optional<std::filesystem::path> path, std::optional<std::size_t> line, std::optional<std::size_t> column), (override));
39+
};
40+
41+
struct TestFailureHandler : testing::Test
42+
{
43+
44+
test_helper::ContextManagerInstance contextManager;
45+
ReportForwarderMock reportHandler{ contextManager };
46+
TestAssertionHandlerImpl testAssertionHandler{ contextManager, reportHandler };
47+
};
48+
}
49+
50+
TEST_F(TestFailureHandler, SetContextToFailed)
51+
{
52+
ASSERT_THAT(contextManager.CurrentContext().ExecutionStatus(), testing::Eq(Result::passed));
53+
ASSERT_THAT(contextManager.ProgramContext().ExecutionStatus(), testing::Eq(Result::passed));
54+
ASSERT_THAT(contextManager.FeatureContext().ExecutionStatus(), testing::Eq(Result::passed));
55+
ASSERT_THAT(contextManager.RuleContext().ExecutionStatus(), testing::Eq(Result::passed));
56+
ASSERT_THAT(contextManager.ScenarioContext().ExecutionStatus(), testing::Eq(Result::passed));
2457
ASSERT_THAT(contextManager.StepContext().ExecutionStatus(), testing::Eq(Result::passed));
2558

26-
assertHelper = testing::Message("testing::Message") << "user message";
27-
ASSERT_THAT(contextManager.StepContext().ExecutionStatus(), testing::Eq(Result::failed));
59+
ErrorWithFailureMessage("failure");
60+
61+
EXPECT_THAT(contextManager.CurrentContext().ExecutionStatus(), testing::Eq(Result::failed));
62+
EXPECT_THAT(contextManager.ProgramContext().ExecutionStatus(), testing::Eq(Result::failed));
63+
EXPECT_THAT(contextManager.FeatureContext().ExecutionStatus(), testing::Eq(Result::failed));
64+
EXPECT_THAT(contextManager.RuleContext().ExecutionStatus(), testing::Eq(Result::failed));
65+
EXPECT_THAT(contextManager.ScenarioContext().ExecutionStatus(), testing::Eq(Result::failed));
66+
EXPECT_THAT(contextManager.StepContext().ExecutionStatus(), testing::Eq(Result::failed));
67+
}
68+
69+
TEST_F(TestFailureHandler, ReportFailureMessage)
70+
{
71+
EXPECT_CALL(reportHandler, Failure("Failure Message", testing::_, testing::_, testing::_));
72+
73+
ErrorWithFailureMessage("Failure Message");
74+
}
75+
76+
TEST_F(TestFailureHandler, ReportUserMessage)
77+
{
78+
EXPECT_CALL(reportHandler, Failure("User Message", testing::_, testing::_, testing::_));
79+
80+
ErrorWithUserMessage("User Message");
81+
}
82+
83+
TEST_F(TestFailureHandler, ReportFailureAndUserMessage)
84+
{
85+
EXPECT_CALL(reportHandler, Failure("Failure Message\nUser Message", testing::_, testing::_, testing::_));
86+
87+
ErrorWithFailureAndUserMessage("Failure Message", "User Message");
2888
}
2989
}

0 commit comments

Comments
 (0)