| Index: third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
|
| diff --git a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
|
| deleted file mode 100644
|
| index d1c172e61797871f46c0a506bbc491122817111e..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
|
| +++ /dev/null
|
| @@ -1,493 +0,0 @@
|
| -// Copyright 2015 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/fetch/CompositeDataConsumerHandle.h"
|
| -
|
| -#include "modules/fetch/DataConsumerHandleTestUtil.h"
|
| -#include "platform/CrossThreadFunctional.h"
|
| -#include "platform/WaitableEvent.h"
|
| -#include "platform/heap/Handle.h"
|
| -#include "public/platform/Platform.h"
|
| -#include "public/platform/WebThread.h"
|
| -#include "public/platform/WebTraceLocation.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "wtf/Locker.h"
|
| -#include "wtf/PtrUtil.h"
|
| -#include <memory>
|
| -
|
| -namespace blink {
|
| -
|
| -namespace {
|
| -
|
| -using ::testing::ByMove;
|
| -using ::testing::InSequence;
|
| -using ::testing::Return;
|
| -using ::testing::StrictMock;
|
| -using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
|
| -
|
| -const WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::ShouldWait;
|
| -const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok;
|
| -const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
|
| -
|
| -class MockReader : public WebDataConsumerHandle::Reader {
|
| -public:
|
| - static std::unique_ptr<StrictMock<MockReader>> create() { return wrapUnique(new StrictMock<MockReader>); }
|
| -
|
| - using Result = WebDataConsumerHandle::Result;
|
| - using Flags = WebDataConsumerHandle::Flags;
|
| - MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
|
| - MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
|
| - MOCK_METHOD1(endRead, Result(size_t));
|
| -};
|
| -
|
| -class MockHandle : public WebDataConsumerHandle {
|
| -public:
|
| - static std::unique_ptr<StrictMock<MockHandle>> create() { return wrapUnique(new StrictMock<MockHandle>); }
|
| -
|
| - MOCK_METHOD1(obtainReader, std::unique_ptr<Reader>(Client*));
|
| -
|
| -private:
|
| - const char* debugName() const override { return "MockHandle in CompositeDataConsumerHandleTest"; }
|
| -};
|
| -
|
| -class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
|
| -public:
|
| - using Self = ThreadingRegistrationTest;
|
| - static PassRefPtr<Self> create() { return adoptRef(new Self); }
|
| -
|
| - void run()
|
| - {
|
| - ThreadHolder holder(this);
|
| - m_waitableEvent = wrapUnique(new WaitableEvent());
|
| -
|
| - postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
|
| - postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| -private:
|
| - ThreadingRegistrationTest() = default;
|
| -
|
| - void createHandle()
|
| - {
|
| - m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
|
| - m_waitableEvent->signal();
|
| - }
|
| - void obtainReader()
|
| - {
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
|
| - }
|
| - void update()
|
| - {
|
| - m_updater->update(DataConsumerHandle::create("handle2", m_context));
|
| - m_updater.clear();
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| - std::unique_ptr<WebDataConsumerHandle> m_handle;
|
| - CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
|
| -};
|
| -
|
| -class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
|
| -public:
|
| - using Self = ThreadingRegistrationDeleteHandleTest;
|
| - static PassRefPtr<Self> create() { return adoptRef(new Self); }
|
| -
|
| - void run()
|
| - {
|
| - ThreadHolder holder(this);
|
| - m_waitableEvent = wrapUnique(new WaitableEvent());
|
| -
|
| - postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
|
| - postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| -private:
|
| - ThreadingRegistrationDeleteHandleTest() = default;
|
| -
|
| - void createHandle()
|
| - {
|
| - m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
|
| - m_waitableEvent->signal();
|
| - }
|
| -
|
| - void obtainReader()
|
| - {
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
|
| - }
|
| - void update()
|
| - {
|
| - m_updater->update(DataConsumerHandle::create("handle2", m_context));
|
| - m_updater.clear();
|
| - m_handle = nullptr;
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| - std::unique_ptr<WebDataConsumerHandle> m_handle;
|
| - CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
|
| -};
|
| -
|
| -class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
|
| -public:
|
| - using Self = ThreadingRegistrationDeleteReaderTest;
|
| - static PassRefPtr<Self> create() { return adoptRef(new Self); }
|
| -
|
| - void run()
|
| - {
|
| - ThreadHolder holder(this);
|
| - m_waitableEvent = wrapUnique(new WaitableEvent());
|
| -
|
| - postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
|
| - postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| -private:
|
| - ThreadingRegistrationDeleteReaderTest() = default;
|
| -
|
| - void createHandle()
|
| - {
|
| - m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
|
| - m_waitableEvent->signal();
|
| - }
|
| -
|
| - void obtainReader()
|
| - {
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
|
| - }
|
| - void update()
|
| - {
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - m_updater->update(DataConsumerHandle::create("handle2", m_context));
|
| - m_updater.clear();
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| - std::unique_ptr<WebDataConsumerHandle> m_handle;
|
| - CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
|
| -};
|
| -
|
| -class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
|
| -public:
|
| - using Self = ThreadingUpdatingReaderWhileUpdatingTest;
|
| - static PassRefPtr<Self> create() { return adoptRef(new Self); }
|
| -
|
| - void run()
|
| - {
|
| - ThreadHolder holder(this);
|
| - m_waitableEvent = wrapUnique(new WaitableEvent());
|
| - m_updateEvent = wrapUnique(new WaitableEvent());
|
| -
|
| - postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
|
| - postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| -private:
|
| - ThreadingUpdatingReaderWhileUpdatingTest() = default;
|
| -
|
| - void createHandle()
|
| - {
|
| - m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
|
| - m_waitableEvent->signal();
|
| - }
|
| -
|
| - void obtainReader()
|
| - {
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
|
| - m_updateEvent->wait();
|
| - }
|
| -
|
| - void update()
|
| - {
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::reobtainReader, wrapPassRefPtr(this)));
|
| - m_updater->update(DataConsumerHandle::create("handle2", m_context));
|
| - m_updater.clear();
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
|
| - m_updateEvent->signal();
|
| - }
|
| -
|
| - void reobtainReader()
|
| - {
|
| - m_reader = nullptr;
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - }
|
| -
|
| - std::unique_ptr<WebDataConsumerHandle> m_handle;
|
| - CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
|
| - std::unique_ptr<WaitableEvent> m_updateEvent;
|
| -};
|
| -
|
| -class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
|
| -public:
|
| - using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest;
|
| - static PassRefPtr<Self> create() { return adoptRef(new Self); }
|
| -
|
| - void run()
|
| - {
|
| - ThreadHolder holder(this);
|
| - m_waitableEvent = wrapUnique(new WaitableEvent());
|
| - m_updateEvent = wrapUnique(new WaitableEvent());
|
| -
|
| - postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::createHandle, wrapPassRefPtr(this)));
|
| - postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::obtainReader, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| -private:
|
| - ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default;
|
| -
|
| - void createHandle()
|
| - {
|
| - m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::create("handle1", m_context), &m_updater);
|
| - m_waitableEvent->signal();
|
| - }
|
| -
|
| - void obtainReader()
|
| - {
|
| - m_reader = m_handle->obtainReader(&m_client);
|
| - postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
|
| - // Stalls this thread while updating handles.
|
| - m_updateEvent->wait();
|
| - }
|
| - void update()
|
| - {
|
| - m_updater->update(DataConsumerHandle::create("handle2", m_context));
|
| - m_updater->update(DataConsumerHandle::create("handle3", m_context));
|
| - m_updateEvent->signal();
|
| - m_updater.clear();
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetReader, wrapPassRefPtr(this)));
|
| - postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDone, wrapPassRefPtr(this)));
|
| - }
|
| -
|
| - std::unique_ptr<WebDataConsumerHandle> m_handle;
|
| - CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
|
| - std::unique_ptr<WaitableEvent> m_updateEvent;
|
| -};
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, Read)
|
| -{
|
| - char buffer[20];
|
| - size_t size = 0;
|
| - DataConsumerHandleTestUtil::NoopClient client;
|
| - Checkpoint checkpoint;
|
| -
|
| - std::unique_ptr<MockHandle> handle1 = MockHandle::create();
|
| - std::unique_ptr<MockHandle> handle2 = MockHandle::create();
|
| -
|
| - // They will be adopted by |obtainReader|.
|
| - MockReader* reader1 = MockReader::create().release();
|
| - MockReader* reader2 = MockReader::create().release();
|
| -
|
| - InSequence s;
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*handle1, obtainReader(&client)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
|
| - EXPECT_CALL(checkpoint, Call(1));
|
| - EXPECT_CALL(*reader1, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(2));
|
| - EXPECT_CALL(*handle2, obtainReader(&client)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
|
| - EXPECT_CALL(checkpoint, Call(3));
|
| - EXPECT_CALL(*reader2, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(4));
|
| -
|
| - CompositeDataConsumerHandle::Updater* updater = nullptr;
|
| - std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
|
| - checkpoint.Call(0);
|
| - std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(&client);
|
| - checkpoint.Call(1);
|
| - EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
|
| - checkpoint.Call(2);
|
| - updater->update(std::move(handle2));
|
| - checkpoint.Call(3);
|
| - EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
|
| - checkpoint.Call(4);
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, TwoPhaseRead)
|
| -{
|
| - const void* p = nullptr;
|
| - size_t size = 0;
|
| - Checkpoint checkpoint;
|
| -
|
| - std::unique_ptr<MockHandle> handle1 = MockHandle::create();
|
| - std::unique_ptr<MockHandle> handle2 = MockHandle::create();
|
| -
|
| - // They are adopted by |obtainReader|.
|
| - MockReader* reader1 = MockReader::create().release();
|
| - MockReader* reader2 = MockReader::create().release();
|
| -
|
| - InSequence s;
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*handle1, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
|
| - EXPECT_CALL(checkpoint, Call(1));
|
| - EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(2));
|
| - EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(3));
|
| - EXPECT_CALL(*handle2, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
|
| - EXPECT_CALL(checkpoint, Call(4));
|
| - EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(5));
|
| - EXPECT_CALL(*reader2, endRead(0)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(6));
|
| -
|
| - CompositeDataConsumerHandle::Updater* updater = nullptr;
|
| - std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
|
| - checkpoint.Call(0);
|
| - std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
|
| - checkpoint.Call(1);
|
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
|
| - checkpoint.Call(2);
|
| - EXPECT_EQ(kOk, reader->endRead(0));
|
| - checkpoint.Call(3);
|
| - updater->update(std::move(handle2));
|
| - checkpoint.Call(4);
|
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
|
| - checkpoint.Call(5);
|
| - EXPECT_EQ(kOk, reader->endRead(0));
|
| - checkpoint.Call(6);
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, HangingTwoPhaseRead)
|
| -{
|
| - const void* p = nullptr;
|
| - size_t size = 0;
|
| - Checkpoint checkpoint;
|
| -
|
| - std::unique_ptr<MockHandle> handle1 = MockHandle::create();
|
| - std::unique_ptr<MockHandle> handle2 = MockHandle::create();
|
| - std::unique_ptr<MockHandle> handle3 = MockHandle::create();
|
| -
|
| - // They are adopted by |obtainReader|.
|
| - MockReader* reader1 = MockReader::create().release();
|
| - MockReader* reader2 = MockReader::create().release();
|
| - MockReader* reader3 = MockReader::create().release();
|
| -
|
| - InSequence s;
|
| - EXPECT_CALL(checkpoint, Call(0));
|
| - EXPECT_CALL(*handle1, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader1))));
|
| - EXPECT_CALL(checkpoint, Call(1));
|
| - EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(2));
|
| - EXPECT_CALL(checkpoint, Call(3));
|
| - EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(*handle2, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader2))));
|
| - EXPECT_CALL(checkpoint, Call(4));
|
| - EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kShouldWait));
|
| - EXPECT_CALL(checkpoint, Call(5));
|
| - EXPECT_CALL(*handle3, obtainReader(nullptr)).WillOnce(Return(ByMove(WTF::wrapUnique(reader3))));
|
| - EXPECT_CALL(checkpoint, Call(6));
|
| - EXPECT_CALL(*reader3, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(7));
|
| - EXPECT_CALL(*reader3, endRead(0)).WillOnce(Return(kOk));
|
| - EXPECT_CALL(checkpoint, Call(8));
|
| -
|
| - CompositeDataConsumerHandle::Updater* updater = nullptr;
|
| - std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
|
| - checkpoint.Call(0);
|
| - std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
|
| - checkpoint.Call(1);
|
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
|
| - checkpoint.Call(2);
|
| - updater->update(std::move(handle2));
|
| - checkpoint.Call(3);
|
| - EXPECT_EQ(kOk, reader->endRead(0));
|
| - checkpoint.Call(4);
|
| - EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size));
|
| - checkpoint.Call(5);
|
| - updater->update(std::move(handle3));
|
| - checkpoint.Call(6);
|
| - EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
|
| - checkpoint.Call(7);
|
| - EXPECT_EQ(kOk, reader->endRead(0));
|
| - checkpoint.Call(8);
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, RegisterClientOnDifferentThreads)
|
| -{
|
| - RefPtr<ThreadingRegistrationTest> test = ThreadingRegistrationTest::create();
|
| - test->run();
|
| -
|
| - EXPECT_EQ(
|
| - "A reader is attached to handle1 on the reading thread.\n"
|
| - "A reader is detached from handle1 on the reading thread.\n"
|
| - "A reader is attached to handle2 on the reading thread.\n"
|
| - "A reader is detached from handle2 on the reading thread.\n",
|
| - test->result());
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, DeleteHandleWhileUpdating)
|
| -{
|
| - RefPtr<ThreadingRegistrationDeleteHandleTest> test = ThreadingRegistrationDeleteHandleTest::create();
|
| - test->run();
|
| -
|
| - EXPECT_EQ(
|
| - "A reader is attached to handle1 on the reading thread.\n"
|
| - "A reader is detached from handle1 on the reading thread.\n"
|
| - "A reader is attached to handle2 on the reading thread.\n"
|
| - "A reader is detached from handle2 on the reading thread.\n",
|
| - test->result());
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, DeleteReaderWhileUpdating)
|
| -{
|
| - RefPtr<ThreadingRegistrationDeleteReaderTest> test = ThreadingRegistrationDeleteReaderTest::create();
|
| - test->run();
|
| -
|
| - EXPECT_EQ(
|
| - "A reader is attached to handle1 on the reading thread.\n"
|
| - "A reader is detached from handle1 on the reading thread.\n",
|
| - test->result());
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, UpdateReaderWhileUpdating)
|
| -{
|
| - RefPtr<ThreadingUpdatingReaderWhileUpdatingTest> test = ThreadingUpdatingReaderWhileUpdatingTest::create();
|
| - test->run();
|
| -
|
| - EXPECT_EQ(
|
| - "A reader is attached to handle1 on the reading thread.\n"
|
| - "A reader is detached from handle1 on the reading thread.\n"
|
| - "A reader is attached to handle2 on the reading thread.\n"
|
| - "A reader is detached from handle2 on the reading thread.\n",
|
| - test->result());
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, UpdateTwiceAtOnce)
|
| -{
|
| - RefPtr<ThreadingRegistrationUpdateTwiceAtOneTimeTest> test = ThreadingRegistrationUpdateTwiceAtOneTimeTest::create();
|
| - test->run();
|
| -
|
| - EXPECT_EQ(
|
| - "A reader is attached to handle1 on the reading thread.\n"
|
| - "A reader is detached from handle1 on the reading thread.\n"
|
| - "A reader is attached to handle3 on the reading thread.\n"
|
| - "A reader is detached from handle3 on the reading thread.\n",
|
| - test->result());
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, DoneHandleNotification)
|
| -{
|
| - RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNotificationTest::create();
|
| - CompositeDataConsumerHandle::Updater* updater = nullptr;
|
| - // Test this function returns.
|
| - test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle(), &updater));
|
| -}
|
| -
|
| -TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification)
|
| -{
|
| - RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create();
|
| - CompositeDataConsumerHandle::Updater* updater = nullptr;
|
| - // Test this function doesn't crash.
|
| - test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle(), &updater));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace blink
|
|
|