OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/download/download_item_model.h" | 5 #include "chrome/browser/download/download_item_model.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 // Create a char array that has as many elements as there are download | 34 // Create a char array that has as many elements as there are download |
35 // interrupt reasons. We can then use that in a COMPILE_ASSERT to make sure | 35 // interrupt reasons. We can then use that in a COMPILE_ASSERT to make sure |
36 // that all the interrupt reason codes are accounted for. The reason codes are | 36 // that all the interrupt reason codes are accounted for. The reason codes are |
37 // unfortunately sparse, making this necessary. | 37 // unfortunately sparse, making this necessary. |
38 char kInterruptReasonCounter[] = { | 38 char kInterruptReasonCounter[] = { |
39 0, // content::DOWNLOAD_INTERRUPT_REASON_NONE | 39 0, // content::DOWNLOAD_INTERRUPT_REASON_NONE |
40 #define INTERRUPT_REASON(name,value) 0, | 40 #define INTERRUPT_REASON(name,value) 0, |
41 #include "content/public/browser/download_interrupt_reason_values.h" | 41 #include "content/public/browser/download_interrupt_reason_values.h" |
42 #undef INTERRUPT_REASON | 42 #undef INTERRUPT_REASON |
43 }; | 43 }; |
44 const size_t kInterruptReasonCount = ARRAYSIZE_UNSAFE(kInterruptReasonCounter); | 44 const size_t kInterruptReasonCount = arraysize(kInterruptReasonCounter); |
45 | 45 |
46 // Default target path for a mock download item in DownloadItemModelTest. | 46 // Default target path for a mock download item in DownloadItemModelTest. |
47 const base::FilePath::CharType kDefaultTargetFilePath[] = | 47 const base::FilePath::CharType kDefaultTargetFilePath[] = |
48 FILE_PATH_LITERAL("/foo/bar/foo.bar"); | 48 FILE_PATH_LITERAL("/foo/bar/foo.bar"); |
49 | 49 |
50 const base::FilePath::CharType kDefaultDisplayFileName[] = | 50 const base::FilePath::CharType kDefaultDisplayFileName[] = |
51 FILE_PATH_LITERAL("foo.bar"); | 51 FILE_PATH_LITERAL("foo.bar"); |
52 | 52 |
53 // Default URL for a mock download item in DownloadItemModelTest. | 53 // Default URL for a mock download item in DownloadItemModelTest. |
54 const char kDefaultURL[] = "http://example.com/foo.bar"; | 54 const char kDefaultURL[] = "http://example.com/foo.bar"; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 "Failed - Needs authorization" }, | 164 "Failed - Needs authorization" }, |
165 { content::DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM, | 165 { content::DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM, |
166 "Failed - Bad certificate" }, | 166 "Failed - Bad certificate" }, |
167 { content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED, | 167 { content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED, |
168 "Cancelled" }, | 168 "Cancelled" }, |
169 { content::DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN, | 169 { content::DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN, |
170 "Failed - Shutdown" }, | 170 "Failed - Shutdown" }, |
171 { content::DOWNLOAD_INTERRUPT_REASON_CRASH, | 171 { content::DOWNLOAD_INTERRUPT_REASON_CRASH, |
172 "Failed - Crash" }, | 172 "Failed - Crash" }, |
173 }; | 173 }; |
174 COMPILE_ASSERT(kInterruptReasonCount == ARRAYSIZE_UNSAFE(kTestCases), | 174 COMPILE_ASSERT(kInterruptReasonCount == arraysize(kTestCases), |
175 interrupt_reason_mismatch); | 175 interrupt_reason_mismatch); |
176 | 176 |
177 SetupDownloadItemDefaults(); | 177 SetupDownloadItemDefaults(); |
178 for (unsigned i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { | 178 for (unsigned i = 0; i < arraysize(kTestCases); ++i) { |
179 const TestCase& test_case = kTestCases[i]; | 179 const TestCase& test_case = kTestCases[i]; |
180 SetupInterruptedDownloadItem(test_case.reason); | 180 SetupInterruptedDownloadItem(test_case.reason); |
181 EXPECT_STREQ(test_case.expected_status, | 181 EXPECT_STREQ(test_case.expected_status, |
182 base::UTF16ToUTF8(model().GetStatusText()).c_str()); | 182 base::UTF16ToUTF8(model().GetStatusText()).c_str()); |
183 } | 183 } |
184 } | 184 } |
185 | 185 |
186 // Note: This test is currently skipped on Android. See http://crbug.com/139398 | 186 // Note: This test is currently skipped on Android. See http://crbug.com/139398 |
187 TEST_F(DownloadItemModelTest, InterruptTooltip) { | 187 TEST_F(DownloadItemModelTest, InterruptTooltip) { |
188 // Test that we have the correct interrupt tooltip for downloads that are in | 188 // Test that we have the correct interrupt tooltip for downloads that are in |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 "foo.bar\nNeeds authorization" }, | 240 "foo.bar\nNeeds authorization" }, |
241 { content::DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM, | 241 { content::DOWNLOAD_INTERRUPT_REASON_SERVER_CERT_PROBLEM, |
242 "foo.bar\nBad certificate" }, | 242 "foo.bar\nBad certificate" }, |
243 { content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED, | 243 { content::DOWNLOAD_INTERRUPT_REASON_USER_CANCELED, |
244 "foo.bar" }, | 244 "foo.bar" }, |
245 { content::DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN, | 245 { content::DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN, |
246 "foo.bar\nShutdown" }, | 246 "foo.bar\nShutdown" }, |
247 { content::DOWNLOAD_INTERRUPT_REASON_CRASH, | 247 { content::DOWNLOAD_INTERRUPT_REASON_CRASH, |
248 "foo.bar\nCrash" }, | 248 "foo.bar\nCrash" }, |
249 }; | 249 }; |
250 COMPILE_ASSERT(kInterruptReasonCount == ARRAYSIZE_UNSAFE(kTestCases), | 250 COMPILE_ASSERT(kInterruptReasonCount == arraysize(kTestCases), |
251 interrupt_reason_mismatch); | 251 interrupt_reason_mismatch); |
252 | 252 |
253 // Large tooltip width. Should be large enough to accommodate the entire | 253 // Large tooltip width. Should be large enough to accommodate the entire |
254 // tooltip without truncation. | 254 // tooltip without truncation. |
255 const int kLargeTooltipWidth = 1000; | 255 const int kLargeTooltipWidth = 1000; |
256 | 256 |
257 // Small tooltip width. Small enough to require truncation of most | 257 // Small tooltip width. Small enough to require truncation of most |
258 // tooltips. Used to test eliding logic. | 258 // tooltips. Used to test eliding logic. |
259 const int kSmallTooltipWidth = 40; | 259 const int kSmallTooltipWidth = 40; |
260 | 260 |
261 const gfx::FontList& font_list = | 261 const gfx::FontList& font_list = |
262 ui::ResourceBundle::GetSharedInstance().GetFontList( | 262 ui::ResourceBundle::GetSharedInstance().GetFontList( |
263 ui::ResourceBundle::BaseFont); | 263 ui::ResourceBundle::BaseFont); |
264 SetupDownloadItemDefaults(); | 264 SetupDownloadItemDefaults(); |
265 for (unsigned i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { | 265 for (unsigned i = 0; i < arraysize(kTestCases); ++i) { |
266 const TestCase& test_case = kTestCases[i]; | 266 const TestCase& test_case = kTestCases[i]; |
267 SetupInterruptedDownloadItem(test_case.reason); | 267 SetupInterruptedDownloadItem(test_case.reason); |
268 | 268 |
269 // GetTooltipText() elides the tooltip so that the text would fit within a | 269 // GetTooltipText() elides the tooltip so that the text would fit within a |
270 // given width. The following test would fail if kLargeTooltipWidth isn't | 270 // given width. The following test would fail if kLargeTooltipWidth isn't |
271 // large enough to accomodate all the strings. | 271 // large enough to accomodate all the strings. |
272 EXPECT_STREQ( | 272 EXPECT_STREQ( |
273 test_case.expected_tooltip, | 273 test_case.expected_tooltip, |
274 base::UTF16ToUTF8(model().GetTooltipText(font_list, | 274 base::UTF16ToUTF8(model().GetTooltipText(font_list, |
275 kLargeTooltipWidth)).c_str()); | 275 kLargeTooltipWidth)).c_str()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 { 0, 0, false, true, true, "0 B, Paused" }, | 328 { 0, 0, false, true, true, "0 B, Paused" }, |
329 { 1, 0, false, true, true, "1 B, Paused" }, | 329 { 1, 0, false, true, true, "1 B, Paused" }, |
330 { 0, 2, false, true, true, "0/2 B, Paused" }, | 330 { 0, 2, false, true, true, "0/2 B, Paused" }, |
331 { 1, 2, false, true, true, "1/2 B, Paused" }, | 331 { 1, 2, false, true, true, "1/2 B, Paused" }, |
332 { 0, 2, true, true, true, "0/2 B, Paused" }, | 332 { 0, 2, true, true, true, "0/2 B, Paused" }, |
333 { 1, 2, true, true, true, "1/2 B, Paused" }, | 333 { 1, 2, true, true, true, "1/2 B, Paused" }, |
334 }; | 334 }; |
335 | 335 |
336 SetupDownloadItemDefaults(); | 336 SetupDownloadItemDefaults(); |
337 | 337 |
338 for (unsigned i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { | 338 for (unsigned i = 0; i < arraysize(kTestCases); i++) { |
339 const TestCase& test_case = kTestCases[i]; | 339 const TestCase& test_case = kTestCases[i]; |
340 Mock::VerifyAndClearExpectations(&item()); | 340 Mock::VerifyAndClearExpectations(&item()); |
341 Mock::VerifyAndClearExpectations(&model()); | 341 Mock::VerifyAndClearExpectations(&model()); |
342 EXPECT_CALL(item(), GetReceivedBytes()) | 342 EXPECT_CALL(item(), GetReceivedBytes()) |
343 .WillRepeatedly(Return(test_case.received_bytes)); | 343 .WillRepeatedly(Return(test_case.received_bytes)); |
344 EXPECT_CALL(item(), GetTotalBytes()) | 344 EXPECT_CALL(item(), GetTotalBytes()) |
345 .WillRepeatedly(Return(test_case.total_bytes)); | 345 .WillRepeatedly(Return(test_case.total_bytes)); |
346 EXPECT_CALL(item(), TimeRemaining(_)) | 346 EXPECT_CALL(item(), TimeRemaining(_)) |
347 .WillRepeatedly(testing::DoAll( | 347 .WillRepeatedly(testing::DoAll( |
348 testing::SetArgPointee<0>(base::TimeDelta::FromSeconds(10)), | 348 testing::SetArgPointee<0>(base::TimeDelta::FromSeconds(10)), |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 { DownloadItem::CANCELLED, true , false, false, false}, | 400 { DownloadItem::CANCELLED, true , false, false, false}, |
401 { DownloadItem::CANCELLED, true , true , false, false}, | 401 { DownloadItem::CANCELLED, true , true , false, false}, |
402 { DownloadItem::INTERRUPTED, false, false, false, false}, | 402 { DownloadItem::INTERRUPTED, false, false, false, false}, |
403 { DownloadItem::INTERRUPTED, false, true , false, false}, | 403 { DownloadItem::INTERRUPTED, false, true , false, false}, |
404 { DownloadItem::INTERRUPTED, true , false, false, false}, | 404 { DownloadItem::INTERRUPTED, true , false, false, false}, |
405 { DownloadItem::INTERRUPTED, true , true , false, false} | 405 { DownloadItem::INTERRUPTED, true , true , false, false} |
406 }; | 406 }; |
407 | 407 |
408 SetupDownloadItemDefaults(); | 408 SetupDownloadItemDefaults(); |
409 | 409 |
410 for (unsigned i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); i++) { | 410 for (unsigned i = 0; i < arraysize(kTestCases); i++) { |
411 const TestCase& test_case = kTestCases[i]; | 411 const TestCase& test_case = kTestCases[i]; |
412 EXPECT_CALL(item(), GetOpenWhenComplete()) | 412 EXPECT_CALL(item(), GetOpenWhenComplete()) |
413 .WillRepeatedly(Return(test_case.is_auto_open)); | 413 .WillRepeatedly(Return(test_case.is_auto_open)); |
414 EXPECT_CALL(item(), GetState()) | 414 EXPECT_CALL(item(), GetState()) |
415 .WillRepeatedly(Return(test_case.state)); | 415 .WillRepeatedly(Return(test_case.state)); |
416 EXPECT_CALL(item(), IsDangerous()) | 416 EXPECT_CALL(item(), IsDangerous()) |
417 .WillRepeatedly(Return(test_case.is_dangerous)); | 417 .WillRepeatedly(Return(test_case.is_dangerous)); |
418 EXPECT_CALL(item(), GetAutoOpened()) | 418 EXPECT_CALL(item(), GetAutoOpened()) |
419 .WillRepeatedly(Return(test_case.auto_opened)); | 419 .WillRepeatedly(Return(test_case.auto_opened)); |
420 | 420 |
421 EXPECT_EQ(test_case.expected_result, | 421 EXPECT_EQ(test_case.expected_result, |
422 model().ShouldRemoveFromShelfWhenComplete()) | 422 model().ShouldRemoveFromShelfWhenComplete()) |
423 << "Test case: " << i; | 423 << "Test case: " << i; |
424 Mock::VerifyAndClearExpectations(&item()); | 424 Mock::VerifyAndClearExpectations(&item()); |
425 Mock::VerifyAndClearExpectations(&model()); | 425 Mock::VerifyAndClearExpectations(&model()); |
426 } | 426 } |
427 } | 427 } |
OLD | NEW |