| // Copyright 2021 The Chromium OS 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 MOCK_PRINTER_ARGUMENT_VARIANTS_H_ |
| #define MOCK_PRINTER_ARGUMENT_VARIANTS_H_ |
| |
| #include <variant> |
| |
| #include <chromeos/libipp/ipp.h> |
| |
| #include "mock_printer/proto/ipp.pb.h" |
| #include "mock_printer/proto/control_flow.pb.h" |
| |
| // This header defines the arguments that the mock printer understands. |
| // That includes holders for |
| // * real messages and |
| // * their mock (Protobuf) counterparts. |
| // |
| // Currently, mock printer mode only supports IPP messages, but this |
| // header is written in hopes of making future features a bit easier to |
| // add. |
| // |
| // Most structs defined here do not own their members and must not |
| // outlive them. |
| |
| namespace mock_printer { |
| |
| // Unowned pointers to |
| // * a real IPP message to be matched and |
| // * a mock IPP message to be matched against. |
| struct MatchableIppData { |
| MatchableIppData(const ipp::Request* message, |
| const mocking::IppMessage& mock_message); |
| ~MatchableIppData(); |
| |
| const ipp::Request* ipp_request; |
| const mocking::IppMessage& mock_ipp_request; |
| }; |
| |
| // Pseudo-type-erasing holder for data that we'll pass to |
| // `WrappedMatcher::Match()`. |
| using MatchableData = std::variant<MatchableIppData>; |
| |
| // Counterpart to `MatchableData` exposed by `WrappedTestCaseStep`, |
| // omitting the mock Protobuf. |
| using InputMessage = std::variant<const ipp::Request*>; |
| |
| // CHECK()s that `message` contains the IPP variant. |
| MatchableData GetAsIpp(const InputMessage message, |
| const mocking::ExpectationWithResponse& mock_message); |
| |
| } // namespace mock_printer |
| |
| #endif // MOCK_PRINTER_ARGUMENT_VARIANTS_H_ |