1 // Copyright (c) 2011 The Chromium 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 #include "printing/pdf_metafile_cg_mac.h" 6 7 #import <ApplicationServices/ApplicationServices.h> 8 9 #include <string> 10 #include <vector> 11 12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "ui/gfx/rect.h" 14 15 namespace printing { 16 17 TEST(PdfMetafileCgTest, Pdf) { 18 // Test in-renderer constructor. 19 PdfMetafileCg pdf; 20 EXPECT_TRUE(pdf.Init()); 21 EXPECT_TRUE(pdf.context() != NULL); 22 23 // Render page 1. 24 gfx::Rect rect_1(10, 10, 520, 700); 25 gfx::Size size_1(540, 720); 26 pdf.StartPage(size_1, rect_1, 1.25); 27 pdf.FinishPage(); 28 29 // Render page 2. 30 gfx::Rect rect_2(10, 10, 520, 700); 31 gfx::Size size_2(720, 540); 32 pdf.StartPage(size_2, rect_2, 2.0); 33 pdf.FinishPage(); 34 35 pdf.FinishDocument(); 36 37 // Check data size. 38 uint32 size = pdf.GetDataSize(); 39 EXPECT_GT(size, 0U); 40 41 // Get resulting data. 42 std::vector<char> buffer(size, 0); 43 pdf.GetData(&buffer.front(), size); 44 45 // Test browser-side constructor. 46 PdfMetafileCg pdf2; 47 EXPECT_TRUE(pdf2.InitFromData(&buffer.front(), size)); 48 49 // Get the first 4 characters from pdf2. 50 std::vector<char> buffer2(4, 0); 51 pdf2.GetData(&buffer2.front(), 4); 52 53 // Test that the header begins with "%PDF". 54 std::string header(&buffer2.front(), 4); 55 EXPECT_EQ(0U, header.find("%PDF", 0)); 56 57 // Test that the PDF is correctly reconstructed. 58 EXPECT_EQ(2U, pdf2.GetPageCount()); 59 gfx::Size page_size = pdf2.GetPageBounds(1).size(); 60 EXPECT_EQ(540, page_size.width()); 61 EXPECT_EQ(720, page_size.height()); 62 page_size = pdf2.GetPageBounds(2).size(); 63 EXPECT_EQ(720, page_size.width()); 64 EXPECT_EQ(540, page_size.height()); 65 } 66 67 } // namespace printing 68