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

Side by Side Diff: chrome/browser/ui/webui/print_preview_handler_unittest.cc

Issue 8528053: Print Preview: Making margin selection sticky (part 2/2, again) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing Created 9 years, 1 month 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
OLDNEW
(Empty)
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 "base/command_line.h"
6 #include "base/json/json_writer.h"
7 #include "base/values.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/printing/background_printing_manager.h"
10 #include "chrome/browser/printing/print_preview_tab_controller.h"
11 #include "chrome/browser/ui/browser_list.h"
12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
13 #include "chrome/browser/ui/webui/print_preview_handler.h"
14 #include "chrome/browser/ui/webui/print_preview_ui.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/test/base/browser_with_test_window_test.h"
17 #include "printing/page_size_margins.h"
18 #include "printing/print_job_constants.h"
19
20 namespace {
21
22 DictionaryValue* GetCustomMarginsDictionary(
23 const double margin_top, const double margin_right,
24 const double margin_bottom,const double margin_left) {
25 base::DictionaryValue* custom_settings = new base::DictionaryValue();
26 custom_settings->SetDouble(printing::kSettingMarginTop, margin_top);
27 custom_settings->SetDouble(printing::kSettingMarginRight, margin_right);
28 custom_settings->SetDouble(printing::kSettingMarginBottom, margin_bottom);
29 custom_settings->SetDouble(printing::kSettingMarginLeft, margin_left);
30 return custom_settings;
31 }
32
33 }
34
35 class PrintPreviewHandlerTest : public BrowserWithTestWindowTest {
36 protected:
37 void SetUp() {
38 BrowserWithTestWindowTest::SetUp();
39 #if !defined(GOOGLE_CHROME_BUILD) || defined(OS_CHROMEOS)
40 CommandLine::ForCurrentProcess()->AppendSwitch(
41 switches::kEnablePrintPreview);
42 #endif
43 ASSERT_TRUE(browser());
44 BrowserList::SetLastActive(browser());
45 ASSERT_TRUE(BrowserList::GetLastActive());
46
47 browser()->NewTab();
48 EXPECT_EQ(1, browser()->tab_count());
49 OpenPrintPreviewTab();
50 }
51
52 virtual void TearDown() {
53 DeletePrintPreviewTab();
54 ClearStickySettings();
55 }
56
57 void OpenPrintPreviewTab() {
58 TabContentsWrapper* initiator_tab =
59 browser()->GetSelectedTabContentsWrapper();
60 ASSERT_TRUE(initiator_tab);
61
62 scoped_refptr<printing::PrintPreviewTabController>
63 controller(new printing::PrintPreviewTabController());
64 ASSERT_TRUE(controller.get());
65
66 preview_tab_ = controller->GetOrCreatePreviewTab(initiator_tab);
67 ASSERT_TRUE(preview_tab_);
68 EXPECT_EQ(2, browser()->tab_count());
69
70 preview_ui_ = static_cast<PrintPreviewUI*>(preview_tab_->web_ui());
71 ASSERT_TRUE(preview_ui_);
72 }
73
74 void DeletePrintPreviewTab() {
75 printing::BackgroundPrintingManager* bg_printing_manager =
76 g_browser_process->background_printing_manager();
77 ASSERT_TRUE(bg_printing_manager->HasPrintPreviewTab(preview_tab_));
78
79 // Deleting TabContentsWrapper* to avoid warings from pref_notifier_impl.cc
80 // after the test ends.
81 delete preview_tab_;
82 }
83
84 void CheckCustomMargins(const double margin_top,
85 const double margin_right,
86 const double margin_bottom,
87 const double margin_left) {
88 EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_top,
89 margin_top);
90 EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_right,
91 margin_right);
92 EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_bottom,
93 margin_bottom);
94 EXPECT_EQ(PrintPreviewHandler::last_used_page_size_margins_->margin_left,
95 margin_left);
96 }
97
98 void RequestPrintWithDefaultMargins() {
99 // Set the minimal dummy settings to make the HandlePrint() code happy.
100 DictionaryValue settings;
101 settings.SetBoolean(printing::kSettingPreviewModifiable, true);
102 settings.SetInteger(printing::kSettingColor, printing::COLOR);
103 settings.SetBoolean(printing::kSettingPrintToPDF, false);
104 settings.SetInteger(printing::kSettingMarginsType,
105 printing::DEFAULT_MARGINS);
106
107 // Put |settings| in to |args| as a JSON string.
108 std::string json_string;
109 base::JSONWriter::Write(&settings, false, &json_string);
110 ListValue args;
111 args.Append(new base::StringValue(json_string)); // |args| takes ownership.
112 preview_ui_->handler_->HandlePrint(&args);
113 }
114
115 void RequestPrintWithCustomMargins(
116 const double margin_top, const double margin_right,
117 const double margin_bottom,const double margin_left) {
118 // Set the minimal dummy settings to make the HandlePrint() code happy.
119 DictionaryValue settings;
120 settings.SetBoolean(printing::kSettingPreviewModifiable, true);
121 settings.SetInteger(printing::kSettingColor, printing::COLOR);
122 settings.SetBoolean(printing::kSettingPrintToPDF, false);
123 settings.SetInteger(printing::kSettingMarginsType,
124 printing::CUSTOM_MARGINS);
125
126 // Creating custom margins dictionary and nesting it in |settings|.
127 DictionaryValue* custom_settings = GetCustomMarginsDictionary(
128 margin_top, margin_right, margin_bottom, margin_left);
129 // |settings| takes ownership.
130 settings.Set(printing::kSettingMarginsCustom, custom_settings);
131
132 // Put |settings| in to |args| as a JSON string.
133 std::string json_string;
134 base::JSONWriter::Write(&settings, false, &json_string);
135 ListValue args;
136 args.Append(new base::StringValue(json_string)); // |args| takes ownership.
137 preview_ui_->handler_->HandlePrint(&args);
138 }
139
140 TabContentsWrapper* preview_tab_;
141 PrintPreviewUI* preview_ui_;
142
143 private:
144 void ClearStickySettings() {
145 PrintPreviewHandler::last_used_margins_type_ = printing::DEFAULT_MARGINS;
146 delete PrintPreviewHandler::last_used_page_size_margins_;
147 PrintPreviewHandler::last_used_page_size_margins_ = NULL;
148 }
149
150 };
151
152 // Tests that margin settings are saved correctly when printing with custom
153 // margins selected.
154 TEST_F(PrintPreviewHandlerTest, StickyMarginsCustom) {
155 const double kMarginTop = 25.5;
156 const double kMarginRight = 26.5;
157 const double kMarginBottom = 27.5;
158 const double kMarginLeft = 28.5;
159 RequestPrintWithCustomMargins(
160 kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
161 EXPECT_EQ(1, browser()->tab_count());
162
163 // Checking that sticky settings were saved correctly.
164 EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
165 EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
166 printing::CUSTOM_MARGINS);
167 ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
168 CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
169 }
170
171 // Tests that margin settings are saved correctly when printing with default
172 // margins selected.
173 TEST_F(PrintPreviewHandlerTest, StickyMarginsDefault) {
174 RequestPrintWithDefaultMargins();
175 EXPECT_EQ(1, browser()->tab_count());
176
177 // Checking that sticky settings were saved correctly.
178 EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
179 EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
180 printing::DEFAULT_MARGINS);
181 ASSERT_FALSE(PrintPreviewHandler::last_used_page_size_margins_);
182 }
183
184 // Tests that margin settings are saved correctly when printing with custom
185 // margins selected and then again with default margins selected.
186 TEST_F(PrintPreviewHandlerTest, StickyMarginsCustomThenDefault) {
187 const double kMarginTop = 125.5;
188 const double kMarginRight = 126.5;
189 const double kMarginBottom = 127.5;
190 const double kMarginLeft = 128.5;
191 RequestPrintWithCustomMargins(
192 kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
193 EXPECT_EQ(1, browser()->tab_count());
194 DeletePrintPreviewTab();
195 EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
196 printing::CUSTOM_MARGINS);
197 ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
198 CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
199
200 OpenPrintPreviewTab();
201 EXPECT_EQ(2, browser()->tab_count());
202 RequestPrintWithDefaultMargins();
203
204 // Checking that sticky settings were saved correctly.
205 EXPECT_EQ(PrintPreviewHandler::last_used_color_model_, printing::COLOR);
206 EXPECT_EQ(PrintPreviewHandler::last_used_margins_type_,
207 printing::DEFAULT_MARGINS);
208 ASSERT_TRUE(PrintPreviewHandler::last_used_page_size_margins_);
209 CheckCustomMargins(kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
210 }
211
212 // Tests that margin settings are retrieved correctly after printing with custom
213 // margins.
214 TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsCustom) {
215 const double kMarginTop = 125.5;
216 const double kMarginRight = 126.5;
217 const double kMarginBottom = 127.5;
218 const double kMarginLeft = 128.5;
219 RequestPrintWithCustomMargins(
220 kMarginTop, kMarginRight, kMarginBottom, kMarginLeft);
221 base::DictionaryValue initial_settings;
222 preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings);
223 int margins_type;
224 EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType,
225 &margins_type));
226 EXPECT_EQ(margins_type, printing::CUSTOM_MARGINS);
227 double margin_value;
228 EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginTop,
229 &margin_value));
230 EXPECT_EQ(kMarginTop, margin_value);
231 EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginRight,
232 &margin_value));
233 EXPECT_EQ(kMarginRight, margin_value);
234 EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginBottom,
235 &margin_value));
236 EXPECT_EQ(kMarginBottom, margin_value);
237 EXPECT_TRUE(initial_settings.GetDouble(printing::kSettingMarginLeft,
238 &margin_value));
239 EXPECT_EQ(kMarginLeft, margin_value);
240 }
241
242 // Tests that margin settings are retrieved correctly after printing with
243 // default margins.
244 TEST_F(PrintPreviewHandlerTest, GetLastUsedMarginSettingsDefault) {
245 RequestPrintWithDefaultMargins();
246 base::DictionaryValue initial_settings;
247 preview_ui_->handler_->GetLastUsedMarginSettings(&initial_settings);
248 int margins_type;
249 EXPECT_TRUE(initial_settings.GetInteger(printing::kSettingMarginsType,
250 &margins_type));
251 EXPECT_EQ(margins_type, printing::DEFAULT_MARGINS);
252 double margin_value;
253 EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginTop,
254 &margin_value));
255 EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginRight,
256 &margin_value));
257 EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginBottom,
258 &margin_value));
259 EXPECT_FALSE(initial_settings.GetDouble(printing::kSettingMarginLeft,
260 &margin_value));
261 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.cc ('k') | chrome/browser/ui/webui/print_preview_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698