| Index: ui/base/models/list_model_unittest.cc
|
| diff --git a/ui/base/models/list_model_unittest.cc b/ui/base/models/list_model_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1718431ade75ab2d2a13ffd4f691fcab28c20e92
|
| --- /dev/null
|
| +++ b/ui/base/models/list_model_unittest.cc
|
| @@ -0,0 +1,149 @@
|
| +// Copyright (c) 2011 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 "ui/base/models/list_model.h"
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace ui {
|
| +
|
| +class FooItem {
|
| + public:
|
| + explicit FooItem(int id) : id_(id) {}
|
| +
|
| + int id() const { return id_; }
|
| +
|
| + private:
|
| + int id_;
|
| + DISALLOW_COPY_AND_ASSIGN(FooItem);
|
| +};
|
| +
|
| +class ListModelTest : public testing::Test,
|
| + public ListModelObserver {
|
| + public:
|
| + ListModelTest()
|
| + : added_count_(0),
|
| + removed_count_(0),
|
| + changed_count_(0) {
|
| + }
|
| +
|
| + void ExpectCountsEqual(int added_count,
|
| + int removed_count,
|
| + int changed_count) {
|
| + EXPECT_EQ(added_count, added_count_);
|
| + EXPECT_EQ(removed_count, removed_count_);
|
| + EXPECT_EQ(changed_count, changed_count_);
|
| + }
|
| +
|
| + void ClearCounts() {
|
| + added_count_ = removed_count_ = changed_count_ = 0;
|
| + }
|
| +
|
| + // ListModelObserver implementation:
|
| + virtual void ListItemsAdded(int start, int count) OVERRIDE {
|
| + added_count_ += count;
|
| + }
|
| + virtual void ListItemsRemoved(int start, int count) OVERRIDE {
|
| + removed_count_ += count;
|
| + }
|
| + virtual void ListItemsChanged(int start, int count) OVERRIDE {
|
| + changed_count_ += count;
|
| + }
|
| +
|
| + private:
|
| + int added_count_;
|
| + int removed_count_;
|
| + int changed_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ListModelTest);
|
| +};
|
| +
|
| +TEST_F(ListModelTest, Add) {
|
| + ListModel<FooItem> model;
|
| + model.AddObserver(this);
|
| +
|
| + // Append FooItem(0)
|
| + model.Add(new FooItem(0));
|
| + ExpectCountsEqual(1, 0, 0);
|
| +
|
| + // Append FooItem(1)
|
| + model.Add(new FooItem(1));
|
| + ExpectCountsEqual(2, 0, 0);
|
| +
|
| + // Insert FooItem(2) at position 0
|
| + model.AddAt(0, new FooItem(2));
|
| + ExpectCountsEqual(3, 0, 0);
|
| +
|
| + // Total 3 items in mode.
|
| + EXPECT_EQ(3, model.item_count());
|
| +
|
| + // First one should be FooItem(2), followed by FooItem(0) and FooItem(1)
|
| + EXPECT_EQ(2, model.item_at(0)->id());
|
| + EXPECT_EQ(0, model.item_at(1)->id());
|
| + EXPECT_EQ(1, model.item_at(2)->id());
|
| +}
|
| +
|
| +TEST_F(ListModelTest, Remove) {
|
| + ListModel<FooItem> model;
|
| + model.AddObserver(this);
|
| +
|
| + model.Add(new FooItem(0));
|
| + model.Add(new FooItem(1));
|
| + model.Add(new FooItem(2));
|
| +
|
| + ClearCounts();
|
| +
|
| + // Remove item at index 1 from model and release memory.
|
| + model.DeleteAt(1);
|
| + ExpectCountsEqual(0, 1, 0);
|
| +
|
| + EXPECT_EQ(2, model.item_count());
|
| + EXPECT_EQ(0, model.item_at(0)->id());
|
| + EXPECT_EQ(2, model.item_at(1)->id());
|
| +
|
| + // Remove all items from model and delete them.
|
| + model.DeleteAll();
|
| + ExpectCountsEqual(0, 3, 0);
|
| +}
|
| +
|
| +TEST_F(ListModelTest, RemoveAll) {
|
| + ListModel<FooItem> model;
|
| + model.AddObserver(this);
|
| +
|
| + scoped_ptr<FooItem> foo0(new FooItem(0));
|
| + scoped_ptr<FooItem> foo1(new FooItem(1));
|
| + scoped_ptr<FooItem> foo2(new FooItem(2));
|
| +
|
| + model.Add(foo0.get());
|
| + model.Add(foo1.get());
|
| + model.Add(foo2.get());
|
| +
|
| + ClearCounts();
|
| +
|
| + // Remove all items and scoped_ptr above would release memory.
|
| + model.RemoveAll();
|
| + ExpectCountsEqual(0, 3, 0);
|
| +}
|
| +
|
| +TEST_F(ListModelTest, FakeUpdate) {
|
| + ListModel<FooItem> model;
|
| + model.AddObserver(this);
|
| +
|
| + model.Add(new FooItem(0));
|
| + model.Add(new FooItem(1));
|
| + model.Add(new FooItem(2));
|
| +
|
| + ClearCounts();
|
| +
|
| + model.NotifyItemsChanged(0, 1);
|
| + ExpectCountsEqual(0, 0, 1);
|
| +
|
| + model.NotifyItemsChanged(1, 2);
|
| + ExpectCountsEqual(0, 0, 3);
|
| +}
|
| +
|
| +} // namespace ui
|
|
|