Index: ui/base/models/tree_node_iterator_unittest.cc |
diff --git a/ui/base/models/tree_node_iterator_unittest.cc b/ui/base/models/tree_node_iterator_unittest.cc |
index 13140e9aefc426e11fa1b9735896008206f46492..0aefe4d9cce5736f26f463ecdd2d36b28096c8b8 100644 |
--- a/ui/base/models/tree_node_iterator_unittest.cc |
+++ b/ui/base/models/tree_node_iterator_unittest.cc |
@@ -38,4 +38,44 @@ TEST(TreeNodeIteratorTest, Test) { |
ASSERT_FALSE(iterator.has_next()); |
} |
+static bool PruneOdd(TreeNodeWithValue<int>* node) { |
+ return node->value % 2; |
+} |
+ |
+static bool PruneEven(TreeNodeWithValue<int>* node) { |
+ return !(node->value % 2); |
+} |
+ |
+// The tree used for testing: |
+// * + 1 |
+// + 2 |
+// + 3 + 4 + 5 |
+// + 7 |
+ |
+TEST(TreeNodeIteratorPruneTest, Test) { |
+ TreeNodeWithValue<int> root; |
+ root.Add(new TreeNodeWithValue<int>(1), 0); |
+ root.Add(new TreeNodeWithValue<int>(2), 1); |
+ TreeNodeWithValue<int>* f3 = new TreeNodeWithValue<int>(3); |
+ root.Add(f3, 2); |
+ TreeNodeWithValue<int>* f4 = new TreeNodeWithValue<int>(4); |
+ f3->Add(f4, 0); |
+ f4->Add(new TreeNodeWithValue<int>(5), 0); |
+ f3->Add(new TreeNodeWithValue<int>(7), 1); |
+ |
+ TreeNodeIterator<TreeNodeWithValue<int> > oddIterator(&root, PruneOdd); |
+ ASSERT_TRUE(oddIterator.has_next()); |
+ ASSERT_EQ(2, oddIterator.Next()->value); |
+ ASSERT_FALSE(oddIterator.has_next()); |
+ |
+ TreeNodeIterator<TreeNodeWithValue<int> > 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 |