| // 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_ |