Home | History | Annotate | Download | only in models
      1 // Copyright (c) 2011 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 "ui/base/models/tree_node_iterator.h"
      6 
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 #include "ui/base/models/tree_node_model.h"
      9 
     10 namespace ui {
     11 
     12 namespace {
     13 
     14 typedef TreeNodeWithValue<int> TestNode;
     15 
     16 bool PruneOdd(TestNode* node) {
     17   return node->value % 2;
     18 }
     19 
     20 bool PruneEven(TestNode* node) {
     21   return !PruneOdd(node);
     22 }
     23 
     24 TEST(TreeNodeIteratorTest, Basic) {
     25   TestNode root;
     26   root.Add(new TestNode(), 0);
     27   root.Add(new TestNode(), 1);
     28   TestNode* f3 = new TestNode();
     29   root.Add(f3, 2);
     30   TestNode* f4 = new TestNode();
     31   f3->Add(f4, 0);
     32   f4->Add(new TestNode(), 0);
     33 
     34   TreeNodeIterator<TestNode> iterator(&root);
     35   ASSERT_TRUE(iterator.has_next());
     36   ASSERT_EQ(root.GetChild(0), iterator.Next());
     37 
     38   ASSERT_TRUE(iterator.has_next());
     39   ASSERT_EQ(root.GetChild(1), iterator.Next());
     40 
     41   ASSERT_TRUE(iterator.has_next());
     42   ASSERT_EQ(root.GetChild(2), iterator.Next());
     43 
     44   ASSERT_TRUE(iterator.has_next());
     45   ASSERT_EQ(f4, iterator.Next());
     46 
     47   ASSERT_TRUE(iterator.has_next());
     48   ASSERT_EQ(f4->GetChild(0), iterator.Next());
     49 
     50   ASSERT_FALSE(iterator.has_next());
     51 }
     52 
     53 // The tree used for testing:
     54 // * + 1
     55 //   + 2
     56 //   + 3 + 4 + 5
     57 //       + 7
     58 TEST(TreeNodeIteratorTest, Prune) {
     59   TestNode root;
     60   root.Add(new TestNode(1), 0);
     61   root.Add(new TestNode(2), 1);
     62   TestNode* f3 = new TestNode(3);
     63   root.Add(f3, 2);
     64   TestNode* f4 = new TestNode(4);
     65   f3->Add(f4, 0);
     66   f4->Add(new TestNode(5), 0);
     67   f3->Add(new TestNode(7), 1);
     68 
     69   TreeNodeIterator<TestNode> odd_iterator(&root, PruneOdd);
     70   ASSERT_TRUE(odd_iterator.has_next());
     71   ASSERT_EQ(2, odd_iterator.Next()->value);
     72   ASSERT_FALSE(odd_iterator.has_next());
     73 
     74   TreeNodeIterator<TestNode> even_iterator(&root, PruneEven);
     75   ASSERT_TRUE(even_iterator.has_next());
     76   ASSERT_EQ(1, even_iterator.Next()->value);
     77   ASSERT_TRUE(even_iterator.has_next());
     78   ASSERT_EQ(3, even_iterator.Next()->value);
     79   ASSERT_TRUE(even_iterator.has_next());
     80   ASSERT_EQ(7, even_iterator.Next()->value);
     81   ASSERT_FALSE(even_iterator.has_next());
     82 }
     83 
     84 }  // namespace
     85 
     86 }  // namespace ui
     87