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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp

Issue 2292763002: [Fetch API] Implement Request.formData and Response.formData. (Closed)
Patch Set: More global-interface-listing*-expected.txt, urlencoded-parser-expected.txt Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "modules/fetch/FetchDataLoader.h" 5 #include "modules/fetch/FetchDataLoader.h"
6 6
7 #include <memory>
8 #include "core/fileapi/Blob.h"
9 #include "core/html/FormData.h"
7 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" 10 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h"
8 #include "modules/fetch/BytesConsumerTestUtil.h" 11 #include "modules/fetch/BytesConsumerTestUtil.h"
9 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
11 #include <memory>
12 14
13 namespace blink { 15 namespace blink {
14 16
15 namespace { 17 namespace {
16 18
17 using ::testing::ByMove; 19 using ::testing::ByMove;
18 using ::testing::InSequence; 20 using ::testing::InSequence;
19 using ::testing::Return; 21 using ::testing::Return;
20 using ::testing::DoAll; 22 using ::testing::DoAll;
21 using ::testing::StrictMock; 23 using ::testing::StrictMock;
22 using ::testing::_; 24 using ::testing::_;
23 using ::testing::SaveArg; 25 using ::testing::SaveArg;
24 using ::testing::SetArgPointee; 26 using ::testing::SetArgPointee;
25 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; 27 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
26 using MockFetchDataLoaderClient = 28 using MockFetchDataLoaderClient =
27 BytesConsumerTestUtil::MockFetchDataLoaderClient; 29 BytesConsumerTestUtil::MockFetchDataLoaderClient;
28 using MockBytesConsumer = BytesConsumerTestUtil::MockBytesConsumer; 30 using MockBytesConsumer = BytesConsumerTestUtil::MockBytesConsumer;
29 using Result = BytesConsumer::Result; 31 using Result = BytesConsumer::Result;
30 32
31 constexpr char kQuickBrownFox[] = "Quick brown fox"; 33 constexpr char kQuickBrownFox[] = "Quick brown fox";
32 constexpr size_t kQuickBrownFoxLength = 15; 34 constexpr size_t kQuickBrownFoxLength = 15;
33 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16; 35 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16;
36 constexpr char kQuickBrownFoxFormData[] =
37 "--boundary\r\n"
38 "Content-Disposition: form-data; name=blob; filename=blob\r\n"
39 "Content-Type: text/plain; charset=iso-8859-1\r\n"
40 "\r\n"
41 "Quick brown fox\r\n"
42 "--boundary\r\n"
43 "Content-Disposition: form-data; name=\"blob\xC2\xA0without\xC2\xA0type\"; "
44 "filename=\"blob\xC2\xA0without\xC2\xA0type.txt\"\r\n"
45 "\r\n"
46 "Quick brown fox\r\n"
47 "--boundary\r\n"
48 "Content-Disposition: form-data; name=string\r\n"
49 "\r\n"
50 "Quick brown fox\r\n"
51 "--boundary\r\n"
52 "Content-Disposition: form-data; name=string-with-type\r\n"
53 "Content-Type: text/plain; charset=invalid\r\n"
54 "\r\n"
55 "Quick brown fox\r\n"
56 "--boundary--\r\n";
57 constexpr size_t kQuickBrownFoxFormDataLength =
58 WTF_ARRAY_LENGTH(kQuickBrownFoxFormData) - 1u;
34 59
35 TEST(FetchDataLoaderTest, LoadAsBlob) { 60 TEST(FetchDataLoaderTest, LoadAsBlob) {
36 Checkpoint checkpoint; 61 Checkpoint checkpoint;
37 BytesConsumer::Client* client = nullptr; 62 BytesConsumer::Client* client = nullptr;
38 MockBytesConsumer* consumer = MockBytesConsumer::Create(); 63 MockBytesConsumer* consumer = MockBytesConsumer::Create();
39 64
40 FetchDataLoader* fetch_data_loader = 65 FetchDataLoader* fetch_data_loader =
41 FetchDataLoader::CreateLoaderAsBlobHandle("text/test"); 66 FetchDataLoader::CreateLoaderAsBlobHandle("text/test");
42 MockFetchDataLoaderClient* fetch_data_loader_client = 67 MockFetchDataLoaderClient* fetch_data_loader_client =
43 MockFetchDataLoaderClient::Create(); 68 MockFetchDataLoaderClient::Create();
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 EXPECT_CALL(*consumer, Cancel()); 369 EXPECT_CALL(*consumer, Cancel());
345 EXPECT_CALL(checkpoint, Call(3)); 370 EXPECT_CALL(checkpoint, Call(3));
346 371
347 checkpoint.Call(1); 372 checkpoint.Call(1);
348 fetch_data_loader->Start(consumer, fetch_data_loader_client); 373 fetch_data_loader->Start(consumer, fetch_data_loader_client);
349 checkpoint.Call(2); 374 checkpoint.Call(2);
350 fetch_data_loader->Cancel(); 375 fetch_data_loader->Cancel();
351 checkpoint.Call(3); 376 checkpoint.Call(3);
352 } 377 }
353 378
379 TEST(FetchDataLoaderTest, LoadAsFormData) {
380 Checkpoint checkpoint;
381 BytesConsumer::Client* client = nullptr;
382 MockBytesConsumer* consumer = MockBytesConsumer::Create();
383
384 FetchDataLoader* fetch_data_loader =
385 FetchDataLoader::CreateLoaderAsFormData("boundary");
386 MockFetchDataLoaderClient* fetch_data_loader_client =
387 MockFetchDataLoaderClient::Create();
388 FormData* form_data = nullptr;
389
390 InSequence s;
391 EXPECT_CALL(checkpoint, Call(1));
392 EXPECT_CALL(*consumer, SetClient(_)).WillOnce(SaveArg<0>(&client));
393 EXPECT_CALL(*consumer, BeginRead(_, _))
394 .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
395 Return(Result::kShouldWait)));
396 EXPECT_CALL(checkpoint, Call(2));
397 EXPECT_CALL(*consumer, BeginRead(_, _))
398 .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
399 SetArgPointee<1>(kQuickBrownFoxFormDataLength),
400 Return(Result::kOk)));
401 EXPECT_CALL(*consumer, EndRead(kQuickBrownFoxFormDataLength))
402 .WillOnce(Return(Result::kOk));
403 EXPECT_CALL(*consumer, BeginRead(_, _)).WillOnce(Return(Result::kDone));
404 EXPECT_CALL(*fetch_data_loader_client, DidFetchDataLoadedFormDataMock(_))
405 .WillOnce(SaveArg<0>(&form_data));
406 EXPECT_CALL(checkpoint, Call(3));
407 EXPECT_CALL(*consumer, Cancel());
408 EXPECT_CALL(checkpoint, Call(4));
409
410 checkpoint.Call(1);
411 fetch_data_loader->Start(consumer, fetch_data_loader_client);
412 checkpoint.Call(2);
413 ASSERT_TRUE(client);
414 client->OnStateChange();
415 checkpoint.Call(3);
416 fetch_data_loader->Cancel();
417 checkpoint.Call(4);
418
419 ASSERT_TRUE(form_data);
420 ASSERT_EQ(4u, form_data->Entries().size());
421
422 EXPECT_EQ("blob", form_data->Entries()[0]->name());
423 EXPECT_EQ("blob", form_data->Entries()[0]->Filename());
424 ASSERT_TRUE(form_data->Entries()[0]->isFile());
425 EXPECT_EQ(kQuickBrownFoxLength, form_data->Entries()[0]->GetBlob()->size());
426 EXPECT_EQ("text/plain; charset=iso-8859-1",
427 form_data->Entries()[0]->GetBlob()->type());
428
429 EXPECT_EQ("blob\xC2\xA0without\xC2\xA0type", form_data->Entries()[1]->name());
430 EXPECT_EQ("blob\xC2\xA0without\xC2\xA0type.txt",
431 form_data->Entries()[1]->Filename().Utf8());
432 ASSERT_TRUE(form_data->Entries()[1]->isFile());
433 EXPECT_EQ(kQuickBrownFoxLength, form_data->Entries()[1]->GetBlob()->size());
434 EXPECT_EQ("text/plain", form_data->Entries()[1]->GetBlob()->type());
435
436 EXPECT_EQ("string", form_data->Entries()[2]->name());
437 EXPECT_TRUE(form_data->Entries()[2]->Filename().IsNull());
438 ASSERT_TRUE(form_data->Entries()[2]->IsString());
439 EXPECT_EQ(kQuickBrownFox, form_data->Entries()[2]->Value());
440
441 EXPECT_EQ("string-with-type", form_data->Entries()[3]->name());
442 EXPECT_TRUE(form_data->Entries()[3]->Filename().IsNull());
443 ASSERT_TRUE(form_data->Entries()[3]->IsString());
444 EXPECT_EQ(kQuickBrownFox, form_data->Entries()[3]->Value());
445 }
446
447 TEST(FetchDataLoaderTest, LoadAsFormDataPartialInput) {
448 Checkpoint checkpoint;
449 BytesConsumer::Client* client = nullptr;
450 MockBytesConsumer* consumer = MockBytesConsumer::Create();
451
452 FetchDataLoader* fetch_data_loader =
453 FetchDataLoader::CreateLoaderAsFormData("boundary");
454 MockFetchDataLoaderClient* fetch_data_loader_client =
455 MockFetchDataLoaderClient::Create();
456
457 InSequence s;
458 EXPECT_CALL(checkpoint, Call(1));
459 EXPECT_CALL(*consumer, SetClient(_)).WillOnce(SaveArg<0>(&client));
460 EXPECT_CALL(*consumer, BeginRead(_, _))
461 .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
462 Return(Result::kShouldWait)));
463 EXPECT_CALL(checkpoint, Call(2));
464 EXPECT_CALL(*consumer, BeginRead(_, _))
465 .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
466 SetArgPointee<1>(kQuickBrownFoxFormDataLength - 3u),
467 Return(Result::kOk)));
468 EXPECT_CALL(*consumer, EndRead(kQuickBrownFoxFormDataLength - 3u))
469 .WillOnce(Return(Result::kOk));
470 EXPECT_CALL(*consumer, BeginRead(_, _)).WillOnce(Return(Result::kDone));
471 EXPECT_CALL(*fetch_data_loader_client, DidFetchDataLoadFailed());
472 EXPECT_CALL(checkpoint, Call(3));
473 EXPECT_CALL(*consumer, Cancel());
474 EXPECT_CALL(checkpoint, Call(4));
475
476 checkpoint.Call(1);
477 fetch_data_loader->Start(consumer, fetch_data_loader_client);
478 checkpoint.Call(2);
479 ASSERT_TRUE(client);
480 client->OnStateChange();
481 checkpoint.Call(3);
482 fetch_data_loader->Cancel();
483 checkpoint.Call(4);
484 }
485
486 TEST(FetchDataLoaderTest, LoadAsFormDataFailed) {
487 Checkpoint checkpoint;
488 BytesConsumer::Client* client = nullptr;
489 MockBytesConsumer* consumer = MockBytesConsumer::Create();
490
491 FetchDataLoader* fetch_data_loader =
492 FetchDataLoader::CreateLoaderAsFormData("boundary");
493 MockFetchDataLoaderClient* fetch_data_loader_client =
494 MockFetchDataLoaderClient::Create();
495
496 InSequence s;
497 EXPECT_CALL(checkpoint, Call(1));
498 EXPECT_CALL(*consumer, SetClient(_)).WillOnce(SaveArg<0>(&client));
499 EXPECT_CALL(*consumer, BeginRead(_, _))
500 .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
501 Return(Result::kShouldWait)));
502 EXPECT_CALL(checkpoint, Call(2));
503 EXPECT_CALL(*consumer, BeginRead(_, _))
504 .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
505 SetArgPointee<1>(kQuickBrownFoxFormDataLength),
506 Return(Result::kOk)));
507 EXPECT_CALL(*consumer, EndRead(kQuickBrownFoxFormDataLength))
508 .WillOnce(Return(Result::kOk));
509 EXPECT_CALL(*consumer, BeginRead(_, _)).WillOnce(Return(Result::kError));
510 EXPECT_CALL(*fetch_data_loader_client, DidFetchDataLoadFailed());
511 EXPECT_CALL(checkpoint, Call(3));
512 EXPECT_CALL(*consumer, Cancel());
513 EXPECT_CALL(checkpoint, Call(4));
514
515 checkpoint.Call(1);
516 fetch_data_loader->Start(consumer, fetch_data_loader_client);
517 checkpoint.Call(2);
518 ASSERT_TRUE(client);
519 client->OnStateChange();
520 checkpoint.Call(3);
521 fetch_data_loader->Cancel();
522 checkpoint.Call(4);
523 }
524
525 TEST(FetchDataLoaderTest, LoadAsFormDataCancel) {
526 Checkpoint checkpoint;
527 BytesConsumer::Client* client = nullptr;
528 MockBytesConsumer* consumer = MockBytesConsumer::Create();
529
530 FetchDataLoader* fetch_data_loader =
531 FetchDataLoader::CreateLoaderAsFormData("boundary");
532 MockFetchDataLoaderClient* fetch_data_loader_client =
533 MockFetchDataLoaderClient::Create();
534
535 InSequence s;
536 EXPECT_CALL(checkpoint, Call(1));
537 EXPECT_CALL(*consumer, SetClient(_)).WillOnce(SaveArg<0>(&client));
538 EXPECT_CALL(*consumer, BeginRead(_, _))
539 .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
540 Return(Result::kShouldWait)));
541 EXPECT_CALL(checkpoint, Call(2));
542 EXPECT_CALL(*consumer, Cancel());
543 EXPECT_CALL(checkpoint, Call(3));
544
545 checkpoint.Call(1);
546 fetch_data_loader->Start(consumer, fetch_data_loader_client);
547 checkpoint.Call(2);
548 fetch_data_loader->Cancel();
549 checkpoint.Call(3);
550 }
551
354 TEST(FetchDataLoaderTest, LoadAsString) { 552 TEST(FetchDataLoaderTest, LoadAsString) {
355 Checkpoint checkpoint; 553 Checkpoint checkpoint;
356 BytesConsumer::Client* client = nullptr; 554 BytesConsumer::Client* client = nullptr;
357 MockBytesConsumer* consumer = MockBytesConsumer::Create(); 555 MockBytesConsumer* consumer = MockBytesConsumer::Create();
358 556
359 FetchDataLoader* fetch_data_loader = FetchDataLoader::CreateLoaderAsString(); 557 FetchDataLoader* fetch_data_loader = FetchDataLoader::CreateLoaderAsString();
360 MockFetchDataLoaderClient* fetch_data_loader_client = 558 MockFetchDataLoaderClient* fetch_data_loader_client =
361 MockFetchDataLoaderClient::Create(); 559 MockFetchDataLoaderClient::Create();
362 560
363 InSequence s; 561 InSequence s;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 checkpoint.Call(1); 688 checkpoint.Call(1);
491 fetch_data_loader->Start(consumer, fetch_data_loader_client); 689 fetch_data_loader->Start(consumer, fetch_data_loader_client);
492 checkpoint.Call(2); 690 checkpoint.Call(2);
493 fetch_data_loader->Cancel(); 691 fetch_data_loader->Cancel();
494 checkpoint.Call(3); 692 checkpoint.Call(3);
495 } 693 }
496 694
497 } // namespace 695 } // namespace
498 696
499 } // namespace blink 697 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/fetch/FetchDataLoader.cpp ('k') | third_party/WebKit/Source/modules/fetch/MultipartParser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698