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

Side by Side Diff: third_party/WebKit/Source/core/dom/custom/CustomElementReactionQueueTest.cpp

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/CustomElementReactionQueue.h" 5 #include "core/dom/custom/CustomElementReactionQueue.h"
6 6
7 #include "core/dom/custom/CustomElementReaction.h" 7 #include "core/dom/custom/CustomElementReaction.h"
8 #include "core/dom/custom/CustomElementReactionTestHelpers.h"
8 #include "testing/gtest/include/gtest/gtest.h" 9 #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 Command : public GarbageCollectedFinalized<Command> {
16 WTF_MAKE_NONCOPYABLE(Command);
17 public:
18 Command() { }
19 virtual ~Command() { }
20 DEFINE_INLINE_VIRTUAL_TRACE() { }
21 virtual void run(Element*) = 0;
22 };
23
24 class Log : public Command {
25 WTF_MAKE_NONCOPYABLE(Log);
26 public:
27 Log(char what, std::vector<char>& where) : m_what(what), m_where(where) { }
28 virtual ~Log() { }
29 void run(Element*) override { m_where.push_back(m_what); }
30 private:
31 char m_what;
32 std::vector<char>& m_where;
33 };
34
35 class Recurse : public Command {
36 WTF_MAKE_NONCOPYABLE(Recurse);
37 public:
38 Recurse(CustomElementReactionQueue* queue) : m_queue(queue) { }
39 virtual ~Recurse() { }
40 DEFINE_INLINE_VIRTUAL_TRACE()
41 {
42 Command::trace(visitor);
43 visitor->trace(m_queue);
44 }
45 void run(Element* element) override { m_queue->invokeReactions(element); }
46 private:
47 Member<CustomElementReactionQueue> m_queue;
48 };
49
50 class Enqueue : public Command {
51 WTF_MAKE_NONCOPYABLE(Enqueue);
52 public:
53 Enqueue(CustomElementReactionQueue* queue, CustomElementReaction* reaction)
54 : m_queue(queue)
55 , m_reaction(reaction)
56 {
57 }
58 virtual ~Enqueue() { }
59 DEFINE_INLINE_VIRTUAL_TRACE()
60 {
61 Command::trace(visitor);
62 visitor->trace(m_queue);
63 visitor->trace(m_reaction);
64 }
65 void run(Element*) override
66 {
67 m_queue->add(m_reaction);
68 }
69 private:
70 Member<CustomElementReactionQueue> m_queue;
71 Member<CustomElementReaction> m_reaction;
72 };
73
74 class TestReaction : public CustomElementReaction {
75 WTF_MAKE_NONCOPYABLE(TestReaction);
76 public:
77 TestReaction(std::initializer_list<Command*> commands)
78 {
79 // TODO(dominicc): Simply pass the initializer list when
80 // HeapVector supports initializer lists like Vector.
81 for (auto& command : commands)
82 m_commands.append(command);
83 }
84 virtual ~TestReaction() = default;
85 DEFINE_INLINE_VIRTUAL_TRACE()
86 {
87 CustomElementReaction::trace(visitor);
88 visitor->trace(m_commands);
89 }
90 void invoke(Element* element) override
91 {
92 for (auto& command : m_commands)
93 command->run(element);
94 }
95
96 private:
97 HeapVector<Member<Command>> m_commands;
98 };
99
100 TEST(CustomElementReactionQueueTest, invokeReactions_one) 15 TEST(CustomElementReactionQueueTest, invokeReactions_one)
101 { 16 {
102 std::vector<char> log; 17 std::vector<char> log;
103 CustomElementReactionQueue* queue = new CustomElementReactionQueue(); 18 CustomElementReactionQueue* queue = new CustomElementReactionQueue();
104 queue->add(new TestReaction({new Log('a', log)})); 19 queue->add(new TestReaction({new Log('a', log)}));
105 queue->invokeReactions(nullptr); 20 queue->invokeReactions(nullptr);
106 EXPECT_EQ(log, std::vector<char>({'a'})) 21 EXPECT_EQ(log, std::vector<char>({'a'}))
107 << "the reaction should have been invoked"; 22 << "the reaction should have been invoked";
108 } 23 }
109 24
(...skipping 27 matching lines...) Expand all
137 new Enqueue(queue, second), 52 new Enqueue(queue, second),
138 new Recurse(queue)}); // Non-empty recursion 53 new Recurse(queue)}); // Non-empty recursion
139 54
140 queue->add(first); 55 queue->add(first);
141 queue->invokeReactions(nullptr); 56 queue->invokeReactions(nullptr);
142 EXPECT_EQ(log, std::vector<char>({'a', 'b', 'c'})) 57 EXPECT_EQ(log, std::vector<char>({'a', 'b', 'c'}))
143 << "the reactions should have been invoked"; 58 << "the reactions should have been invoked";
144 } 59 }
145 60
146 } // namespace blink 61 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698