From 72feb27fc174c2139b642eb7390fffac608f6c87 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 6 Feb 2015 15:58:40 -0800 Subject: First JavaScript testing implementation. This is a plan for testing JS inside of pdf files under pdfium: Communication of results will be done via app.alert(), rather than console.println(), since the latter is not hooked up to any API callbacks. pdfium_test.cc is modified to be more careful about use of stdout/stderr, so that only the app.alert() and the unsupported feature callback use stdout. Diffing stdout against ..._expected.txt files gives the result. I added a /javascript directory to separate these from the embeddertest resources. The alert callback is backported from XFA. This was an omission. BUG=https://code.google.com/p/pdfium/issues/detail?id=62 R=jam@chromium.org, thestig@chromium.org Review URL: https://codereview.chromium.org/872103003 --- samples/pdfium_test.cc | 52 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 18 deletions(-) (limited to 'samples/pdfium_test.cc') diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc index 7ba85ef308..20658fbf4d 100644 --- a/samples/pdfium_test.cc +++ b/samples/pdfium_test.cc @@ -199,9 +199,9 @@ void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) { snprintf(filename, sizeof(filename), "%s.%d.emf", pdf_name, num); HDC dc = CreateEnhMetaFileA(NULL, filename, NULL, NULL); - - HRGN rgn = CreateRectRgn(0, 0, width, height); - SelectClipRgn(dc, rgn); + + HRGN rgn = CreateRectRgn(0, 0, width, height); + SelectClipRgn(dc, rgn); DeleteObject(rgn); SelectObject(dc, GetStockObject(NULL_PEN)); @@ -216,8 +216,21 @@ void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) { } #endif -int Form_Alert(IPDF_JSPLATFORM*, FPDF_WIDESTRING, FPDF_WIDESTRING, int, int) { - printf("Form_Alert called.\n"); +int Form_Alert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING, + int, int) { + // Deal with differences between UTF16LE and wchar_t on this platform. + size_t characters = 0; + while (msg[characters]) { + ++characters; + } + wchar_t* platform_string = + (wchar_t*)malloc((characters + 1) * sizeof(wchar_t)); + for (size_t i = 0; i < characters + 1; ++i) { + unsigned char* ptr = (unsigned char*)&msg[i]; + platform_string[i] = ptr[0] + 256 * ptr[1]; + } + printf("Alert: %ls\n", platform_string); + free(platform_string); return 0; } @@ -355,7 +368,7 @@ void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) { void RenderPdf(const std::string& name, const char* pBuf, size_t len, const Options& options) { - printf("Rendering PDF file %s.\n", name.c_str()); + fprintf(stderr, "Rendering PDF file %s.\n", name.c_str()); IPDF_JSPLATFORM platform_callbacks; memset(&platform_callbacks, '\0', sizeof(platform_callbacks)); @@ -391,10 +404,10 @@ void RenderPdf(const std::string& name, const char* pBuf, size_t len, (void) FPDFAvail_IsDocAvail(pdf_avail, &hints); if (!FPDFAvail_IsLinearized(pdf_avail)) { - printf("Non-linearized path...\n"); + fprintf(stderr, "Non-linearized path...\n"); doc = FPDF_LoadCustomDocument(&file_access, NULL); } else { - printf("Linearized path...\n"); + fprintf(stderr, "Linearized path...\n"); doc = FPDFAvail_GetDocument(pdf_avail, NULL); } @@ -477,23 +490,26 @@ void RenderPdf(const std::string& name, const char* pBuf, size_t len, FPDF_CloseDocument(doc); FPDFAvail_Destroy(pdf_avail); - printf("Loaded, parsed and rendered %" PRIuS " pages.\n", rendered_pages); - printf("Skipped %" PRIuS " bad pages.\n", bad_pages); + fprintf(stderr, "Rendered %" PRIuS " pages.\n", rendered_pages); + fprintf(stderr, "Skipped %" PRIuS " bad pages.\n", bad_pages); } +static const char usage_string[] = + "Usage: pdfium_test [OPTION] [FILE]...\n" + " --bin-dir= - override path to v8 external data\n" + " --scale= - scale output size by number (e.g. 0.5)\n" +#ifdef _WIN32 + " --bmp - write page images ..bmp\n" + " --emf - write page meta files ..emf\n" +#endif + " --ppm - write page images ..ppm\n"; + int main(int argc, const char* argv[]) { std::vector args(argv, argv + argc); Options options; std::list files; if (!ParseCommandLine(args, &options, &files)) { - printf("Usage: pdfium_test [OPTION] [FILE]...\n"); - printf("--bin-dir= - override path to v8 external data\n"); - printf("--scale= - scale output size by number (e.g. 0.5)\n"); - printf("--ppm - write page images ..ppm\n"); -#ifdef _WIN32 - printf("--bmp - write page images ..bmp\n"); - printf("--emf - write page meta files ..emf\n"); -#endif + fprintf(stderr, "%s", usage_string); return 1; } -- cgit v1.2.3