| {{>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}} |