// Copyright 2014 PDFium 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 TESTING_FX_STRING_TESTHELPERS_H_
|
#define TESTING_FX_STRING_TESTHELPERS_H_
|
|
#include <ostream>
|
|
#include "core/fxcrt/cfx_datetime.h"
|
#include "core/fxcrt/fx_stream.h"
|
|
// Output stream operator so GTEST macros work with CFX_DateTime objects.
|
std::ostream& operator<<(std::ostream& os, const CFX_DateTime& dt);
|
|
class CFX_InvalidSeekableReadStream : public IFX_SeekableReadStream {
|
public:
|
template <typename T, typename... Args>
|
friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
|
|
// IFX_SeekableReadStream overrides:
|
bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
|
return false;
|
}
|
FX_FILESIZE GetSize() override { return data_size_; }
|
|
private:
|
explicit CFX_InvalidSeekableReadStream(FX_FILESIZE data_size)
|
: data_size_(data_size) {}
|
|
FX_FILESIZE data_size_;
|
};
|
|
class CFX_BufferSeekableReadStream : public IFX_SeekableReadStream {
|
public:
|
template <typename T, typename... Args>
|
friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
|
|
// IFX_SeekableReadStream:
|
bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
|
if (offset < 0 || static_cast<size_t>(offset) >= data_size_)
|
return false;
|
|
if (static_cast<size_t>(offset) + size > data_size_)
|
size = data_size_ - static_cast<size_t>(offset);
|
if (size == 0)
|
return false;
|
|
memcpy(buffer, data_ + offset, size);
|
return true;
|
}
|
|
FX_FILESIZE GetSize() override {
|
return static_cast<FX_FILESIZE>(data_size_);
|
}
|
|
private:
|
CFX_BufferSeekableReadStream(const unsigned char* src, size_t src_size)
|
: data_(src), data_size_(src_size) {}
|
|
const unsigned char* data_;
|
size_t data_size_;
|
};
|
|
#endif // TESTING_FX_STRING_TESTHELPERS_H_
|