Home | History | Annotate | Download | only in testing
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef TESTING_FX_STRING_TESTHELPERS_H_
      6 #define TESTING_FX_STRING_TESTHELPERS_H_
      7 
      8 #include <ostream>
      9 
     10 #include "core/fxcrt/cfx_datetime.h"
     11 #include "core/fxcrt/fx_stream.h"
     12 
     13 // Output stream operator so GTEST macros work with CFX_DateTime objects.
     14 std::ostream& operator<<(std::ostream& os, const CFX_DateTime& dt);
     15 
     16 class CFX_InvalidSeekableReadStream : public IFX_SeekableReadStream {
     17  public:
     18   template <typename T, typename... Args>
     19   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
     20 
     21   // IFX_SeekableReadStream overrides:
     22   bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
     23     return false;
     24   }
     25   FX_FILESIZE GetSize() override { return data_size_; }
     26 
     27  private:
     28   explicit CFX_InvalidSeekableReadStream(FX_FILESIZE data_size)
     29       : data_size_(data_size) {}
     30 
     31   FX_FILESIZE data_size_;
     32 };
     33 
     34 class CFX_BufferSeekableReadStream : public IFX_SeekableReadStream {
     35  public:
     36   template <typename T, typename... Args>
     37   friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
     38 
     39   // IFX_SeekableReadStream:
     40   bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
     41     if (offset < 0 || static_cast<size_t>(offset) >= data_size_)
     42       return false;
     43 
     44     if (static_cast<size_t>(offset) + size > data_size_)
     45       size = data_size_ - static_cast<size_t>(offset);
     46     if (size == 0)
     47       return false;
     48 
     49     memcpy(buffer, data_ + offset, size);
     50     return true;
     51   }
     52 
     53   FX_FILESIZE GetSize() override {
     54     return static_cast<FX_FILESIZE>(data_size_);
     55   }
     56 
     57  private:
     58   CFX_BufferSeekableReadStream(const unsigned char* src, size_t src_size)
     59       : data_(src), data_size_(src_size) {}
     60 
     61   const unsigned char* data_;
     62   size_t data_size_;
     63 };
     64 
     65 #endif  // TESTING_FX_STRING_TESTHELPERS_H_
     66