| // 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 "testing/gtest/include/gtest/gtest.h" |
| #include "net/third_party/quiche/src/http2/hpack/decoder/hpack_string_decoder_listener.h" |
| #include "net/third_party/quiche/src/http2/platform/api/http2_string.h" |
| #include "net/third_party/quiche/src/http2/platform/api/http2_string_piece.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 Http2String& 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(Http2StringPiece str, |
| bool is_huffman_encoded) const; |
| |
| Http2String ToString() const; |
| |
| Http2String 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_ |