mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-21 02:39:11 +00:00
Add ValidationTest and an example validation test.
Validation tests are tests of the backend state-tracking and validation code that don't require a GPU as they are running on the null backend. This commit adds a very simple (and almost useless) BufferValidationTest as an example of a validation test.
This commit is contained in:
committed by
Corentin Wallez
parent
635d7d599f
commit
5fbdff6888
87
src/tests/unittests/validation/ValidationTest.h
Normal file
87
src/tests/unittests/validation/ValidationTest.h
Normal file
@@ -0,0 +1,87 @@
|
||||
// Copyright 2017 The NXT Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef TESTS_UNITTESTS_VALIDATIONTEST_H_
|
||||
#define TESTS_UNITTESTS_VALIDATIONTEST_H_
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "nxt/nxtcpp.h"
|
||||
#include "nxt/nxtcpp_traits.h"
|
||||
|
||||
class ValidationTest : public testing::Test {
|
||||
public:
|
||||
ValidationTest();
|
||||
~ValidationTest();
|
||||
|
||||
// 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:
|
||||
//
|
||||
// nxt::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 TearDown() override;
|
||||
|
||||
protected:
|
||||
nxt::Device device;
|
||||
|
||||
private:
|
||||
struct BuilderStatusExpectations {
|
||||
bool expectSuccess;
|
||||
std::string debugName;
|
||||
|
||||
bool gotStatus = false;
|
||||
std::string statusMessage;
|
||||
nxtBuilderErrorStatus status;
|
||||
};
|
||||
std::vector<BuilderStatusExpectations> expectations;
|
||||
|
||||
template<typename Builder>
|
||||
Builder AddExpectation(Builder& builder, std::string debugName, bool expectSuccess);
|
||||
|
||||
static void OnBuilderErrorStatus(nxtBuilderErrorStatus status, const char* message, nxt::CallbackUserdata userdata1, nxt::CallbackUserdata userdata2);
|
||||
};
|
||||
|
||||
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 = expectations.size();
|
||||
builder.SetErrorCallback(OnBuilderErrorStatus, userdata1, userdata2);
|
||||
|
||||
expectations.emplace_back();
|
||||
auto& expectation = expectations.back();
|
||||
expectation.expectSuccess = expectSuccess;
|
||||
expectation.debugName = debugName;
|
||||
|
||||
return std::move(builder);
|
||||
}
|
||||
|
||||
#endif // TESTS_UNITTESTS_VALIDATIONTEST_H_
|
||||
Reference in New Issue
Block a user