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

Side by Side Diff: printing/printing_context_win_unittest.cc

Issue 2383473004: Remove PrintingContext::InitWithSettings(). (Closed)
Patch Set: fix build Created 4 years, 2 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
« no previous file with comments | « printing/printing_context_win.cc ('k') | no next file » | 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/printing_context_win.h" 5 #include "printing/printing_context_win.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 11 matching lines...) Expand all
22 22
23 // This test is automatically disabled if no printer is available. 23 // This test is automatically disabled if no printer is available.
24 class PrintingContextTest : public PrintingTest<testing::Test>, 24 class PrintingContextTest : public PrintingTest<testing::Test>,
25 public PrintingContext::Delegate { 25 public PrintingContext::Delegate {
26 public: 26 public:
27 void PrintSettingsCallback(PrintingContext::Result result) { 27 void PrintSettingsCallback(PrintingContext::Result result) {
28 result_ = result; 28 result_ = result;
29 } 29 }
30 30
31 // PrintingContext::Delegate methods. 31 // PrintingContext::Delegate methods.
32 gfx::NativeView GetParentView() override { return NULL; } 32 gfx::NativeView GetParentView() override { return nullptr; }
33 std::string GetAppLocale() override { return std::string(); } 33 std::string GetAppLocale() override { return std::string(); }
34 34
35 protected: 35 protected:
36 PrintingContext::Result result() const { return result_; } 36 PrintingContext::Result result() const { return result_; }
37 37
38 private: 38 private:
39 PrintingContext::Result result_; 39 PrintingContext::Result result_;
40 }; 40 };
41 41
42 namespace { 42 namespace {
43 43
44 struct FreeHandleTraits { 44 struct FreeHandleTraits {
45 typedef HANDLE Handle; 45 typedef HANDLE Handle;
46 static void CloseHandle(HANDLE handle) { GlobalFree(handle); } 46 static void CloseHandle(HANDLE handle) { GlobalFree(handle); }
47 static bool IsHandleValid(HANDLE handle) { return handle != NULL; } 47 static bool IsHandleValid(HANDLE handle) { return handle != nullptr; }
48 static HANDLE NullHandle() { return NULL; } 48 static HANDLE NullHandle() { return nullptr; }
49 }; 49 };
50 typedef base::win::GenericScopedHandle<FreeHandleTraits, 50
51 base::win::DummyVerifierTraits> 51 using ScopedGlobalAlloc =
52 ScopedGlobalAlloc; 52 base::win::GenericScopedHandle<FreeHandleTraits,
53 base::win::DummyVerifierTraits>;
53 54
54 } // namespace 55 } // namespace
55 56
56 class MockPrintingContextWin : public PrintingContextSystemDialogWin { 57 class MockPrintingContextWin : public PrintingContextSystemDialogWin {
57 public: 58 public:
58 explicit MockPrintingContextWin(Delegate* delegate) 59 explicit MockPrintingContextWin(Delegate* delegate)
59 : PrintingContextSystemDialogWin(delegate) {} 60 : PrintingContextSystemDialogWin(delegate) {}
60 61
61 protected: 62 protected:
62 // This is a fake PrintDlgEx implementation that sets the right fields in 63 // This is a fake PrintDlgEx implementation that sets the right fields in
63 // |lppd| to trigger a bug in older revisions of PrintingContext. 64 // |lppd| to trigger a bug in older revisions of PrintingContext.
64 HRESULT ShowPrintDialog(PRINTDLGEX* lppd) override { 65 HRESULT ShowPrintDialog(PRINTDLGEX* lppd) override {
65 // The interesting bits: 66 // The interesting bits:
66 // Pretend the user hit print 67 // Pretend the user hit print
67 lppd->dwResultAction = PD_RESULT_PRINT; 68 lppd->dwResultAction = PD_RESULT_PRINT;
68 69
69 // Pretend the page range is 1-5, but since lppd->Flags does not have 70 // Pretend the page range is 1-5, but since lppd->Flags does not have
70 // PD_SELECTION set, this really shouldn't matter. 71 // PD_SELECTION set, this really shouldn't matter.
71 lppd->nPageRanges = 1; 72 lppd->nPageRanges = 1;
72 lppd->lpPageRanges[0].nFromPage = 1; 73 lppd->lpPageRanges[0].nFromPage = 1;
73 lppd->lpPageRanges[0].nToPage = 5; 74 lppd->lpPageRanges[0].nToPage = 5;
74 75
75 base::string16 printer_name = PrintingContextTest::GetDefaultPrinter(); 76 base::string16 printer_name = PrintingContextTest::GetDefaultPrinter();
76 ScopedPrinterHandle printer; 77 ScopedPrinterHandle printer;
77 if (!printer.OpenPrinter(printer_name.c_str())) 78 if (!printer.OpenPrinter(printer_name.c_str()))
78 return E_FAIL; 79 return E_FAIL;
79 80
80 const DEVMODE* dev_mode = NULL; 81 const DEVMODE* dev_mode = nullptr;
81 lppd->hDC = NULL; 82 lppd->hDC = nullptr;
82 lppd->hDevMode = NULL; 83 lppd->hDevMode = nullptr;
83 lppd->hDevNames = NULL; 84 lppd->hDevNames = nullptr;
84 85
85 PrinterInfo2 info_2; 86 PrinterInfo2 info_2;
86 if (info_2.Init(printer.Get())) 87 if (info_2.Init(printer.Get()))
87 dev_mode = info_2.get()->pDevMode; 88 dev_mode = info_2.get()->pDevMode;
88 if (!dev_mode) 89 if (!dev_mode)
89 return E_FAIL; 90 return E_FAIL;
90 91
91 base::win::ScopedCreateDC hdc( 92 base::win::ScopedCreateDC hdc(
92 CreateDC(L"WINSPOOL", printer_name.c_str(), NULL, dev_mode)); 93 CreateDC(L"WINSPOOL", printer_name.c_str(), nullptr, dev_mode));
93 if (!hdc.Get()) 94 if (!hdc.Get())
94 return E_FAIL; 95 return E_FAIL;
95 96
96 size_t dev_mode_size = dev_mode->dmSize + dev_mode->dmDriverExtra; 97 size_t dev_mode_size = dev_mode->dmSize + dev_mode->dmDriverExtra;
97 ScopedGlobalAlloc dev_mode_mem(GlobalAlloc(GMEM_MOVEABLE, dev_mode_size)); 98 ScopedGlobalAlloc dev_mode_mem(GlobalAlloc(GMEM_MOVEABLE, dev_mode_size));
98 if (!dev_mode_mem.Get()) 99 if (!dev_mode_mem.Get())
99 return E_FAIL; 100 return E_FAIL;
100 void* dev_mode_ptr = GlobalLock(dev_mode_mem.Get()); 101 void* dev_mode_ptr = GlobalLock(dev_mode_mem.Get());
101 if (!dev_mode_ptr) 102 if (!dev_mode_ptr)
102 return E_FAIL; 103 return E_FAIL;
103 memcpy(dev_mode_ptr, dev_mode, dev_mode_size); 104 memcpy(dev_mode_ptr, dev_mode, dev_mode_size);
104 GlobalUnlock(dev_mode_mem.Get()); 105 GlobalUnlock(dev_mode_mem.Get());
105 dev_mode_ptr = NULL; 106 dev_mode_ptr = nullptr;
106 107
107 size_t driver_size = 108 size_t driver_size =
108 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pDriverName); 109 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pDriverName);
109 size_t printer_size = 110 size_t printer_size =
110 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pPrinterName); 111 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pPrinterName);
111 size_t port_size = 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pPortName); 112 size_t port_size = 2 + sizeof(wchar_t) * lstrlen(info_2.get()->pPortName);
112 size_t dev_names_size = 113 size_t dev_names_size =
113 sizeof(DEVNAMES) + driver_size + printer_size + port_size; 114 sizeof(DEVNAMES) + driver_size + printer_size + port_size;
114 ScopedGlobalAlloc dev_names_mem(GlobalAlloc(GHND, dev_names_size)); 115 ScopedGlobalAlloc dev_names_mem(GlobalAlloc(GHND, dev_names_size));
115 if (!dev_names_mem.Get()) 116 if (!dev_names_mem.Get())
116 return E_FAIL; 117 return E_FAIL;
117 void* dev_names_ptr = GlobalLock(dev_names_mem.Get()); 118 void* dev_names_ptr = GlobalLock(dev_names_mem.Get());
118 if (!dev_names_ptr) 119 if (!dev_names_ptr)
119 return E_FAIL; 120 return E_FAIL;
120 DEVNAMES* dev_names = reinterpret_cast<DEVNAMES*>(dev_names_ptr); 121 DEVNAMES* dev_names = reinterpret_cast<DEVNAMES*>(dev_names_ptr);
121 dev_names->wDefault = 1; 122 dev_names->wDefault = 1;
122 dev_names->wDriverOffset = sizeof(DEVNAMES) / sizeof(wchar_t); 123 dev_names->wDriverOffset = sizeof(DEVNAMES) / sizeof(wchar_t);
123 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wDriverOffset, 124 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wDriverOffset,
124 info_2.get()->pDriverName, driver_size); 125 info_2.get()->pDriverName, driver_size);
125 dev_names->wDeviceOffset = base::checked_cast<WORD>( 126 dev_names->wDeviceOffset = base::checked_cast<WORD>(
126 dev_names->wDriverOffset + driver_size / sizeof(wchar_t)); 127 dev_names->wDriverOffset + driver_size / sizeof(wchar_t));
127 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wDeviceOffset, 128 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wDeviceOffset,
128 info_2.get()->pPrinterName, printer_size); 129 info_2.get()->pPrinterName, printer_size);
129 dev_names->wOutputOffset = base::checked_cast<WORD>( 130 dev_names->wOutputOffset = base::checked_cast<WORD>(
130 dev_names->wDeviceOffset + printer_size / sizeof(wchar_t)); 131 dev_names->wDeviceOffset + printer_size / sizeof(wchar_t));
131 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wOutputOffset, 132 memcpy(reinterpret_cast<uint8_t*>(dev_names_ptr) + dev_names->wOutputOffset,
132 info_2.get()->pPortName, port_size); 133 info_2.get()->pPortName, port_size);
133 GlobalUnlock(dev_names_mem.Get()); 134 GlobalUnlock(dev_names_mem.Get());
134 dev_names_ptr = NULL; 135 dev_names_ptr = nullptr;
135 136
136 lppd->hDC = hdc.Take(); 137 lppd->hDC = hdc.Take();
137 lppd->hDevMode = dev_mode_mem.Take(); 138 lppd->hDevMode = dev_mode_mem.Take();
138 lppd->hDevNames = dev_names_mem.Take(); 139 lppd->hDevNames = dev_names_mem.Take();
139 return S_OK; 140 return S_OK;
140 } 141 }
141 }; 142 };
142 143
143 TEST_F(PrintingContextTest, PrintAll) { 144 TEST_F(PrintingContextTest, PrintAll) {
144 base::MessageLoop message_loop; 145 base::MessageLoop message_loop;
(...skipping 12 matching lines...) Expand all
157 EXPECT_EQ(0u, settings.ranges().size()); 158 EXPECT_EQ(0u, settings.ranges().size());
158 } 159 }
159 160
160 TEST_F(PrintingContextTest, Base) { 161 TEST_F(PrintingContextTest, Base) {
161 if (IsTestCaseDisabled()) 162 if (IsTestCaseDisabled())
162 return; 163 return;
163 164
164 PrintSettings settings; 165 PrintSettings settings;
165 settings.set_device_name(GetDefaultPrinter()); 166 settings.set_device_name(GetDefaultPrinter());
166 // Initialize it. 167 // Initialize it.
167 std::unique_ptr<PrintingContext> context(PrintingContext::Create(this)); 168 PrintingContextWin context(this);
168 EXPECT_EQ(PrintingContext::OK, context->InitWithSettings(settings)); 169 EXPECT_EQ(PrintingContext::OK, context.InitWithSettingsForTest(settings));
169 170
170 // The print may lie to use and may not support world transformation. 171 // The print may lie to use and may not support world transformation.
171 // Verify right now. 172 // Verify right now.
172 XFORM random_matrix = { 1, 0.1f, 0, 1.5f, 0, 1 }; 173 XFORM random_matrix = { 1, 0.1f, 0, 1.5f, 0, 1 };
173 EXPECT_TRUE(SetWorldTransform(context->context(), &random_matrix)); 174 EXPECT_TRUE(SetWorldTransform(context.context(), &random_matrix));
174 EXPECT_TRUE(ModifyWorldTransform(context->context(), NULL, MWT_IDENTITY)); 175 EXPECT_TRUE(ModifyWorldTransform(context.context(), nullptr, MWT_IDENTITY));
175 } 176 }
176 177
177 } // namespace printing 178 } // namespace printing
OLDNEW
« no previous file with comments | « printing/printing_context_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698