Index: third_party/WebKit/Source/core/page/EventSourceTest.cpp |
diff --git a/third_party/WebKit/Source/core/page/EventSourceTest.cpp b/third_party/WebKit/Source/core/page/EventSourceTest.cpp |
deleted file mode 100644 |
index 6ab1b8197d81e706e7b0116340f1cebdf7554c98..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/core/page/EventSourceTest.cpp |
+++ /dev/null |
@@ -1,427 +0,0 @@ |
-// Copyright 2016 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 "core/page/EventSource.h" |
- |
-#include "bindings/core/v8/ExceptionState.h" |
-#include "bindings/core/v8/ScriptState.h" |
-#include "bindings/core/v8/ScriptValue.h" |
-#include "bindings/core/v8/SerializedScriptValue.h" |
-#include "bindings/core/v8/V8Binding.h" |
-#include "core/dom/ExecutionContext.h" |
-#include "core/dom/MessagePort.h" |
-#include "core/events/Event.h" |
-#include "core/events/EventListener.h" |
-#include "core/events/MessageEvent.h" |
-#include "core/page/EventSourceInit.h" |
-#include "core/testing/DummyPageHolder.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-#include <string.h> |
-#include <v8.h> |
- |
-namespace blink { |
- |
-namespace { |
- |
-String dataAsString(ScriptState* scriptState, MessageEvent* event) |
-{ |
- ScriptState::Scope scope(scriptState); |
- v8::Isolate* isolate = scriptState->isolate(); |
- ASSERT(MessageEvent::DataTypeSerializedScriptValue == event->dataType()); |
- if (!event->dataAsSerializedScriptValue()) |
- return String(); |
- MessagePortArray ports = event->ports(); |
- NonThrowableExceptionState es; |
- return toUSVString(isolate, event->dataAsSerializedScriptValue()->deserialize(isolate, &ports), es); |
-} |
- |
-class FakeEventListener : public EventListener { |
-public: |
- static PassRefPtrWillBeRawPtr<FakeEventListener> create() |
- { |
- return adoptRefWillBeNoop(new FakeEventListener()); |
- } |
- bool operator==(const EventListener& x) const override { return &x == this; } |
- const WillBeHeapVector<RefPtrWillBeMember<Event>>& events() { return m_events; } |
- void handleEvent(ExecutionContext* executionContext, Event* event) |
- { |
- m_events.append(event); |
- } |
- DEFINE_INLINE_TRACE() |
- { |
- visitor->trace(m_events); |
- EventListener::trace(visitor); |
- } |
- |
-protected: |
- FakeEventListener() : EventListener(EventListener::CPPEventListenerType) {} |
- WillBeHeapVector<RefPtrWillBeMember<Event>> m_events; |
-}; |
- |
-class EventSourceTest : public ::testing::Test { |
-protected: |
- EventSourceTest() |
- : m_page(DummyPageHolder::create()) |
- , m_source(EventSource::create(&document(), "https://localhost/", EventSourceInit(), m_exceptionState)) |
- { |
- source()->setStateForTest(EventSource::OPEN); |
- source()->setRequestInFlightForTest(true); |
- } |
- ~EventSourceTest() override |
- { |
- source()->setRequestInFlightForTest(false); |
- source()->close(); |
- |
- // We need this because there is |
- // listener -> event -> source -> listener |
- // reference cycle on non-oilpan build. |
- m_source->removeAllEventListeners(); |
- m_source = nullptr; |
- } |
- |
- void enqueue(const char* data) { client()->didReceiveData(data, strlen(data)); } |
- void enqueueOneByOne(const char* data) |
- { |
- const char*p = data; |
- while (*p != '\0') |
- client()->didReceiveData(p++, 1); |
- } |
- |
- Document& document() { return m_page->document(); } |
- ScriptState* scriptState() { return ScriptState::forMainWorld(document().frame()); } |
- EventSource* source() { return m_source; } |
- ThreadableLoaderClient* client() { return m_source->asThreadableLoaderClientForTest(); } |
- |
-private: |
- OwnPtr<DummyPageHolder> m_page; |
- NonThrowableExceptionState m_exceptionState; |
- Persistent<EventSource> m_source; |
-}; |
- |
-TEST_F(EventSourceTest, EmptyMessageEventShouldNotBeDispatched) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("\n"); |
- |
- EXPECT_EQ(0u, listener->events().size()); |
-} |
- |
-TEST_F(EventSourceTest, DispatchSimpleMessageEvent) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
- EXPECT_EQ(String(), event->lastEventId()); |
-} |
- |
-TEST_F(EventSourceTest, DispatchMessageEventWithLastEventId) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("id:99\ndata:hello\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
- EXPECT_EQ("99", event->lastEventId()); |
-} |
- |
-TEST_F(EventSourceTest, DispatchMessageEventWithCustomEventType) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("foo", listener); |
- enqueue("event:foo\ndata:hello\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("foo", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, RetryTakesEffectEvenWhenNotDispatching) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- ASSERT_NE(999u, EventSource::defaultReconnectDelay); |
- |
- EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
- enqueue("retry:999\n"); |
- EXPECT_EQ(999u, source()->reconnectDelayForTest()); |
- EXPECT_EQ(0u, listener->events().size()); |
-} |
- |
-TEST_F(EventSourceTest, EventTypeShouldBeReset) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> fooListener = FakeEventListener::create(); |
- RefPtrWillBeRawPtr<FakeEventListener> messageListener = FakeEventListener::create(); |
- |
- source()->addEventListener("foo", fooListener); |
- source()->addEventListener("message", messageListener); |
- enqueue("event:foo\ndata:hello\n\ndata:bye\n\n"); |
- |
- ASSERT_EQ(1u, fooListener->events().size()); |
- ASSERT_EQ("foo", fooListener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> fooEvent = static_cast<MessageEvent*>(fooListener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, fooEvent->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), fooEvent.get())); |
- |
- ASSERT_EQ(1u, messageListener->events().size()); |
- ASSERT_EQ("message", messageListener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(messageListener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataType()); |
- EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); |
-} |
- |
-TEST_F(EventSourceTest, DataShouldBeReset) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\n\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, LastEventIdShouldNotBeReset) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("id:99\ndata:hello\n\ndata:bye\n\n"); |
- |
- ASSERT_EQ(2u, listener->events().size()); |
- |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
- EXPECT_EQ("99", event0->lastEventId()); |
- |
- ASSERT_EQ("message", listener->events()[1]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listener->events()[1].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); |
- EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); |
- EXPECT_EQ("99", event1->lastEventId()); |
-} |
- |
-TEST_F(EventSourceTest, VariousNewLinesShouldBeAllowed) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueueOneByOne("data:hello\r\n\rdata:bye\r\r"); |
- |
- ASSERT_EQ(2u, listener->events().size()); |
- |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
- |
- ASSERT_EQ("message", listener->events()[1]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listener->events()[1].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); |
- EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); |
-} |
- |
-TEST_F(EventSourceTest, RetryWithEmptyValueShouldRestoreDefaultValue) |
-{ |
- // TODO(yhirano): This is unspecified in the spec. We need to update |
- // the implementation or the spec. |
- EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
- enqueue("retry: 12\n"); |
- EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
- enqueue("retry\n"); |
- EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
-} |
- |
-TEST_F(EventSourceTest, NonDigitRetryShouldBeIgnored) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- |
- EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
- enqueue("retry:123\n"); |
- EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTest()); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry:a0\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- enqueue("retry:xi\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry:2a\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry:09a\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry:1\b\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry: 1234\n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- enqueue("retry:456 \n"); |
- EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
- |
- EXPECT_EQ(0u, listener->events().size()); |
-} |
- |
-TEST_F(EventSourceTest, UnrecognizedFieldShouldBeIgnored) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\nhoge:fuga\npiyo\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, CommentShouldBeIgnored) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\n:event:a\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
-} |
- |
-TEST_F(EventSourceTest, BOMShouldBeIgnored) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("\xef\xbb\xbf" "data:hello\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
-} |
- |
-TEST_F(EventSourceTest, ColonlessLineShouldBeTreatedAsNameOnlyField) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\nevent:a\nevent\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
-} |
- |
-TEST_F(EventSourceTest, AtMostOneLeadingSpaceCanBeSkipped) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener(" type ", listener); |
- enqueue("data: hello \nevent: type \n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ(" type ", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ(" hello ", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, DataShouldAccumulate) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create(); |
- |
- source()->addEventListener("message", listener); |
- enqueue("data:hello\ndata: world\ndata\n\n"); |
- |
- ASSERT_EQ(1u, listener->events().size()); |
- ASSERT_EQ("message", listener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello\nworld\n", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, EventShouldNotAccumulate) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> aListener = FakeEventListener::create(); |
- RefPtrWillBeRawPtr<FakeEventListener> bListener = FakeEventListener::create(); |
- |
- source()->addEventListener("a", aListener); |
- source()->addEventListener("b", bListener); |
- enqueue("data:hello\nevent:a\nevent:b\n\n"); |
- |
- ASSERT_EQ(0u, aListener->events().size()); |
- ASSERT_EQ(1u, bListener->events().size()); |
- ASSERT_EQ("b", bListener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(bListener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
- EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
-} |
- |
-TEST_F(EventSourceTest, FeedDataOneByOne) |
-{ |
- RefPtrWillBeRawPtr<FakeEventListener> aListener = FakeEventListener::create(); |
- RefPtrWillBeRawPtr<FakeEventListener> bListener = FakeEventListener::create(); |
- RefPtrWillBeRawPtr<FakeEventListener> messageListener = FakeEventListener::create(); |
- |
- source()->addEventListener("a", aListener); |
- source()->addEventListener("b", bListener); |
- source()->addEventListener("message", messageListener); |
- enqueueOneByOne("data:hello\r\ndata:world\revent:a\revent:b\nid:4\n\nid:8\ndata:bye\r\n\r"); |
- |
- ASSERT_EQ(0u, aListener->events().size()); |
- |
- ASSERT_EQ(1u, bListener->events().size()); |
- ASSERT_EQ("b", bListener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> bEvent = static_cast<MessageEvent*>(bListener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, bEvent->dataType()); |
- EXPECT_EQ("hello\nworld", dataAsString(scriptState(), bEvent.get())); |
- EXPECT_EQ("4", bEvent->lastEventId()); |
- |
- ASSERT_EQ(1u, messageListener->events().size()); |
- ASSERT_EQ("message", messageListener->events()[0]->type()); |
- RefPtrWillBeRawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(messageListener->events()[0].get()); |
- ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataType()); |
- EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); |
- EXPECT_EQ("8", messageEvent->lastEventId()); |
-} |
- |
-} // namespace |
- |
-} // namespace blink |