// Copyright 2017 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 _BSDIFF_FAKE_PATCH_WRITER_H_ #define _BSDIFF_FAKE_PATCH_WRITER_H_ #include <gtest/gtest.h> #include <vector> #include "bsdiff/patch_writer_interface.h" namespace bsdiff { // A fake PatchWriterInterface derived class with easy access to the data passed // to it. class FakePatchWriter : public PatchWriterInterface { public: FakePatchWriter() = default; ~FakePatchWriter() override = default; // PatchWriterInterface overrides. bool Init(size_t new_size) override { EXPECT_FALSE(initialized_); initialized_ = true; new_size_ = new_size; return true; } bool AddControlEntry(const ControlEntry& entry) override { EXPECT_TRUE(initialized_); EXPECT_FALSE(closed_); entries_.push_back(entry); return true; } bool WriteDiffStream(const uint8_t* data, size_t size) override { diff_stream_.insert(diff_stream_.end(), data, data + size); return true; } bool WriteExtraStream(const uint8_t* data, size_t size) override { extra_stream_.insert(extra_stream_.end(), data, data + size); return true; } bool Close() override { EXPECT_FALSE(closed_) << "Close() already called"; closed_ = true; return true; } // Fake getter methods. const std::vector<ControlEntry>& entries() const { return entries_; } const std::vector<uint8_t>& diff_stream() const { return diff_stream_; } const std::vector<uint8_t>& extra_stream() const { return extra_stream_; } size_t new_size() const { return new_size_; } private: // The list of ControlEntry passed to this class. std::vector<ControlEntry> entries_; std::vector<uint8_t> diff_stream_; std::vector<uint8_t> extra_stream_; // The size of the new file for the patch we are writing. size_t new_size_{0}; // Whether this class was initialized. bool initialized_{false}; // Whether the patch was closed. bool closed_{false}; }; } // namespace bsdiff #endif // _BSDIFF_FAKE_PATCH_WRITER_H_