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

Side by Side Diff: third_party/WebKit/Source/core/dom/custom/CustomElementReactionTestHelpers.h

Issue 2027513002: Add a stack of queues of elements with reaction queues. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ce-element-queue
Patch Set: Rebase. Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/dom/custom/CustomElementReaction.h"
6
5 #include "core/dom/custom/CustomElementReactionQueue.h" 7 #include "core/dom/custom/CustomElementReactionQueue.h"
6 8 #include "platform/heap/Handle.h"
7 #include "core/dom/custom/CustomElementReaction.h" 9 #include "wtf/Noncopyable.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "wtf/text/AtomicString.h"
10 #include <initializer_list> 10 #include <initializer_list>
11 #include <vector> 11 #include <vector>
12 12
13 namespace blink { 13 namespace blink {
14 14
15 class Element;
16
15 class Command : public GarbageCollectedFinalized<Command> { 17 class Command : public GarbageCollectedFinalized<Command> {
16 WTF_MAKE_NONCOPYABLE(Command); 18 WTF_MAKE_NONCOPYABLE(Command);
17 public: 19 public:
18 Command() { } 20 Command() { }
19 virtual ~Command() { } 21 virtual ~Command() { }
20 DEFINE_INLINE_VIRTUAL_TRACE() { } 22 DEFINE_INLINE_VIRTUAL_TRACE() { }
21 virtual void run(Element*) = 0; 23 virtual void run(Element*) = 0;
22 }; 24 };
23 25
24 class Log : public Command { 26 class Log : public Command {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 void invoke(Element* element) override 92 void invoke(Element* element) override
91 { 93 {
92 for (auto& command : m_commands) 94 for (auto& command : m_commands)
93 command->run(element); 95 command->run(element);
94 } 96 }
95 97
96 private: 98 private:
97 HeapVector<Member<Command>> m_commands; 99 HeapVector<Member<Command>> m_commands;
98 }; 100 };
99 101
100 TEST(CustomElementReactionQueueTest, invokeReactions_one)
101 {
102 std::vector<char> log;
103 CustomElementReactionQueue* queue = new CustomElementReactionQueue();
104 queue->add(new TestReaction({new Log('a', log)}));
105 queue->invokeReactions(nullptr);
106 EXPECT_EQ(log, std::vector<char>({'a'}))
107 << "the reaction should have been invoked";
108 }
109
110 TEST(CustomElementReactionQueueTest, invokeReactions_many)
111 {
112 std::vector<char> log;
113 CustomElementReactionQueue* queue = new CustomElementReactionQueue();
114 queue->add(new TestReaction({new Log('a', log)}));
115 queue->add(new TestReaction({new Log('b', log)}));
116 queue->add(new TestReaction({new Log('c', log)}));
117 queue->invokeReactions(nullptr);
118 EXPECT_EQ(log, std::vector<char>({'a', 'b', 'c'}))
119 << "the reaction should have been invoked";
120 }
121
122 TEST(CustomElementReactionQueueTest, invokeReactions_recursive)
123 {
124 std::vector<char> log;
125 CustomElementReactionQueue* queue = new CustomElementReactionQueue();
126
127 CustomElementReaction* third = new TestReaction({
128 new Log('c', log),
129 new Recurse(queue)}); // "Empty" recursion
130
131 CustomElementReaction* second = new TestReaction({
132 new Log('b', log),
133 new Enqueue(queue, third)}); // Unwinds one level of recursion
134
135 CustomElementReaction* first = new TestReaction({
136 new Log('a', log),
137 new Enqueue(queue, second),
138 new Recurse(queue)}); // Non-empty recursion
139
140 queue->add(first);
141 queue->invokeReactions(nullptr);
142 EXPECT_EQ(log, std::vector<char>({'a', 'b', 'c'}))
143 << "the reactions should have been invoked";
144 }
145
146 } // namespace blink 102 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698