| // Copyright 2016 The Chromium 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 QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_COLLECTOR_H_ | |
| #define QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_COLLECTOR_H_ | |
| // Supports tests of decoding HPACK strings. | |
| #include <stddef.h> | |
| #include <iosfwd> | |
| #include <string> | |
| #include "absl/strings/string_view.h" | |
| #include "http2/hpack/decoder/hpack_string_decoder_listener.h" | |
| #include "common/platform/api/quiche_test.h" | |
| namespace http2 { | |
| namespace test { | |
| // Records the callbacks associated with a decoding a string; must | |
| // call Clear() between decoding successive strings. | |
| struct HpackStringCollector : public HpackStringDecoderListener { | |
| enum CollectorState { | |
| kGenesis, | |
| kStarted, | |
| kEnded, | |
| }; | |
| HpackStringCollector(); | |
| HpackStringCollector(const std::string& str, bool huffman); | |
| void Clear(); | |
| bool IsClear() const; | |
| bool IsInProgress() const; | |
| bool HasEnded() const; | |
| void OnStringStart(bool huffman, size_t length) override; | |
| void OnStringData(const char* data, size_t length) override; | |
| void OnStringEnd() override; | |
| ::testing::AssertionResult Collected(absl::string_view str, | |
| bool is_huffman_encoded) const; | |
| std::string ToString() const; | |
| std::string s; | |
| size_t len; | |
| bool huffman_encoded; | |
| CollectorState state; | |
| }; | |
| bool operator==(const HpackStringCollector& a, const HpackStringCollector& b); | |
| bool operator!=(const HpackStringCollector& a, const HpackStringCollector& b); | |
| std::ostream& operator<<(std::ostream& out, const HpackStringCollector& v); | |
| } // namespace test | |
| } // namespace http2 | |
| #endif // QUICHE_HTTP2_HPACK_DECODER_HPACK_STRING_COLLECTOR_H_ |