Nuke Builders Part 3: remove validation test builder expectations
BUG=dawn:125 Change-Id: I64a0b957e39b60334916ad71fb4beee5d8baa9db Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/6162 Reviewed-by: Austin Eng <enga@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
parent
cb2c64f7d9
commit
c3155205fa
|
@ -54,22 +54,6 @@ ValidationTest::~ValidationTest() {
|
||||||
|
|
||||||
void ValidationTest::TearDown() {
|
void ValidationTest::TearDown() {
|
||||||
ASSERT_FALSE(mExpectError);
|
ASSERT_FALSE(mExpectError);
|
||||||
|
|
||||||
for (auto& expectation : mExpectations) {
|
|
||||||
std::string name = expectation.debugName;
|
|
||||||
if (name.empty()) {
|
|
||||||
name = "<no debug name set>";
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_TRUE(expectation.gotStatus) << "Didn't get a status for " << name;
|
|
||||||
|
|
||||||
ASSERT_NE(DAWN_BUILDER_ERROR_STATUS_UNKNOWN, expectation.status) << "Got unknown status for " << name;
|
|
||||||
|
|
||||||
bool wasSuccess = expectation.status == DAWN_BUILDER_ERROR_STATUS_SUCCESS;
|
|
||||||
ASSERT_EQ(expectation.expectSuccess, wasSuccess)
|
|
||||||
<< "Got wrong status value for " << name
|
|
||||||
<< ", status was " << expectation.status << " with \"" << expectation.statusMessage << "\"";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ValidationTest::StartExpectDeviceError() {
|
void ValidationTest::StartExpectDeviceError() {
|
||||||
|
@ -89,32 +73,11 @@ void ValidationTest::OnDeviceError(const char* message, DawnCallbackUserdata use
|
||||||
auto self = reinterpret_cast<ValidationTest*>(static_cast<uintptr_t>(userdata));
|
auto self = reinterpret_cast<ValidationTest*>(static_cast<uintptr_t>(userdata));
|
||||||
self->mDeviceErrorMessage = message;
|
self->mDeviceErrorMessage = message;
|
||||||
|
|
||||||
// Skip this one specific error that is raised when a builder is used after it got an error
|
|
||||||
// this is important because we don't want to wrap all creation tests in ASSERT_DEVICE_ERROR.
|
|
||||||
// Yes the error message is misleading.
|
|
||||||
if (self->mDeviceErrorMessage == "Builder cannot be used after GetResult") {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_TRUE(self->mExpectError) << "Got unexpected device error: " << message;
|
ASSERT_TRUE(self->mExpectError) << "Got unexpected device error: " << message;
|
||||||
ASSERT_FALSE(self->mError) << "Got two errors in expect block";
|
ASSERT_FALSE(self->mError) << "Got two errors in expect block";
|
||||||
self->mError = true;
|
self->mError = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
|
||||||
void ValidationTest::OnBuilderErrorStatus(DawnBuilderErrorStatus status, const char* message, dawn::CallbackUserdata userdata1, dawn::CallbackUserdata userdata2) {
|
|
||||||
auto* self = reinterpret_cast<ValidationTest*>(static_cast<uintptr_t>(userdata1));
|
|
||||||
size_t index = static_cast<size_t>(userdata2);
|
|
||||||
|
|
||||||
ASSERT_LT(index, self->mExpectations.size());
|
|
||||||
|
|
||||||
auto& expectation = self->mExpectations[index];
|
|
||||||
ASSERT_FALSE(expectation.gotStatus);
|
|
||||||
expectation.gotStatus = true;
|
|
||||||
expectation.status = status;
|
|
||||||
expectation.statusMessage = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
ValidationTest::DummyRenderPass::DummyRenderPass(const dawn::Device& device)
|
ValidationTest::DummyRenderPass::DummyRenderPass(const dawn::Device& device)
|
||||||
: attachmentFormat(dawn::TextureFormat::R8G8B8A8Unorm), width(400), height(400) {
|
: attachmentFormat(dawn::TextureFormat::R8G8B8A8Unorm), width(400), height(400) {
|
||||||
|
|
||||||
|
|
|
@ -35,20 +35,6 @@ class ValidationTest : public testing::Test {
|
||||||
|
|
||||||
void TearDown() override;
|
void TearDown() override;
|
||||||
|
|
||||||
// Use these methods to add expectations on the validation of a builder. The expectations are
|
|
||||||
// checked on test teardown. Adding an expectation is done like the following:
|
|
||||||
//
|
|
||||||
// dawn::Foo foo = AssertWillBe[Success|Error](device.CreateFooBuilder(), "my foo")
|
|
||||||
// .SetBar(1)
|
|
||||||
// .GetResult();
|
|
||||||
//
|
|
||||||
// The string argument is optional but will be printed when an expectations is missed, this
|
|
||||||
// will help debug tests where multiple expectations are added.
|
|
||||||
template<typename Builder>
|
|
||||||
Builder AssertWillBeSuccess(Builder builder, std::string debugName = "");
|
|
||||||
template<typename Builder>
|
|
||||||
Builder AssertWillBeError(Builder builder, std::string debugName = "");
|
|
||||||
|
|
||||||
void StartExpectDeviceError();
|
void StartExpectDeviceError();
|
||||||
bool EndExpectDeviceError();
|
bool EndExpectDeviceError();
|
||||||
std::string GetLastDeviceErrorMessage() const;
|
std::string GetLastDeviceErrorMessage() const;
|
||||||
|
@ -78,47 +64,6 @@ class ValidationTest : public testing::Test {
|
||||||
std::string mDeviceErrorMessage;
|
std::string mDeviceErrorMessage;
|
||||||
bool mExpectError = false;
|
bool mExpectError = false;
|
||||||
bool mError = false;
|
bool mError = false;
|
||||||
|
|
||||||
struct BuilderStatusExpectations {
|
|
||||||
bool expectSuccess;
|
|
||||||
std::string debugName;
|
|
||||||
|
|
||||||
bool gotStatus = false;
|
|
||||||
std::string statusMessage;
|
|
||||||
DawnBuilderErrorStatus status;
|
|
||||||
};
|
|
||||||
std::vector<BuilderStatusExpectations> mExpectations;
|
|
||||||
|
|
||||||
template<typename Builder>
|
|
||||||
Builder AddExpectation(Builder& builder, std::string debugName, bool expectSuccess);
|
|
||||||
|
|
||||||
static void OnBuilderErrorStatus(DawnBuilderErrorStatus status, const char* message, dawn::CallbackUserdata userdata1, dawn::CallbackUserdata userdata2);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Template implementation details
|
|
||||||
|
|
||||||
template<typename Builder>
|
|
||||||
Builder ValidationTest::AssertWillBeSuccess(Builder builder, std::string debugName) {
|
|
||||||
return AddExpectation(builder, debugName, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Builder>
|
|
||||||
Builder ValidationTest::AssertWillBeError(Builder builder, std::string debugName) {
|
|
||||||
return AddExpectation(builder, debugName, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Builder>
|
|
||||||
Builder ValidationTest::AddExpectation(Builder& builder, std::string debugName, bool expectSuccess) {
|
|
||||||
uint64_t userdata1 = reinterpret_cast<uintptr_t>(this);
|
|
||||||
uint64_t userdata2 = mExpectations.size();
|
|
||||||
builder.SetErrorCallback(OnBuilderErrorStatus, userdata1, userdata2);
|
|
||||||
|
|
||||||
mExpectations.emplace_back();
|
|
||||||
auto& expectation = mExpectations.back();
|
|
||||||
expectation.expectSuccess = expectSuccess;
|
|
||||||
expectation.debugName = debugName;
|
|
||||||
|
|
||||||
return std::move(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // TESTS_UNITTESTS_VALIDATIONTEST_H_
|
#endif // TESTS_UNITTESTS_VALIDATIONTEST_H_
|
||||||
|
|
Loading…
Reference in New Issue