1*a3a45f30SXin Li // Copyright 2017 The Chromium OS Authors. All rights reserved. 2*a3a45f30SXin Li // Use of this source code is governed by a BSD-style license that can be 3*a3a45f30SXin Li // found in the LICENSE file. 4*a3a45f30SXin Li 5*a3a45f30SXin Li #ifndef _BSDIFF_FAKE_PATCH_WRITER_H_ 6*a3a45f30SXin Li #define _BSDIFF_FAKE_PATCH_WRITER_H_ 7*a3a45f30SXin Li 8*a3a45f30SXin Li #include <gtest/gtest.h> 9*a3a45f30SXin Li #include <vector> 10*a3a45f30SXin Li 11*a3a45f30SXin Li #include "bsdiff/patch_writer_interface.h" 12*a3a45f30SXin Li 13*a3a45f30SXin Li namespace bsdiff { 14*a3a45f30SXin Li 15*a3a45f30SXin Li // A fake PatchWriterInterface derived class with easy access to the data passed 16*a3a45f30SXin Li // to it. 17*a3a45f30SXin Li class FakePatchWriter : public PatchWriterInterface { 18*a3a45f30SXin Li public: 19*a3a45f30SXin Li FakePatchWriter() = default; 20*a3a45f30SXin Li ~FakePatchWriter() override = default; 21*a3a45f30SXin Li 22*a3a45f30SXin Li // PatchWriterInterface overrides. Init(size_t new_size)23*a3a45f30SXin Li bool Init(size_t new_size) override { 24*a3a45f30SXin Li EXPECT_FALSE(initialized_); 25*a3a45f30SXin Li initialized_ = true; 26*a3a45f30SXin Li new_size_ = new_size; 27*a3a45f30SXin Li return true; 28*a3a45f30SXin Li } 29*a3a45f30SXin Li AddControlEntry(const ControlEntry & entry)30*a3a45f30SXin Li bool AddControlEntry(const ControlEntry& entry) override { 31*a3a45f30SXin Li EXPECT_TRUE(initialized_); 32*a3a45f30SXin Li EXPECT_FALSE(closed_); 33*a3a45f30SXin Li entries_.push_back(entry); 34*a3a45f30SXin Li return true; 35*a3a45f30SXin Li } 36*a3a45f30SXin Li WriteDiffStream(const uint8_t * data,size_t size)37*a3a45f30SXin Li bool WriteDiffStream(const uint8_t* data, size_t size) override { 38*a3a45f30SXin Li diff_stream_.insert(diff_stream_.end(), data, data + size); 39*a3a45f30SXin Li return true; 40*a3a45f30SXin Li } 41*a3a45f30SXin Li WriteExtraStream(const uint8_t * data,size_t size)42*a3a45f30SXin Li bool WriteExtraStream(const uint8_t* data, size_t size) override { 43*a3a45f30SXin Li extra_stream_.insert(extra_stream_.end(), data, data + size); 44*a3a45f30SXin Li return true; 45*a3a45f30SXin Li } 46*a3a45f30SXin Li Close()47*a3a45f30SXin Li bool Close() override { 48*a3a45f30SXin Li EXPECT_FALSE(closed_) << "Close() already called"; 49*a3a45f30SXin Li closed_ = true; 50*a3a45f30SXin Li return true; 51*a3a45f30SXin Li } 52*a3a45f30SXin Li 53*a3a45f30SXin Li // Fake getter methods. entries()54*a3a45f30SXin Li const std::vector<ControlEntry>& entries() const { return entries_; } diff_stream()55*a3a45f30SXin Li const std::vector<uint8_t>& diff_stream() const { return diff_stream_; } extra_stream()56*a3a45f30SXin Li const std::vector<uint8_t>& extra_stream() const { return extra_stream_; } new_size()57*a3a45f30SXin Li size_t new_size() const { return new_size_; } 58*a3a45f30SXin Li 59*a3a45f30SXin Li private: 60*a3a45f30SXin Li // The list of ControlEntry passed to this class. 61*a3a45f30SXin Li std::vector<ControlEntry> entries_; 62*a3a45f30SXin Li std::vector<uint8_t> diff_stream_; 63*a3a45f30SXin Li std::vector<uint8_t> extra_stream_; 64*a3a45f30SXin Li 65*a3a45f30SXin Li // The size of the new file for the patch we are writing. 66*a3a45f30SXin Li size_t new_size_{0}; 67*a3a45f30SXin Li 68*a3a45f30SXin Li // Whether this class was initialized. 69*a3a45f30SXin Li bool initialized_{false}; 70*a3a45f30SXin Li 71*a3a45f30SXin Li // Whether the patch was closed. 72*a3a45f30SXin Li bool closed_{false}; 73*a3a45f30SXin Li }; 74*a3a45f30SXin Li 75*a3a45f30SXin Li } // namespace bsdiff 76*a3a45f30SXin Li 77*a3a45f30SXin Li #endif // _BSDIFF_FAKE_PATCH_WRITER_H_ 78