Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: printing/emf_win_unittest.cc

Issue 6695013: Cleanup NativeMetafile (win) interface and EMF class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « printing/emf_win.cc ('k') | printing/native_metafile.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "printing/emf_win.h" 5 #include "printing/emf_win.h"
6 6
7 // For quick access. 7 // For quick access.
8 #include <wingdi.h> 8 #include <wingdi.h>
9 #include <winspool.h> 9 #include <winspool.h>
10 10
(...skipping 27 matching lines...) Expand all
38 }; 38 };
39 39
40 const uint32 EMF_HEADER_SIZE = 128; 40 const uint32 EMF_HEADER_SIZE = 128;
41 41
42 } // namespace 42 } // namespace
43 43
44 namespace printing { 44 namespace printing {
45 45
46 TEST(EmfTest, DC) { 46 TEST(EmfTest, DC) {
47 // Simplest use case. 47 // Simplest use case.
48 printing::Emf emf; 48 uint32 size;
49 RECT rect = {100, 100, 200, 200};
50 HDC hdc = CreateCompatibleDC(NULL);
51 EXPECT_TRUE(hdc != NULL);
52 EXPECT_TRUE(emf.CreateDc(hdc, &rect));
53 EXPECT_TRUE(emf.context() != NULL);
54 // In theory, you'd use the HDC with GDI functions here.
55 EXPECT_TRUE(emf.FinishDocument());
56 uint32 size = emf.GetDataSize();
57 EXPECT_EQ(size, EMF_HEADER_SIZE);
58 std::vector<BYTE> data; 49 std::vector<BYTE> data;
59 EXPECT_TRUE(emf.GetData(&data)); 50 {
60 EXPECT_EQ(data.size(), size); 51 printing::Emf emf;
61 emf.CloseEmf(); 52 EXPECT_TRUE(emf.Init());
62 EXPECT_TRUE(DeleteDC(hdc)); 53 EXPECT_TRUE(emf.context() != NULL);
54 // An empty EMF is invalid, so we put at least a rectangle in it.
55 ::Rectangle(emf.context(), 10, 10, 190, 190);
56 EXPECT_TRUE(emf.FinishDocument());
57 size = emf.GetDataSize();
58 EXPECT_GT(size, EMF_HEADER_SIZE);
59 EXPECT_TRUE(emf.GetData(&data));
60 EXPECT_EQ(data.size(), size);
61 }
63 62
64 // Playback the data. 63 // Playback the data.
65 hdc = CreateCompatibleDC(NULL); 64 printing::Emf emf;
65 EXPECT_TRUE(emf.InitFromData(&data.front(), size));
66 HDC hdc = CreateCompatibleDC(NULL);
66 EXPECT_TRUE(hdc); 67 EXPECT_TRUE(hdc);
67 EXPECT_TRUE(emf.InitFromData(&data.front(), size));
68 RECT output_rect = {0, 0, 10, 10}; 68 RECT output_rect = {0, 0, 10, 10};
69 EXPECT_TRUE(emf.Playback(hdc, &output_rect)); 69 EXPECT_TRUE(emf.Playback(hdc, &output_rect));
70 EXPECT_TRUE(DeleteDC(hdc)); 70 EXPECT_TRUE(DeleteDC(hdc));
71 } 71 }
72 72
73 // Disabled if no "UnitTest printer" exist. Useful to reproduce bug 1186598. 73 // Disabled if no "UnitTest printer" exist. Useful to reproduce bug 1186598.
74 TEST_F(EmfPrintingTest, Enumerate) { 74 TEST_F(EmfPrintingTest, Enumerate) {
75 if (IsTestCaseDisabled()) 75 if (IsTestCaseDisabled())
76 return; 76 return;
77 77
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 context->PageDone(); 121 context->PageDone();
122 context->DocumentDone(); 122 context->DocumentDone();
123 } 123 }
124 124
125 // Disabled if no "UnitTest printer" exists. 125 // Disabled if no "UnitTest printer" exists.
126 TEST_F(EmfPrintingTest, PageBreak) { 126 TEST_F(EmfPrintingTest, PageBreak) {
127 base::win::ScopedHDC dc( 127 base::win::ScopedHDC dc(
128 CreateDC(L"WINSPOOL", L"UnitTest Printer", NULL, NULL)); 128 CreateDC(L"WINSPOOL", L"UnitTest Printer", NULL, NULL));
129 if (!dc.Get()) 129 if (!dc.Get())
130 return; 130 return;
131 printing::Emf emf; 131 uint32 size;
132 EXPECT_TRUE(emf.CreateDc(dc.Get(), NULL)); 132 std::vector<BYTE> data;
133 EXPECT_TRUE(emf.context() != NULL); 133 {
134 int pages = 3; 134 printing::Emf emf;
135 while (pages) { 135 EXPECT_TRUE(emf.Init());
136 EXPECT_TRUE(emf.StartPage(gfx::Size(), gfx::Point(), 1)); 136 EXPECT_TRUE(emf.context() != NULL);
137 ::Rectangle(emf.context(), 10, 10, 190, 190); 137 int pages = 3;
138 EXPECT_TRUE(emf.FinishPage()); 138 while (pages) {
139 --pages; 139 EXPECT_TRUE(emf.StartPage(gfx::Size(), gfx::Point(), 1));
140 ::Rectangle(emf.context(), 10, 10, 190, 190);
141 EXPECT_TRUE(emf.FinishPage());
142 --pages;
143 }
144 EXPECT_TRUE(emf.FinishDocument());
145 size = emf.GetDataSize();
146 EXPECT_TRUE(emf.GetData(&data));
147 EXPECT_EQ(data.size(), size);
140 } 148 }
141 EXPECT_TRUE(emf.FinishDocument());
142 uint32 size = emf.GetDataSize();
143 std::vector<BYTE> data;
144 EXPECT_TRUE(emf.GetData(&data));
145 EXPECT_EQ(data.size(), size);
146 emf.CloseEmf();
147 149
148 // Playback the data. 150 // Playback the data.
149 DOCINFO di = {0}; 151 DOCINFO di = {0};
150 di.cbSize = sizeof(DOCINFO); 152 di.cbSize = sizeof(DOCINFO);
151 di.lpszDocName = L"Test Job"; 153 di.lpszDocName = L"Test Job";
152 int job_id = ::StartDoc(dc.Get(), &di); 154 int job_id = ::StartDoc(dc.Get(), &di);
155 printing::Emf emf;
153 EXPECT_TRUE(emf.InitFromData(&data.front(), size)); 156 EXPECT_TRUE(emf.InitFromData(&data.front(), size));
154 EXPECT_TRUE(emf.SafePlayback(dc.Get())); 157 EXPECT_TRUE(emf.SafePlayback(dc.Get()));
155 ::EndDoc(dc.Get()); 158 ::EndDoc(dc.Get());
156 // Since presumably the printer is not real, let us just delete the job from 159 // Since presumably the printer is not real, let us just delete the job from
157 // the queue. 160 // the queue.
158 HANDLE printer = NULL; 161 HANDLE printer = NULL;
159 if (::OpenPrinter(L"UnitTest Printer", &printer, NULL)) { 162 if (::OpenPrinter(L"UnitTest Printer", &printer, NULL)) {
160 ::SetJob(printer, job_id, 0, NULL, JOB_CONTROL_DELETE); 163 ::SetJob(printer, job_id, 0, NULL, JOB_CONTROL_DELETE);
161 ClosePrinter(printer); 164 ClosePrinter(printer);
162 } 165 }
163 } 166 }
164 167
165 TEST(EmfTest, FileBackedDC) { 168 TEST(EmfTest, FileBackedEmf) {
166 // Simplest use case. 169 // Simplest use case.
167 printing::Emf emf;
168 RECT rect = {100, 100, 200, 200};
169 HDC hdc = CreateCompatibleDC(NULL);
170 EXPECT_TRUE(hdc != NULL);
171 ScopedTempDir scratch_metafile_dir; 170 ScopedTempDir scratch_metafile_dir;
172 ASSERT_TRUE(scratch_metafile_dir.CreateUniqueTempDir()); 171 ASSERT_TRUE(scratch_metafile_dir.CreateUniqueTempDir());
173 FilePath metafile_path; 172 FilePath metafile_path;
174 EXPECT_TRUE(file_util::CreateTemporaryFileInDir(scratch_metafile_dir.path(), 173 EXPECT_TRUE(file_util::CreateTemporaryFileInDir(scratch_metafile_dir.path(),
175 &metafile_path)); 174 &metafile_path));
176 EXPECT_TRUE(emf.CreateFileBackedDc(hdc, &rect, metafile_path)); 175 uint32 size;
177 EXPECT_TRUE(emf.context() != NULL);
178 // In theory, you'd use the HDC with GDI functions here.
179 EXPECT_TRUE(emf.FinishDocument());
180
181 uint32 size = emf.GetDataSize();
182 EXPECT_EQ(size, EMF_HEADER_SIZE);
183 std::vector<BYTE> data; 176 std::vector<BYTE> data;
184 EXPECT_TRUE(emf.GetData(&data)); 177 {
185 EXPECT_EQ(data.size(), size); 178 printing::Emf emf;
186 emf.CloseEmf(); 179 EXPECT_TRUE(emf.InitToFile(metafile_path));
180 EXPECT_TRUE(emf.context() != NULL);
181 // An empty EMF is invalid, so we put at least a rectangle in it.
182 ::Rectangle(emf.context(), 10, 10, 190, 190);
183 EXPECT_TRUE(emf.FinishDocument());
184 size = emf.GetDataSize();
185 EXPECT_GT(size, EMF_HEADER_SIZE);
186 EXPECT_TRUE(emf.GetData(&data));
187 EXPECT_EQ(data.size(), size);
188 }
187 int64 file_size = 0; 189 int64 file_size = 0;
188 file_util::GetFileSize(metafile_path, &file_size); 190 file_util::GetFileSize(metafile_path, &file_size);
189 EXPECT_EQ(size, file_size); 191 EXPECT_EQ(size, file_size);
190 EXPECT_TRUE(DeleteDC(hdc));
191 192
192 // Playback the data. 193 // Playback the data.
193 hdc = CreateCompatibleDC(NULL); 194 HDC hdc = CreateCompatibleDC(NULL);
194 EXPECT_TRUE(hdc); 195 EXPECT_TRUE(hdc);
195 EXPECT_TRUE(emf.CreateFromFile(metafile_path)); 196 printing::Emf emf;
197 EXPECT_TRUE(emf.InitFromFile(metafile_path));
196 RECT output_rect = {0, 0, 10, 10}; 198 RECT output_rect = {0, 0, 10, 10};
197 EXPECT_TRUE(emf.Playback(hdc, &output_rect)); 199 EXPECT_TRUE(emf.Playback(hdc, &output_rect));
198 EXPECT_TRUE(DeleteDC(hdc)); 200 EXPECT_TRUE(DeleteDC(hdc));
199 emf.CloseEmf();
200 } 201 }
201 202
202 } // namespace printing 203 } // namespace printing
OLDNEW
« no previous file with comments | « printing/emf_win.cc ('k') | printing/native_metafile.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698