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

Side by Side Diff: chrome/browser/ui/views/payments/view_stack_unittest.cc

Issue 2528503002: [WebPayments] Implement state transitions in desktop WebPayments dialog. (Closed)
Patch Set: Factor out ViewStack and animations Created 4 years 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/observer_list.h"
6 #include "base/run_loop.h"
7 #include "chrome/browser/ui/views/payments/view_stack.h"
8 #include "chrome/browser/ui/views/payments/view_stack_state.h"
9 #include "ui/gfx/animation/test_animation_delegate.h"
10 #include "ui/views/test/views_test_base.h"
11
12 class TestStackState : public ViewStackState {
13 public:
14 class Observer {
15 public:
16 Observer() : state_deleted_(false) {}
17
18 void OnStateBeingDeleted() {
19 state_deleted_ = true;
20 }
21
22 bool state_deleted() { return state_deleted_; }
23
24 private:
25 bool state_deleted_;
26 };
27
28 TestStackState() {}
29 ~TestStackState() override {
30 for (auto& observer: observers_) {
31 observer.OnStateBeingDeleted();
32 }
33 }
34
35 void AddObserver(Observer* observer) {
36 observers_.AddObserver(observer);
37 }
38
39 private:
40 views::View* CreateView() override {
41 return new views::View;
42 }
43
44 base::ObserverList<Observer> observers_;
45
46 DISALLOW_COPY_AND_ASSIGN(TestStackState);
47 };
48
49 class ViewStackTest : public views::ViewsTestBase {
50 public:
51 ViewStackTest() {
52 view_stack_.reset(new ViewStack(base::MakeUnique<TestStackState>()));
53 }
54
55 std::unique_ptr<ViewStack> view_stack_;
56
57 DISALLOW_COPY_AND_ASSIGN(ViewStackTest);
58 };
59
60 TEST_F(ViewStackTest, TestInitialStateAddedAsChildView) {
61 EXPECT_EQ(1, view_stack_->child_count());
62 }
63
64 TEST_F(ViewStackTest, TestPushStateAddsViewToChildren) {
65 view_stack_->PushState(base::MakeUnique<TestStackState>());
66 EXPECT_EQ(2, view_stack_->child_count());
67 }
68
69 TEST_F(ViewStackTest, TestPopStateRemovesChildViewAndCleansUpState) {
70 view_stack_->SetBounds(0, 0, 10, 10);
71
72 TestStackState::Observer observer;
73 std::unique_ptr<TestStackState> state = base::MakeUnique<TestStackState>();
74 state->AddObserver(&observer);
75 views::View* state_view = state->GetView();
76
77 view_stack_->PushState(std::move(state));
78 EXPECT_TRUE(view_stack_->slide_in_animator_->IsAnimating());
79 view_stack_->slide_in_animator_->SetAnimationDelegate(
80 state_view,
81 std::unique_ptr<gfx::AnimationDelegate>(
82 new gfx::TestAnimationDelegate()));
83
84 base::RunLoop().Run();
85 EXPECT_FALSE(view_stack_->slide_in_animator_->IsAnimating());
86 view_stack_->PopState();
87
88 EXPECT_TRUE(view_stack_->slide_out_animator_->IsAnimating());
89 view_stack_->slide_out_animator_->SetAnimationDelegate(
90 state_view,
91 std::unique_ptr<gfx::AnimationDelegate>(
92 new gfx::TestAnimationDelegate()));
93
94 base::RunLoop().Run();
95 EXPECT_FALSE(view_stack_->slide_out_animator_->IsAnimating());
96
97 ASSERT_TRUE(observer.state_deleted());
98 }
99
100 TEST_F(ViewStackTest, TestDeletingViewCleansUpState) {
101 view_stack_->SetBounds(0, 0, 10, 10);
102
103 TestStackState::Observer observer;
104 std::unique_ptr<TestStackState> state = base::MakeUnique<TestStackState>();
105 state->AddObserver(&observer);
106 views::View* state_view = state->GetView();
107
108 view_stack_->PushState(std::move(state));
109 EXPECT_TRUE(view_stack_->slide_in_animator_->IsAnimating());
110 view_stack_->slide_in_animator_->SetAnimationDelegate(
111 state_view,
112 std::unique_ptr<gfx::AnimationDelegate>(
113 new gfx::TestAnimationDelegate()));
114
115 base::RunLoop().Run();
116 EXPECT_FALSE(view_stack_->slide_in_animator_->IsAnimating());
117 view_stack_->PopState();
118
119 EXPECT_TRUE(view_stack_->slide_out_animator_->IsAnimating());
120 view_stack_.reset();
121
122 ASSERT_TRUE(observer.state_deleted());
123 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698