Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "config.h" | |
| 6 #include "core/html/StableState.h" | |
| 7 | |
| 8 #include "wtf/Functional.h" | |
| 9 | |
| 10 #include <gmock/gmock.h> | |
| 11 #include <gtest/gtest.h> | |
| 12 | |
| 13 using WebCore::StableState; | |
| 14 | |
| 15 namespace { | |
| 16 | |
| 17 class MockAwaiter : public StableState::Awaiter { | |
| 18 public: | |
| 19 MOCK_METHOD0(didAwaitStableState, void()); | |
| 20 }; | |
| 21 | |
| 22 TEST(StableState, Await) | |
| 23 { | |
| 24 MockAwaiter awaiter; | |
| 25 EXPECT_CALL(awaiter, didAwaitStableState()).Times(0); | |
| 26 StableState::await(awaiter); | |
| 27 } | |
| 28 | |
| 29 TEST(StableState, AwaitProvide) | |
| 30 { | |
| 31 MockAwaiter awaiter; | |
| 32 EXPECT_CALL(awaiter, didAwaitStableState()).Times(1); | |
| 33 StableState::await(awaiter); | |
| 34 StableState::provide(); | |
| 35 } | |
| 36 | |
| 37 TEST(StableState, AwaitProvideTwice) | |
| 38 { | |
| 39 MockAwaiter awaiter; | |
| 40 EXPECT_CALL(awaiter, didAwaitStableState()).Times(1); | |
| 41 StableState::await(awaiter); | |
| 42 StableState::provide(); | |
| 43 StableState::provide(); | |
| 44 } | |
| 45 | |
| 46 TEST(StableState, AwaitTwiceProvide) | |
| 47 { | |
| 48 MockAwaiter awaiter; | |
| 49 EXPECT_CALL(awaiter, didAwaitStableState()).Times(1); | |
| 50 StableState::await(awaiter); | |
| 51 StableState::await(awaiter); | |
| 52 StableState::provide(); | |
| 53 } | |
| 54 | |
| 55 TEST(StableState, AwaitProvideAwaitProvide) | |
| 56 { | |
| 57 MockAwaiter awaiter; | |
| 58 EXPECT_CALL(awaiter, didAwaitStableState()).Times(2); | |
| 59 StableState::await(awaiter); | |
| 60 StableState::provide(); | |
| 61 StableState::await(awaiter); | |
| 62 StableState::provide(); | |
| 63 } | |
| 64 | |
| 65 TEST(StableState, TwoAwaiters) | |
| 66 { | |
| 67 MockAwaiter awaiter1; | |
| 68 MockAwaiter awaiter2; | |
| 69 EXPECT_CALL(awaiter1, didAwaitStableState()).Times(1); | |
| 70 EXPECT_CALL(awaiter2, didAwaitStableState()).Times(1); | |
| 71 StableState::await(awaiter1); | |
| 72 StableState::await(awaiter2); | |
| 73 StableState::provide(); | |
| 74 } | |
| 75 | |
| 76 // Test that a class can await a stable state and invoke one of two callbacks | |
| 77 // without inheriting StableState::Awaiter or having state bits. | |
| 78 | |
| 79 class MockCallbacks { | |
| 80 public: | |
| 81 MOCK_METHOD0(callback1, void()); | |
| 82 MOCK_METHOD0(callback2, void()); | |
| 83 }; | |
| 84 | |
| 85 class ClosureAwaiter : public StableState::Awaiter { | |
| 86 public: | |
| 87 ClosureAwaiter(const Closure& closure) : m_closure(closure) { } | |
| 88 virtual void didAwaitStableState() OVERRIDE | |
| 89 { | |
| 90 m_closure(); | |
| 91 delete this; | |
| 92 } | |
| 93 private: | |
| 94 Closure m_closure; | |
| 95 }; | |
| 96 | |
| 97 TEST(StableState, ClosureAwaiter) | |
| 98 { | |
| 99 MockCallbacks callbacks; | |
| 100 EXPECT_CALL(callbacks, callback1()).Times(2); | |
| 101 EXPECT_CALL(callbacks, callback2()).Times(1); | |
| 102 StableState::await(*new ClosureAwaiter(bind(&MockCallbacks::callback1, &call backs))); | |
|
acolwell GONE FROM CHROMIUM
2014/02/07 19:09:31
I don't quite get what this is testing. Why do you
philipj_slow
2014/02/09 17:10:17
This is verifying the "separate StableState::Await
| |
| 103 StableState::await(*new ClosureAwaiter(bind(&MockCallbacks::callback2, &call backs))); | |
| 104 StableState::await(*new ClosureAwaiter(bind(&MockCallbacks::callback1, &call backs))); | |
| 105 StableState::provide(); | |
| 106 } | |
| 107 | |
| 108 } // namespace | |
| OLD | NEW |