// Copyright 2015 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_TEST_SUPPORT_H_ #define TESTING_TEST_SUPPORT_H_ #include <stdlib.h> #include <memory> #include <string> #include <vector> #include "public/fpdf_save.h" #include "public/fpdfview.h" #include "testing/gtest/include/gtest/gtest.h" #ifdef PDF_ENABLE_V8 #include "v8/include/v8.h" #endif // PDF_ENABLE_V8 namespace pdfium { #define STR_IN_TEST_CASE(input_literal, ...) \ { \ (const unsigned char*) input_literal, sizeof(input_literal) - 1, \ __VA_ARGS__ \ } #define STR_IN_OUT_CASE(input_literal, expected_literal, ...) \ { \ (const unsigned char*) input_literal, sizeof(input_literal) - 1, \ (const unsigned char*)expected_literal, sizeof(expected_literal) - 1, \ __VA_ARGS__ \ } struct StrFuncTestData { const unsigned char* input; unsigned int input_size; const unsigned char* expected; unsigned int expected_size; }; struct DecodeTestData { const unsigned char* input; unsigned int input_size; const unsigned char* expected; unsigned int expected_size; // The size of input string being processed. unsigned int processed_size; }; struct NullTermWstrFuncTestData { const wchar_t* input; const wchar_t* expected; }; // Used with std::unique_ptr to free() objects that can't be deleted. struct FreeDeleter { inline void operator()(void* ptr) const { free(ptr); } }; class FPDF_Test : public ::testing::Test { public: void SetUp() override; void TearDown() override; }; } // namespace pdfium // Reads the entire contents of a file into a newly alloc'd buffer. std::unique_ptr<char, pdfium::FreeDeleter> GetFileContents(const char* filename, size_t* retlen); std::vector<std::string> StringSplit(const std::string& str, char delimiter); // Converts a FPDF_WIDESTRING to a std::wstring. // Deals with differences between UTF16LE and wchar_t. std::wstring GetPlatformWString(const FPDF_WIDESTRING wstr); // Returns a newly allocated FPDF_WIDESTRING. // Deals with differences between UTF16LE and wchar_t. std::unique_ptr<unsigned short, pdfium::FreeDeleter> GetFPDFWideString( const std::wstring& wstr); #ifdef PDF_ENABLE_V8 #ifdef V8_USE_EXTERNAL_STARTUP_DATA bool InitializeV8ForPDFium(const std::string& exe_path, const std::string& bin_dir, v8::StartupData* natives_blob, v8::StartupData* snapshot_blob, v8::Platform** platform); #else // V8_USE_EXTERNAL_STARTUP_DATA bool InitializeV8ForPDFium(const std::string& exe_path, v8::Platform** platform); #endif // V8_USE_EXTERNAL_STARTUP_DATA #endif // PDF_ENABLE_V8 class TestLoader { public: TestLoader(const char* pBuf, size_t len); static int GetBlock(void* param, unsigned long pos, unsigned char* pBuf, unsigned long size); private: const char* const m_pBuf; const size_t m_Len; }; class TestSaver : public FPDF_FILEWRITE { public: TestSaver(); void ClearString(); const std::string& GetString() const { return m_String; } protected: static int GetBlockFromString(void* param, unsigned long pos, unsigned char* buf, unsigned long size); private: static int WriteBlockCallback(FPDF_FILEWRITE* pFileWrite, const void* data, unsigned long size); std::string m_String; }; #endif // TESTING_TEST_SUPPORT_H_