blob: 5df50403c505116495af51e25ca5be30eed4b423 [file] [log] [blame]
{{>copyright comment="//"}}
#include <memory>
#include <sdk/lib/inspect/testing/cpp/zxtest/inspect.h>
#include <zxtest/zxtest.h>
#include "src/devices/testing/mock-ddk/mock-device.h"
#include "{{PROJECT_PATH}}/{{snake_case PROJECT_NAME}}.h"
namespace {{snake_case PROJECT_NAME}} {
using inspect::InspectTestHelper;
class {{pascal_case PROJECT_NAME}}Test : public InspectTestHelper, public zxtest::Test {
void SetUp() override { fake_root_ = MockDevice::FakeRootParent(); }
void TearDown() override {}
protected:
std::shared_ptr<zx_device> fake_root_;
};
TEST_F({{pascal_case PROJECT_NAME}}Test, LifetimeTest) {
auto device = new {{pascal_case PROJECT_NAME}}(fake_root_.get());
ASSERT_OK(device->Bind());
device->zxdev()->InitOp();
ASSERT_OK(device->zxdev()->WaitUntilInitReplyCalled(zx::time::infinite()));
device->DdkAsyncRemove();
ASSERT_OK(mock_ddk::ReleaseFlaggedDevices(fake_root_.get()));
}
// TODO: `is_bound` is an example inspect property. Replace this test with inspect properties
// if any are added to the driver. Remove this test if no new inspect nodes/properties were added.
TEST_F({{pascal_case PROJECT_NAME}}Test, InspectTest) {
auto device = new {{pascal_case PROJECT_NAME}}(fake_root_.get());
// Verify is_bound = false.
ASSERT_NO_FATAL_FAILURE(ReadInspect(device->inspect_vmo()));
ASSERT_NO_FATAL_FAILURE(
CheckProperty(hierarchy().node(), "is_bound", inspect::BoolPropertyValue(false)));
ASSERT_OK(device->Bind());
// Verify is_bound = true.
ASSERT_NO_FATAL_FAILURE(ReadInspect(device->inspect_vmo()));
ASSERT_NO_FATAL_FAILURE(
CheckProperty(hierarchy().node(), "is_bound", inspect::BoolPropertyValue(true)));
device->zxdev()->InitOp();
ASSERT_OK(device->zxdev()->WaitUntilInitReplyCalled(zx::time::infinite()));
device->DdkAsyncRemove();
ASSERT_OK(mock_ddk::ReleaseFlaggedDevices(fake_root_.get()));
}
} // namespace {{snake_case PROJECT_NAME}}