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

Unified Diff: third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp

Issue 2292763002: [Fetch API] Implement Request.formData and Response.formData. (Closed)
Patch Set: Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
diff --git a/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
index ea13c9fab03ce2d04e052138b7754d719a50428d..dfe1df50e0929d778d008e79730eae2c4fe68e01 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
@@ -4,6 +4,8 @@
#include "modules/fetch/FetchDataLoader.h"
+#include "core/fileapi/Blob.h"
+#include "core/html/FormData.h"
#include "modules/fetch/BytesConsumerForDataConsumerHandle.h"
#include "modules/fetch/BytesConsumerTestUtil.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -31,6 +33,29 @@ using Result = BytesConsumer::Result;
constexpr char kQuickBrownFox[] = "Quick brown fox";
constexpr size_t kQuickBrownFoxLength = 15;
constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16;
+constexpr char kQuickBrownFoxFormData[] =
+ "--boundary\r\n"
+ "Content-Disposition: form-data; name=blob; filename=blob\r\n"
+ "Content-Type: text/plain; charset=iso-8859-1\r\n"
+ "\r\n"
+ "Quick brown fox\r\n"
+ "--boundary\r\n"
+ "Content-Disposition: form-data; name=blob\xC2\xA0without\xC2\xA0type; "
+ "filename=\"blob\xC2\xA0without\xC2\xA0type.txt\"\r\n"
+ "\r\n"
+ "Quick brown fox\r\n"
+ "--boundary\r\n"
+ "Content-Disposition: form-data; name=string\r\n"
+ "\r\n"
+ "Quick brown fox\r\n"
+ "--boundary\r\n"
+ "Content-Disposition: form-data; name=string-with-type\r\n"
+ "Content-Type: text/plain; charset=invalid\r\n"
+ "\r\n"
+ "Quick brown fox\r\n"
+ "--boundary--\r\n";
+constexpr size_t kQuickBrownFoxFormDataLength =
+ WTF_ARRAY_LENGTH(kQuickBrownFoxFormData) - 1u;
TEST(FetchDataLoaderTest, LoadAsBlob) {
Checkpoint checkpoint;
@@ -350,6 +375,179 @@ TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel) {
checkpoint.Call(3);
}
+TEST(FetchDataLoaderTest, LoadAsFormData) {
+ Checkpoint checkpoint;
+ BytesConsumer::Client* client = nullptr;
+ MockBytesConsumer* consumer = MockBytesConsumer::create();
+
+ FetchDataLoader* fetchDataLoader =
+ FetchDataLoader::createLoaderAsFormData("boundary");
+ MockFetchDataLoaderClient* fetchDataLoaderClient =
+ MockFetchDataLoaderClient::create();
+ FormData* formData = nullptr;
+
+ InSequence s;
+ EXPECT_CALL(checkpoint, Call(1));
+ EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
+ Return(Result::ShouldWait)));
+ EXPECT_CALL(checkpoint, Call(2));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
+ SetArgPointee<1>(kQuickBrownFoxFormDataLength),
+ Return(Result::Ok)));
+ EXPECT_CALL(*consumer, endRead(kQuickBrownFoxFormDataLength))
+ .WillOnce(Return(Result::Ok));
+ EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done));
+ EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedFormDataMock(_))
+ .WillOnce(SaveArg<0>(&formData));
+ EXPECT_CALL(checkpoint, Call(3));
+ EXPECT_CALL(*consumer, cancel());
+ EXPECT_CALL(checkpoint, Call(4));
+
+ checkpoint.Call(1);
+ fetchDataLoader->start(consumer, fetchDataLoaderClient);
+ checkpoint.Call(2);
+ ASSERT_TRUE(client);
+ client->onStateChange();
+ checkpoint.Call(3);
+ fetchDataLoader->cancel();
+ checkpoint.Call(4);
+
+ ASSERT_TRUE(formData);
+ ASSERT_EQ(4u, formData->entries().size());
+
+ EXPECT_EQ("blob", formData->entries()[0]->name());
+ EXPECT_EQ("blob", formData->entries()[0]->filename());
+ ASSERT_TRUE(formData->entries()[0]->isFile());
+ EXPECT_EQ(kQuickBrownFoxLength, formData->entries()[0]->blob()->size());
+ EXPECT_EQ("text/plain; charset=iso-8859-1",
+ formData->entries()[0]->blob()->type());
+
+ EXPECT_EQ("blob\xC2\xA0without\xC2\xA0type", formData->entries()[1]->name());
+ EXPECT_EQ("blob\xC2\xA0without\xC2\xA0type.txt",
+ formData->entries()[1]->filename().utf8());
+ ASSERT_TRUE(formData->entries()[1]->isFile());
+ EXPECT_EQ(kQuickBrownFoxLength, formData->entries()[1]->blob()->size());
+ EXPECT_EQ("text/plain", formData->entries()[1]->blob()->type());
+
+ EXPECT_EQ("string", formData->entries()[2]->name());
+ EXPECT_TRUE(formData->entries()[2]->filename().isNull());
+ ASSERT_TRUE(formData->entries()[2]->isString());
+ EXPECT_EQ(kQuickBrownFox, formData->entries()[2]->value());
+
+ EXPECT_EQ("string-with-type", formData->entries()[3]->name());
+ EXPECT_TRUE(formData->entries()[3]->filename().isNull());
+ ASSERT_TRUE(formData->entries()[3]->isString());
+ EXPECT_EQ(kQuickBrownFox, formData->entries()[3]->value());
+}
+
+TEST(FetchDataLoaderTest, LoadAsFormDataPartialInput) {
+ Checkpoint checkpoint;
+ BytesConsumer::Client* client = nullptr;
+ MockBytesConsumer* consumer = MockBytesConsumer::create();
+
+ FetchDataLoader* fetchDataLoader =
+ FetchDataLoader::createLoaderAsFormData("boundary");
+ MockFetchDataLoaderClient* fetchDataLoaderClient =
+ MockFetchDataLoaderClient::create();
+
+ InSequence s;
+ EXPECT_CALL(checkpoint, Call(1));
+ EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
+ Return(Result::ShouldWait)));
+ EXPECT_CALL(checkpoint, Call(2));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
+ SetArgPointee<1>(kQuickBrownFoxFormDataLength - 3u),
+ Return(Result::Ok)));
+ EXPECT_CALL(*consumer, endRead(kQuickBrownFoxFormDataLength - 3u))
+ .WillOnce(Return(Result::Ok));
+ EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done));
+ EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed());
+ EXPECT_CALL(checkpoint, Call(3));
+ EXPECT_CALL(*consumer, cancel());
+ EXPECT_CALL(checkpoint, Call(4));
+
+ checkpoint.Call(1);
+ fetchDataLoader->start(consumer, fetchDataLoaderClient);
+ checkpoint.Call(2);
+ ASSERT_TRUE(client);
+ client->onStateChange();
+ checkpoint.Call(3);
+ fetchDataLoader->cancel();
+ checkpoint.Call(4);
+}
+
+TEST(FetchDataLoaderTest, LoadAsFormDataFailed) {
+ Checkpoint checkpoint;
+ BytesConsumer::Client* client = nullptr;
+ MockBytesConsumer* consumer = MockBytesConsumer::create();
+
+ FetchDataLoader* fetchDataLoader =
+ FetchDataLoader::createLoaderAsFormData("boundary");
+ MockFetchDataLoaderClient* fetchDataLoaderClient =
+ MockFetchDataLoaderClient::create();
+
+ InSequence s;
+ EXPECT_CALL(checkpoint, Call(1));
+ EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
+ Return(Result::ShouldWait)));
+ EXPECT_CALL(checkpoint, Call(2));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(kQuickBrownFoxFormData),
+ SetArgPointee<1>(kQuickBrownFoxFormDataLength),
+ Return(Result::Ok)));
+ EXPECT_CALL(*consumer, endRead(kQuickBrownFoxFormDataLength))
+ .WillOnce(Return(Result::Ok));
+ EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Error));
+ EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed());
+ EXPECT_CALL(checkpoint, Call(3));
+ EXPECT_CALL(*consumer, cancel());
+ EXPECT_CALL(checkpoint, Call(4));
+
+ checkpoint.Call(1);
+ fetchDataLoader->start(consumer, fetchDataLoaderClient);
+ checkpoint.Call(2);
+ ASSERT_TRUE(client);
+ client->onStateChange();
+ checkpoint.Call(3);
+ fetchDataLoader->cancel();
+ checkpoint.Call(4);
+}
+
+TEST(FetchDataLoaderTest, LoadAsFormDataCancel) {
+ Checkpoint checkpoint;
+ BytesConsumer::Client* client = nullptr;
+ MockBytesConsumer* consumer = MockBytesConsumer::create();
+
+ FetchDataLoader* fetchDataLoader =
+ FetchDataLoader::createLoaderAsFormData("boundary");
+ MockFetchDataLoaderClient* fetchDataLoaderClient =
+ MockFetchDataLoaderClient::create();
+
+ InSequence s;
+ EXPECT_CALL(checkpoint, Call(1));
+ EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client));
+ EXPECT_CALL(*consumer, beginRead(_, _))
+ .WillOnce(DoAll(SetArgPointee<0>(nullptr), SetArgPointee<1>(0),
+ Return(Result::ShouldWait)));
+ EXPECT_CALL(checkpoint, Call(2));
+ EXPECT_CALL(*consumer, cancel());
+ EXPECT_CALL(checkpoint, Call(3));
+
+ checkpoint.Call(1);
+ fetchDataLoader->start(consumer, fetchDataLoaderClient);
+ checkpoint.Call(2);
+ fetchDataLoader->cancel();
+ checkpoint.Call(3);
+}
+
TEST(FetchDataLoaderTest, LoadAsString) {
Checkpoint checkpoint;
BytesConsumer::Client* client = nullptr;

Powered by Google App Engine
This is Rietveld 408576698