• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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