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 { operatorFreeDeleter58 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(); GetString()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