Index: third_party/WebKit/Source/modules/background_fetch/BackgroundFetchManagerTest.cpp |
diff --git a/third_party/WebKit/Source/modules/background_fetch/BackgroundFetchManagerTest.cpp b/third_party/WebKit/Source/modules/background_fetch/BackgroundFetchManagerTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7bd0a0da3fc663b18e79dd157183483e58dddfb7 |
--- /dev/null |
+++ b/third_party/WebKit/Source/modules/background_fetch/BackgroundFetchManagerTest.cpp |
@@ -0,0 +1,185 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "modules/background_fetch/BackgroundFetchManager.h" |
+ |
+#include "bindings/core/v8/Dictionary.h" |
+#include "bindings/core/v8/ExceptionState.h" |
+#include "bindings/core/v8/ScriptState.h" |
+#include "bindings/core/v8/V8Binding.h" |
+#include "bindings/core/v8/V8BindingForTesting.h" |
+#include "bindings/modules/v8/RequestOrUSVString.h" |
+#include "bindings/modules/v8/RequestOrUSVStringOrRequestOrUSVStringSequence.h" |
+#include "core/dom/ExceptionCode.h" |
+#include "modules/fetch/Request.h" |
+#include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace blink { |
+ |
+class BackgroundFetchManagerTest : public ::testing::Test { |
+ protected: |
+ // Creates a vector of WebServiceWorkerRequest entries for the given |
+ // |requests| based on the |scope|. Proxied in the fixture to reduce the |
+ // number of friend declarations necessary in the BackgroundFetchManager. |
+ Vector<WebServiceWorkerRequest> createWebRequestVector( |
+ V8TestingScope& scope, |
+ const RequestOrUSVStringOrRequestOrUSVStringSequence& requests) { |
+ return BackgroundFetchManager::createWebRequestVector( |
+ scope.getScriptState(), requests, scope.getExceptionState()); |
+ } |
+ |
+ // Returns a Dictionary object that represents a JavaScript dictionary with |
+ // a single key-value pair, where the key always is "method" with the value |
+ // set to |method|. |
+ Dictionary getDictionaryForMethod(V8TestingScope& scope, const char* method) { |
+ v8::Isolate* isolate = scope.isolate(); |
+ v8::Local<v8::Object> data = v8::Object::New(isolate); |
+ |
+ data->Set(isolate->GetCurrentContext(), v8String(isolate, "method"), |
+ v8String(isolate, method)) |
+ .ToChecked(); |
+ |
+ return Dictionary(scope.isolate(), data, scope.getExceptionState()); |
+ } |
+}; |
+ |
+TEST_F(BackgroundFetchManagerTest, NullValue) { |
+ V8TestingScope scope; |
+ |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests; |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_TRUE(scope.getExceptionState().hadException()); |
+ EXPECT_EQ(scope.getExceptionState().code(), V8TypeError); |
+} |
+ |
+TEST_F(BackgroundFetchManagerTest, SingleUSVString) { |
+ V8TestingScope scope; |
+ |
+ KURL imageUrl(ParsedURLString, "https://www.example.com/my_image.png"); |
+ |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests = |
+ RequestOrUSVStringOrRequestOrUSVStringSequence::fromUSVString( |
+ imageUrl.getString()); |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_FALSE(scope.getExceptionState().hadException()); |
+ |
+ ASSERT_EQ(webRequests.size(), 1u); |
+ |
+ WebServiceWorkerRequest& webRequest = webRequests[0]; |
+ EXPECT_EQ(webRequest.url(), WebURL(imageUrl)); |
+ EXPECT_EQ(webRequest.method(), "GET"); |
+} |
+ |
+TEST_F(BackgroundFetchManagerTest, SingleRequest) { |
+ V8TestingScope scope; |
+ |
+ KURL imageUrl(ParsedURLString, "https://www.example.com/my_image.png"); |
+ |
+ Request* request = Request::create( |
+ scope.getScriptState(), imageUrl.getString(), |
+ getDictionaryForMethod(scope, "POST"), scope.getExceptionState()); |
+ ASSERT_FALSE(scope.getExceptionState().hadException()); |
+ ASSERT_TRUE(request); |
+ |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests = |
+ RequestOrUSVStringOrRequestOrUSVStringSequence::fromRequest(request); |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_FALSE(scope.getExceptionState().hadException()); |
+ |
+ ASSERT_EQ(webRequests.size(), 1u); |
+ |
+ WebServiceWorkerRequest& webRequest = webRequests[0]; |
+ EXPECT_EQ(webRequest.url(), WebURL(imageUrl)); |
+ EXPECT_EQ(webRequest.method(), "POST"); |
+} |
+ |
+TEST_F(BackgroundFetchManagerTest, Sequence) { |
+ V8TestingScope scope; |
+ |
+ KURL imageUrl(ParsedURLString, "https://www.example.com/my_image.png"); |
+ KURL iconUrl(ParsedURLString, "https://www.example.com/my_icon.jpg"); |
+ KURL catVideoUrl(ParsedURLString, "https://www.example.com/my_cat_video.avi"); |
+ |
+ RequestOrUSVString imageRequest = |
+ RequestOrUSVString::fromUSVString(imageUrl.getString()); |
+ RequestOrUSVString iconRequest = |
+ RequestOrUSVString::fromUSVString(iconUrl.getString()); |
+ |
+ Request* request = Request::create( |
+ scope.getScriptState(), catVideoUrl.getString(), |
+ getDictionaryForMethod(scope, "DELETE"), scope.getExceptionState()); |
+ ASSERT_FALSE(scope.getExceptionState().hadException()); |
+ ASSERT_TRUE(request); |
+ |
+ RequestOrUSVString catVideoRequest = RequestOrUSVString::fromRequest(request); |
+ |
+ HeapVector<RequestOrUSVString> requestSequence; |
+ requestSequence.push_back(imageRequest); |
+ requestSequence.push_back(iconRequest); |
+ requestSequence.push_back(catVideoRequest); |
+ |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests = |
+ RequestOrUSVStringOrRequestOrUSVStringSequence:: |
+ fromRequestOrUSVStringSequence(requestSequence); |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_FALSE(scope.getExceptionState().hadException()); |
+ |
+ ASSERT_EQ(webRequests.size(), 3u); |
+ EXPECT_EQ(webRequests[0].url(), WebURL(imageUrl)); |
+ EXPECT_EQ(webRequests[0].method(), "GET"); |
+ |
+ EXPECT_EQ(webRequests[1].url(), WebURL(iconUrl)); |
+ EXPECT_EQ(webRequests[1].method(), "GET"); |
+ |
+ EXPECT_EQ(webRequests[2].url(), WebURL(catVideoUrl)); |
+ EXPECT_EQ(webRequests[2].method(), "DELETE"); |
+} |
+ |
+TEST_F(BackgroundFetchManagerTest, SequenceEmpty) { |
+ V8TestingScope scope; |
+ |
+ HeapVector<RequestOrUSVString> requestSequence; |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests = |
+ RequestOrUSVStringOrRequestOrUSVStringSequence:: |
+ fromRequestOrUSVStringSequence(requestSequence); |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_TRUE(scope.getExceptionState().hadException()); |
+ EXPECT_EQ(scope.getExceptionState().code(), V8TypeError); |
+} |
+ |
+TEST_F(BackgroundFetchManagerTest, SequenceWithNullValue) { |
+ V8TestingScope scope; |
+ |
+ KURL imageUrl(ParsedURLString, "https://www.example.com/my_image.png"); |
+ |
+ RequestOrUSVString nullRequest; |
+ RequestOrUSVString imageRequest = |
+ RequestOrUSVString::fromUSVString(imageUrl.getString()); |
+ |
+ HeapVector<RequestOrUSVString> requestSequence; |
+ requestSequence.push_back(imageRequest); |
+ requestSequence.push_back(nullRequest); |
+ |
+ RequestOrUSVStringOrRequestOrUSVStringSequence requests = |
+ RequestOrUSVStringOrRequestOrUSVStringSequence:: |
+ fromRequestOrUSVStringSequence(requestSequence); |
+ |
+ Vector<WebServiceWorkerRequest> webRequests = |
+ createWebRequestVector(scope, requests); |
+ ASSERT_TRUE(scope.getExceptionState().hadException()); |
+ EXPECT_EQ(scope.getExceptionState().code(), V8TypeError); |
+} |
+ |
+} // namespace blink |