| // Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_TEST_H_ | |
| #define SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_TEST_H_ | |
| #include <memory> | |
| #include "src/developer/debug/zxdb/client/remote_api_test.h" | |
| #include "src/developer/debug/zxdb/console/mock_console.h" | |
| namespace zxdb { | |
| class Process; | |
| class Thread; | |
| // Test harness that sets up a RemoteAPITest (mocked target by replacing IPC) with a MockConsole | |
| // (mocked console I/O) and a process/thread. | |
| // | |
| // The thread will be initially running. Often the first thing tests will want to do is call: | |
| // | |
| // std::vector<std::unique_ptr<Frame>> frames; | |
| // frames.push_back(std::make_unique<MockFrame>(...)); | |
| // InjectExceptionWithStack(ConsoleTest::kProcessKoid, ConsoleTest::kThreadKoid, | |
| // debug_ipc::ExceptionType::kSingleStep, std::move(frames), true); | |
| // | |
| // Then to inject commands: | |
| // | |
| // console().ProcessInputLine("do something"); | |
| // | |
| // And to check output: | |
| // | |
| // auto event = console().GetOutputEvent(); | |
| // EXPECT_EQ(MockConsole::OutputEvent::Type::kOutput, event.type); | |
| // EXPECT_EQ("Some output", event.output.AsString()); | |
| // | |
| // Most of the ability to set up the process environment is on the RemoteAPITest base class. To get | |
| // a mock module symbols for symbol tests, do: | |
| // | |
| // auto mock_module = InjectMockModule(process(), 0x12345000); // Address is optional. | |
| class ConsoleTest : public RemoteAPITest { | |
| public: | |
| // The IDs associated with the process/thread that are set up by default. | |
| static constexpr uint64_t kProcessKoid = 875123541; | |
| static constexpr uint64_t kThreadKoid = 19028730; | |
| MockConsole& console() { return *console_.get(); } | |
| Process* process() const { return process_; } | |
| Thread* thread() const { return thread_; } | |
| // testing::Test implementation. | |
| void SetUp() override; | |
| void TearDown() override; | |
| private: | |
| std::unique_ptr<MockConsole> console_; | |
| // The injected process/thread. | |
| Process* process_ = nullptr; | |
| Thread* thread_ = nullptr; | |
| }; | |
| } // namespace zxdb | |
| #endif // SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_TEST_H_ |