Chromium Code Reviews| Index: chrome/browser/ui/views/payments/view_stack_unittest.cc |
| diff --git a/chrome/browser/ui/views/payments/view_stack_unittest.cc b/chrome/browser/ui/views/payments/view_stack_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..eb77a71aece2a5baac46ed2254f4ae8756a9b395 |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/payments/view_stack_unittest.cc |
| @@ -0,0 +1,119 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/observer_list.h" |
| +#include "base/run_loop.h" |
| +#include "chrome/browser/ui/views/payments/view_stack.h" |
| +#include "ui/gfx/animation/test_animation_delegate.h" |
| +#include "ui/views/test/views_test_base.h" |
| + |
| +class TestStackView : public views::View { |
| + public: |
| + class Observer { |
| + public: |
| + Observer() : view_deleted_(false) {} |
| + |
| + void OnViewBeingDeleted() { |
| + view_deleted_ = true; |
| + } |
| + |
| + bool view_deleted() { return view_deleted_; } |
| + |
| + private: |
| + bool view_deleted_; |
| + }; |
| + |
| + TestStackView() {} |
| + ~TestStackView() override { |
| + for (auto& observer: observers_) { |
| + observer.OnViewBeingDeleted(); |
| + } |
| + } |
| + |
| + void AddObserver(Observer* observer) { |
| + observers_.AddObserver(observer); |
| + } |
| + |
| + private: |
| + base::ObserverList<Observer> observers_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestStackView); |
| +}; |
| + |
| +class ViewStackTest : public views::ViewsTestBase { |
| + public: |
| + ViewStackTest() { |
| + view_stack_.reset(new ViewStack()); |
|
sky
2016/12/12 20:30:56
Use MakeUnique, or just make ViewStack a value mam
anthonyvd
2016/12/12 22:20:48
Used MakeUnique here to be able to delete the view
|
| + view_stack_->Push(base::MakeUnique<TestStackView>(), false); |
| + } |
| + |
| + std::unique_ptr<ViewStack> view_stack_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ViewStackTest); |
| +}; |
| + |
| +TEST_F(ViewStackTest, TestInitialStateAddedAsChildView) { |
| + EXPECT_EQ(1, view_stack_->child_count()); |
| +} |
| + |
| +TEST_F(ViewStackTest, TestPushStateAddsViewToChildren) { |
| + view_stack_->Push(base::MakeUnique<TestStackView>(), true); |
| + EXPECT_EQ(2, view_stack_->child_count()); |
| +} |
|
sky
2016/12/12 20:30:56
Please add assertions around bounds and visibility
anthonyvd
2016/12/12 22:20:48
Added some around bounds, let me know if you had a
|
| + |
| +TEST_F(ViewStackTest, TestPopStateRemovesChildViewAndCleansUpState) { |
| + view_stack_->SetBounds(0, 0, 10, 10); |
| + |
| + TestStackView::Observer observer; |
| + std::unique_ptr<TestStackView> view = base::MakeUnique<TestStackView>(); |
| + view->AddObserver(&observer); |
| + views::View* view_ptr = view.get(); |
| + |
| + view_stack_->Push(std::move(view), true); |
| + EXPECT_TRUE(view_stack_->slide_in_animator_->IsAnimating()); |
| + view_stack_->slide_in_animator_->SetAnimationDelegate( |
| + view_ptr, |
| + std::unique_ptr<gfx::AnimationDelegate>( |
| + new gfx::TestAnimationDelegate())); |
| + |
| + base::RunLoop().Run(); |
|
sky
2016/12/12 20:30:56
Do these tests set the animation time to 0? If the
anthonyvd
2016/12/12 22:20:48
It looks like this makes the base::RunLoop().Run()
sky
2016/12/12 23:57:00
That would seem to indicate your delegate isn't be
|
| + EXPECT_FALSE(view_stack_->slide_in_animator_->IsAnimating()); |
| + view_stack_->Pop(); |
| + |
| + EXPECT_TRUE(view_stack_->slide_out_animator_->IsAnimating()); |
| + view_stack_->slide_out_animator_->SetAnimationDelegate( |
| + view_ptr, |
| + std::unique_ptr<gfx::AnimationDelegate>( |
| + new gfx::TestAnimationDelegate())); |
| + |
| + base::RunLoop().Run(); |
| + EXPECT_FALSE(view_stack_->slide_out_animator_->IsAnimating()); |
| + |
| + ASSERT_TRUE(observer.view_deleted()); |
| +} |
| + |
| +TEST_F(ViewStackTest, TestDeletingViewCleansUpState) { |
| + view_stack_->SetBounds(0, 0, 10, 10); |
| + |
| + TestStackView::Observer observer; |
| + std::unique_ptr<TestStackView> view = base::MakeUnique<TestStackView>(); |
| + view->AddObserver(&observer); |
| + views::View* view_ptr = view.get(); |
| + |
| + view_stack_->Push(std::move(view), true); |
| + EXPECT_TRUE(view_stack_->slide_in_animator_->IsAnimating()); |
| + view_stack_->slide_in_animator_->SetAnimationDelegate( |
| + view_ptr, |
| + std::unique_ptr<gfx::AnimationDelegate>( |
| + new gfx::TestAnimationDelegate())); |
| + |
| + base::RunLoop().Run(); |
| + EXPECT_FALSE(view_stack_->slide_in_animator_->IsAnimating()); |
| + view_stack_->Pop(); |
| + |
| + EXPECT_TRUE(view_stack_->slide_out_animator_->IsAnimating()); |
| + view_stack_.reset(); |
| + |
| + ASSERT_TRUE(observer.view_deleted()); |
| +} |