OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2012 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 "cc/top_controls_manager.h" | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "base/time.h" | |
9 #include "cc/layer_impl.h" | |
10 #include "cc/layer_tree_impl.h" | |
11 #include "cc/test/fake_impl_proxy.h" | |
12 #include "cc/test/fake_layer_tree_host_impl.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 #include "ui/gfx/vector2d_f.h" | |
15 | |
16 namespace cc { | |
17 namespace { | |
18 | |
19 class MockTopControlsDelegate : public TopControlsDelegate { | |
20 public: | |
21 static const float kTopControlsHeight = 100; | |
22 | |
23 MockTopControlsDelegate() | |
24 : host_impl_(&proxy_), | |
25 redraw_needed_(false), | |
26 update_draw_properties_needed_(false) { | |
27 active_tree_ = LayerTreeImpl::create(&host_impl_); | |
28 root_scroll_layer_ = LayerImpl::create(active_tree_.get(), 1); | |
29 active_tree_->set_root_scroll_layer(root_scroll_layer_.get()); | |
30 } | |
31 | |
32 virtual void setNeedsRedraw() OVERRIDE { | |
33 redraw_needed_ = true; | |
34 } | |
35 | |
36 virtual void setNeedsUpdateDrawProperties() OVERRIDE { | |
37 update_draw_properties_needed_ = true; | |
38 } | |
39 | |
40 virtual LayerTreeImpl* activeTree() OVERRIDE { | |
41 return active_tree_.get(); | |
42 } | |
43 | |
44 TopControlsManager* manager() { | |
45 if (!manager_) | |
46 manager_ = TopControlsManager::create(this, true, kTopControlsHeight); | |
47 return manager_.get(); | |
48 } | |
49 | |
50 LayerImpl* rootScrollLayer() { | |
51 return root_scroll_layer_.get(); | |
52 } | |
53 | |
54 private: | |
55 FakeImplProxy proxy_; | |
56 FakeLayerTreeHostImpl host_impl_; | |
57 scoped_ptr<LayerTreeImpl> active_tree_; | |
58 scoped_ptr<LayerImpl> root_scroll_layer_; | |
59 scoped_ptr<TopControlsManager> manager_; | |
60 bool redraw_needed_; | |
61 bool update_draw_properties_needed_; | |
62 }; | |
63 | |
64 TEST(TopControlsManagerTest, overlayModeDetection) { | |
65 MockTopControlsDelegate delegate; | |
66 TopControlsManager* manager = delegate.manager(); | |
67 delegate.rootScrollLayer()->setScrollDelta(gfx::Vector2dF(0.f, 0.f)); | |
68 | |
69 gfx::Vector2dF remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 30.f)); | |
70 ASSERT_EQ(0.f, remainingScroll.y()); | |
aelias_OOO_until_Jul13
2012/12/19 08:31:18
Use EXPECT_ instead of ASSERT_ all through these t
Ted C
2012/12/19 21:34:17
Done.
| |
71 ASSERT_EQ(-30.f, manager->controls_top_offset()); | |
72 ASSERT_EQ(70.f, manager->content_top_offset()); | |
73 ASSERT_FALSE(manager->is_overlay_mode()); | |
74 delegate.rootScrollLayer()->setScrollDelta( | |
75 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
76 | |
77 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 69.f)); | |
78 ASSERT_EQ(0.f, remainingScroll.y()); | |
79 ASSERT_EQ(-99.f, manager->controls_top_offset()); | |
80 ASSERT_EQ(1.f, manager->content_top_offset()); | |
81 ASSERT_FALSE(manager->is_overlay_mode()); | |
82 delegate.rootScrollLayer()->setScrollDelta( | |
83 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
84 | |
85 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -20.f)); | |
86 ASSERT_EQ(0.f, remainingScroll.y()); | |
87 ASSERT_EQ(-79.f, manager->controls_top_offset()); | |
88 ASSERT_EQ(21.f, manager->content_top_offset()); | |
89 ASSERT_FALSE(manager->is_overlay_mode()); | |
90 delegate.rootScrollLayer()->setScrollDelta( | |
91 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
92 | |
93 // Scroll to the toggle point | |
94 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 21.f)); | |
95 ASSERT_EQ(0.f, remainingScroll.y()); | |
96 ASSERT_EQ(-100.f, manager->controls_top_offset()); | |
97 ASSERT_EQ(0.f, manager->content_top_offset()); | |
98 ASSERT_FALSE(manager->is_overlay_mode()); | |
99 delegate.rootScrollLayer()->setScrollDelta( | |
100 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
101 | |
102 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, 1.f)); | |
103 ASSERT_EQ(1.f, remainingScroll.y()); | |
104 ASSERT_EQ(-100.f, manager->controls_top_offset()); | |
105 ASSERT_EQ(0.f, manager->content_top_offset()); | |
106 ASSERT_TRUE(manager->is_overlay_mode()); | |
107 delegate.rootScrollLayer()->setScrollDelta( | |
108 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
109 | |
110 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -1.f)); | |
111 ASSERT_EQ(-1.f, remainingScroll.y()); | |
112 ASSERT_EQ(-99.f, manager->controls_top_offset()); | |
113 ASSERT_EQ(0.f, manager->content_top_offset()); | |
114 ASSERT_TRUE(manager->is_overlay_mode()); | |
115 delegate.rootScrollLayer()->setScrollDelta( | |
116 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
117 | |
118 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -50.f)); | |
119 ASSERT_EQ(-50.f, remainingScroll.y()); | |
120 ASSERT_EQ(-49.f, manager->controls_top_offset()); | |
121 ASSERT_EQ(50.f, manager->content_top_offset()); | |
122 ASSERT_FALSE(manager->is_overlay_mode()); | |
123 delegate.rootScrollLayer()->setScrollDelta( | |
124 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
125 | |
126 remainingScroll = manager->scrollBy(gfx::Vector2dF(0.f, -50.f)); | |
127 ASSERT_EQ(0.f, manager->controls_top_offset()); | |
128 ASSERT_EQ(100.f, manager->content_top_offset()); | |
129 ASSERT_FALSE(manager->is_overlay_mode()); | |
130 delegate.rootScrollLayer()->setScrollDelta( | |
131 delegate.rootScrollLayer()->scrollDelta() + remainingScroll); | |
132 } | |
133 | |
134 TEST(TopControlsManagerTest, partialShownHideAnimation) { | |
135 MockTopControlsDelegate delegate; | |
136 TopControlsManager* manager = delegate.manager(); | |
137 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); | |
138 manager->scrollBy(gfx::Vector2dF(0.f, 300.f)); | |
139 ASSERT_EQ(-100.f, manager->controls_top_offset()); | |
140 ASSERT_EQ(0.f, manager->content_top_offset()); | |
141 ASSERT_TRUE(manager->is_overlay_mode()); | |
142 | |
143 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 270)); | |
144 manager->scrollBy(gfx::Vector2dF(0.f, -15.f)); | |
145 ASSERT_EQ(-85.f, manager->controls_top_offset()); | |
146 ASSERT_EQ(0.f, manager->content_top_offset()); | |
147 ASSERT_TRUE(manager->is_overlay_mode()); | |
148 | |
149 manager->scrollEnd(); | |
150 ASSERT_TRUE(manager->animation()); | |
151 | |
152 base::TimeTicks time = base::TimeTicks::Now(); | |
153 float previousOffset = manager->controls_top_offset(); | |
154 while(manager->animation()) { | |
155 time = base::TimeDelta::FromMicroseconds(100) + time; | |
156 manager->animate(time); | |
157 ASSERT_LT(manager->controls_top_offset(), previousOffset); | |
158 previousOffset = manager->controls_top_offset(); | |
159 } | |
160 ASSERT_FALSE(manager->animation()); | |
161 ASSERT_EQ(-100.f, manager->controls_top_offset()); | |
162 ASSERT_EQ(0.f, manager->content_top_offset()); | |
163 ASSERT_TRUE(manager->is_overlay_mode()); | |
164 } | |
165 | |
166 TEST(TopControlsManagerTest, partialShownShowAnimation) { | |
167 MockTopControlsDelegate delegate; | |
168 TopControlsManager* manager = delegate.manager(); | |
169 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 300)); | |
170 manager->scrollBy(gfx::Vector2dF(0.f, 300.f)); | |
171 ASSERT_EQ(-100.f, manager->controls_top_offset()); | |
172 ASSERT_EQ(0.f, manager->content_top_offset()); | |
173 ASSERT_TRUE(manager->is_overlay_mode()); | |
174 | |
175 delegate.rootScrollLayer()->setScrollOffset(gfx::Vector2d(0, 230)); | |
176 manager->scrollBy(gfx::Vector2dF(0.f, -70.f)); | |
177 ASSERT_EQ(-30.f, manager->controls_top_offset()); | |
178 ASSERT_EQ(0.f, manager->content_top_offset()); | |
179 ASSERT_TRUE(manager->is_overlay_mode()); | |
180 | |
181 manager->scrollEnd(); | |
182 ASSERT_TRUE(manager->animation()); | |
183 | |
184 base::TimeTicks time = base::TimeTicks::Now(); | |
185 float previousOffset = manager->controls_top_offset(); | |
186 while(manager->animation()) { | |
187 time = base::TimeDelta::FromMicroseconds(100) + time; | |
188 manager->animate(time); | |
189 ASSERT_GT(manager->controls_top_offset(), previousOffset); | |
190 previousOffset = manager->controls_top_offset(); | |
191 } | |
192 ASSERT_FALSE(manager->animation()); | |
193 ASSERT_EQ(0.f, manager->controls_top_offset()); | |
194 ASSERT_EQ(0.f, manager->content_top_offset()); | |
195 ASSERT_TRUE(manager->is_overlay_mode()); | |
196 } | |
197 | |
198 } // namespace | |
199 } // namespace cc | |
OLD | NEW |