// 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 "testing/gtest/include/gtest/gtest.h" #include "ui/base/models/tree_node_iterator.h" #include "ui/base/models/tree_node_model.h" namespace ui { TEST(TreeNodeIteratorTest, Test) { TreeNodeWithValue root; root.Add(new TreeNodeWithValue(1), 0); root.Add(new TreeNodeWithValue(2), 1); TreeNodeWithValue* f3 = new TreeNodeWithValue(3); root.Add(f3, 2); TreeNodeWithValue* f4 = new TreeNodeWithValue(4); f3->Add(f4, 0); f4->Add(new TreeNodeWithValue(5), 0); TreeNodeIterator > iterator(&root); ASSERT_TRUE(iterator.has_next()); ASSERT_EQ(root.GetChild(0), iterator.Next()); ASSERT_TRUE(iterator.has_next()); ASSERT_EQ(root.GetChild(1), iterator.Next()); ASSERT_TRUE(iterator.has_next()); ASSERT_EQ(root.GetChild(2), iterator.Next()); ASSERT_TRUE(iterator.has_next()); ASSERT_EQ(f4, iterator.Next()); ASSERT_TRUE(iterator.has_next()); ASSERT_EQ(f4->GetChild(0), iterator.Next()); ASSERT_FALSE(iterator.has_next()); } static bool PruneOdd(TreeNodeWithValue* node) { return node->value % 2; } static bool PruneEven(TreeNodeWithValue* node) { return !(node->value % 2); } // The tree used for testing: // * + 1 // + 2 // + 3 + 4 + 5 // + 7 TEST(TreeNodeIteratorPruneTest, Test) { TreeNodeWithValue root; root.Add(new TreeNodeWithValue(1), 0); root.Add(new TreeNodeWithValue(2), 1); TreeNodeWithValue* f3 = new TreeNodeWithValue(3); root.Add(f3, 2); TreeNodeWithValue* f4 = new TreeNodeWithValue(4); f3->Add(f4, 0); f4->Add(new TreeNodeWithValue(5), 0); f3->Add(new TreeNodeWithValue(7), 1); TreeNodeIterator > oddIterator(&root, PruneOdd); ASSERT_TRUE(oddIterator.has_next()); ASSERT_EQ(2, oddIterator.Next()->value); ASSERT_FALSE(oddIterator.has_next()); TreeNodeIterator > evenIterator(&root, PruneEven); ASSERT_TRUE(evenIterator.has_next()); ASSERT_EQ(1, evenIterator.Next()->value); ASSERT_TRUE(evenIterator.has_next()); ASSERT_EQ(3, evenIterator.Next()->value); ASSERT_TRUE(evenIterator.has_next()); ASSERT_EQ(7, evenIterator.Next()->value); ASSERT_FALSE(evenIterator.has_next()); } } // namespace ui