Home | History | Annotate | Download | only in testing
      1 // Copyright 2015 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_TEST_SUPPORT_H_
      6 #define TESTING_TEST_SUPPORT_H_
      7 
      8 #include <stdlib.h>
      9 #include <memory>
     10 #include <string>
     11 #include <vector>
     12 
     13 #include "public/fpdf_save.h"
     14 #include "public/fpdfview.h"
     15 
     16 #ifdef PDF_ENABLE_V8
     17 #include "v8/include/v8.h"
     18 #endif  // PDF_ENABLE_V8
     19 
     20 namespace pdfium {
     21 
     22 #define STR_IN_TEST_CASE(input_literal, ...)                         \
     23   {                                                                  \
     24     (const unsigned char*) input_literal, sizeof(input_literal) - 1, \
     25         __VA_ARGS__                                                  \
     26   }
     27 
     28 #define STR_IN_OUT_CASE(input_literal, expected_literal, ...)                 \
     29   {                                                                           \
     30     (const unsigned char*) input_literal, sizeof(input_literal) - 1,          \
     31         (const unsigned char*)expected_literal, sizeof(expected_literal) - 1, \
     32         __VA_ARGS__                                                           \
     33   }
     34 
     35 struct StrFuncTestData {
     36   const unsigned char* input;
     37   unsigned int input_size;
     38   const unsigned char* expected;
     39   unsigned int expected_size;
     40 };
     41 
     42 struct DecodeTestData {
     43   const unsigned char* input;
     44   unsigned int input_size;
     45   const unsigned char* expected;
     46   unsigned int expected_size;
     47   // The size of input string being processed.
     48   unsigned int processed_size;
     49 };
     50 
     51 struct NullTermWstrFuncTestData {
     52   const wchar_t* input;
     53   const wchar_t* expected;
     54 };
     55 
     56 // Used with std::unique_ptr to free() objects that can't be deleted.
     57 struct FreeDeleter {
     58   inline void operator()(void* ptr) const { free(ptr); }
     59 };
     60 
     61 }  // namespace pdfium
     62 
     63 // Reads the entire contents of a file into a newly alloc'd buffer.
     64 std::unique_ptr<char, pdfium::FreeDeleter> GetFileContents(const char* filename,
     65                                                            size_t* retlen);
     66 
     67 std::vector<std::string> StringSplit(const std::string& str, char delimiter);
     68 
     69 // Converts a FPDF_WIDESTRING to a std::wstring.
     70 // Deals with differences between UTF16LE and wchar_t.
     71 std::wstring GetPlatformWString(const FPDF_WIDESTRING wstr);
     72 
     73 // Returns a newly allocated FPDF_WIDESTRING.
     74 // Deals with differences between UTF16LE and wchar_t.
     75 std::unique_ptr<unsigned short, pdfium::FreeDeleter> GetFPDFWideString(
     76     const std::wstring& wstr);
     77 
     78 #ifdef PDF_ENABLE_V8
     79 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
     80 bool InitializeV8ForPDFium(const std::string& exe_path,
     81                            const std::string& bin_dir,
     82                            v8::StartupData* natives_blob,
     83                            v8::StartupData* snapshot_blob,
     84                            v8::Platform** platform);
     85 #else   // V8_USE_EXTERNAL_STARTUP_DATA
     86 bool InitializeV8ForPDFium(const std::string& exe_path,
     87                            v8::Platform** platform);
     88 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
     89 #endif  // PDF_ENABLE_V8
     90 
     91 class TestLoader {
     92  public:
     93   TestLoader(const char* pBuf, size_t len);
     94   static int GetBlock(void* param,
     95                       unsigned long pos,
     96                       unsigned char* pBuf,
     97                       unsigned long size);
     98 
     99  private:
    100   const char* const m_pBuf;
    101   const size_t m_Len;
    102 };
    103 
    104 class TestSaver : public FPDF_FILEWRITE {
    105  public:
    106   TestSaver();
    107 
    108   void ClearString();
    109   const std::string& GetString() const { return m_String; }
    110 
    111  private:
    112   static int WriteBlockCallback(FPDF_FILEWRITE* pFileWrite,
    113                                 const void* data,
    114                                 unsigned long size);
    115 
    116   std::string m_String;
    117 };
    118 
    119 #endif  // TESTING_TEST_SUPPORT_H_
    120