bookmark_editor_base_controller_unittest.mm revision ddb351dbec246cf1fab5ec20d2d5520909041de1
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#import <Cocoa/Cocoa.h> 6 7#include "base/memory/scoped_nsobject.h" 8#include "base/sys_string_conversions.h" 9#include "base/utf_string_conversions.h" 10#include "chrome/browser/bookmarks/bookmark_model.h" 11#import "chrome/browser/ui/cocoa/bookmarks/bookmark_editor_controller.h" 12#include "chrome/browser/ui/cocoa/browser_test_helper.h" 13#import "chrome/browser/ui/cocoa/cocoa_test_helper.h" 14#include "grit/generated_resources.h" 15#include "testing/gtest/include/gtest/gtest.h" 16#import "testing/gtest_mac.h" 17#include "testing/platform_test.h" 18#include "ui/base/l10n/l10n_util_mac.h" 19 20class BookmarkEditorBaseControllerTest : public CocoaTest { 21 public: 22 BrowserTestHelper browser_helper_; 23 BookmarkEditorBaseController* controller_; // weak 24 const BookmarkNode* folder_a_; 25 const BookmarkNode* folder_b_; 26 const BookmarkNode* folder_b_0_; 27 const BookmarkNode* folder_b_3_; 28 const BookmarkNode* folder_c_; 29 30 BookmarkEditorBaseControllerTest() { 31 // Set up a small bookmark hierarchy, which will look as follows: 32 // a b c d 33 // a-0 b-0 c-0 34 // a-1 b-00 c-1 35 // a-2 b-1 c-2 36 // b-2 c-3 37 // b-3 38 // b-30 39 // b-31 40 // b-4 41 BookmarkModel& model(*(browser_helper_.profile()->GetBookmarkModel())); 42 const BookmarkNode* root = model.GetBookmarkBarNode(); 43 folder_a_ = model.AddFolder(root, 0, ASCIIToUTF16("a")); 44 model.AddURL(folder_a_, 0, ASCIIToUTF16("a-0"), GURL("http://a-0.com")); 45 model.AddURL(folder_a_, 1, ASCIIToUTF16("a-1"), GURL("http://a-1.com")); 46 model.AddURL(folder_a_, 2, ASCIIToUTF16("a-2"), GURL("http://a-2.com")); 47 48 folder_b_ = model.AddFolder(root, 1, ASCIIToUTF16("b")); 49 folder_b_0_ = model.AddFolder(folder_b_, 0, ASCIIToUTF16("b-0")); 50 model.AddURL(folder_b_0_, 0, ASCIIToUTF16("bb-0"), GURL("http://bb-0.com")); 51 model.AddURL(folder_b_, 1, ASCIIToUTF16("b-1"), GURL("http://b-1.com")); 52 model.AddURL(folder_b_, 2, ASCIIToUTF16("b-2"), GURL("http://b-2.com")); 53 folder_b_3_ = model.AddFolder(folder_b_, 3, ASCIIToUTF16("b-3")); 54 model.AddURL(folder_b_3_, 0, ASCIIToUTF16("b-30"), GURL("http://b-30.com")); 55 model.AddURL(folder_b_3_, 1, ASCIIToUTF16("b-31"), GURL("http://b-31.com")); 56 model.AddURL(folder_b_, 4, ASCIIToUTF16("b-4"), GURL("http://b-4.com")); 57 58 folder_c_ = model.AddFolder(root, 2, ASCIIToUTF16("c")); 59 model.AddURL(folder_c_, 0, ASCIIToUTF16("c-0"), GURL("http://c-0.com")); 60 model.AddURL(folder_c_, 1, ASCIIToUTF16("c-1"), GURL("http://c-1.com")); 61 model.AddURL(folder_c_, 2, ASCIIToUTF16("c-2"), GURL("http://c-2.com")); 62 model.AddURL(folder_c_, 3, ASCIIToUTF16("c-3"), GURL("http://c-3.com")); 63 64 model.AddURL(root, 3, ASCIIToUTF16("d"), GURL("http://d-0.com")); 65 } 66 67 virtual BookmarkEditorBaseController* CreateController() { 68 return [[BookmarkEditorBaseController alloc] 69 initWithParentWindow:test_window() 70 nibName:@"BookmarkAllTabs" 71 profile:browser_helper_.profile() 72 parent:folder_b_0_ 73 configuration:BookmarkEditor::SHOW_TREE]; 74 } 75 76 virtual void SetUp() { 77 CocoaTest::SetUp(); 78 controller_ = CreateController(); 79 EXPECT_TRUE([controller_ window]); 80 [controller_ runAsModalSheet]; 81 } 82 83 virtual void TearDown() { 84 controller_ = NULL; 85 CocoaTest::TearDown(); 86 } 87}; 88 89TEST_F(BookmarkEditorBaseControllerTest, VerifyBookmarkTestModel) { 90 BookmarkModel& model(*(browser_helper_.profile()->GetBookmarkModel())); 91 const BookmarkNode& root(*model.GetBookmarkBarNode()); 92 EXPECT_EQ(4, root.child_count()); 93 // a 94 const BookmarkNode* child = root.GetChild(0); 95 EXPECT_EQ(3, child->child_count()); 96 const BookmarkNode* subchild = child->GetChild(0); 97 EXPECT_EQ(0, subchild->child_count()); 98 subchild = child->GetChild(1); 99 EXPECT_EQ(0, subchild->child_count()); 100 subchild = child->GetChild(2); 101 EXPECT_EQ(0, subchild->child_count()); 102 // b 103 child = root.GetChild(1); 104 EXPECT_EQ(5, child->child_count()); 105 subchild = child->GetChild(0); 106 EXPECT_EQ(1, subchild->child_count()); 107 const BookmarkNode* subsubchild = subchild->GetChild(0); 108 EXPECT_EQ(0, subsubchild->child_count()); 109 subchild = child->GetChild(1); 110 EXPECT_EQ(0, subchild->child_count()); 111 subchild = child->GetChild(2); 112 EXPECT_EQ(0, subchild->child_count()); 113 subchild = child->GetChild(3); 114 EXPECT_EQ(2, subchild->child_count()); 115 subsubchild = subchild->GetChild(0); 116 EXPECT_EQ(0, subsubchild->child_count()); 117 subsubchild = subchild->GetChild(1); 118 EXPECT_EQ(0, subsubchild->child_count()); 119 subchild = child->GetChild(4); 120 EXPECT_EQ(0, subchild->child_count()); 121 // c 122 child = root.GetChild(2); 123 EXPECT_EQ(4, child->child_count()); 124 subchild = child->GetChild(0); 125 EXPECT_EQ(0, subchild->child_count()); 126 subchild = child->GetChild(1); 127 EXPECT_EQ(0, subchild->child_count()); 128 subchild = child->GetChild(2); 129 EXPECT_EQ(0, subchild->child_count()); 130 subchild = child->GetChild(3); 131 EXPECT_EQ(0, subchild->child_count()); 132 // d 133 child = root.GetChild(3); 134 EXPECT_EQ(0, child->child_count()); 135 [controller_ cancel:nil]; 136} 137 138TEST_F(BookmarkEditorBaseControllerTest, NodeSelection) { 139 EXPECT_TRUE([controller_ folderTreeArray]); 140 [controller_ selectTestNodeInBrowser:folder_b_3_]; 141 const BookmarkNode* node = [controller_ selectedNode]; 142 EXPECT_EQ(node, folder_b_3_); 143 [controller_ cancel:nil]; 144} 145 146TEST_F(BookmarkEditorBaseControllerTest, CreateFolder) { 147 EXPECT_EQ(2, folder_b_3_->child_count()); 148 [controller_ selectTestNodeInBrowser:folder_b_3_]; 149 NSString* expectedName = 150 l10n_util::GetNSStringWithFixup(IDS_BOOMARK_EDITOR_NEW_FOLDER_NAME); 151 [controller_ setDisplayName:expectedName]; 152 [controller_ newFolder:nil]; 153 NSArray* selectionPaths = [controller_ tableSelectionPaths]; 154 EXPECT_EQ(1U, [selectionPaths count]); 155 NSIndexPath* selectionPath = [selectionPaths objectAtIndex:0]; 156 EXPECT_EQ(4U, [selectionPath length]); 157 BookmarkFolderInfo* newFolderInfo = [controller_ selectedFolder]; 158 EXPECT_TRUE(newFolderInfo); 159 NSString* newFolderName = [newFolderInfo folderName]; 160 EXPECT_NSEQ(expectedName, newFolderName); 161 [controller_ createNewFolders]; 162 // Verify that the tab folder was added to the new folder. 163 EXPECT_EQ(3, folder_b_3_->child_count()); 164 [controller_ cancel:nil]; 165} 166 167TEST_F(BookmarkEditorBaseControllerTest, CreateTwoFolders) { 168 BookmarkModel* model = browser_helper_.profile()->GetBookmarkModel(); 169 const BookmarkNode* bar = model->GetBookmarkBarNode(); 170 // Create 2 folders which are children of the bar. 171 [controller_ selectTestNodeInBrowser:bar]; 172 [controller_ newFolder:nil]; 173 [controller_ selectTestNodeInBrowser:bar]; 174 [controller_ newFolder:nil]; 175 // If we do NOT crash on createNewFolders, success! 176 // (e.g. http://crbug.com/47877 is fixed). 177 [controller_ createNewFolders]; 178 [controller_ cancel:nil]; 179} 180 181TEST_F(BookmarkEditorBaseControllerTest, SelectedFolderDeleted) { 182 BookmarkModel& model(*(browser_helper_.profile()->GetBookmarkModel())); 183 [controller_ selectTestNodeInBrowser:folder_b_3_]; 184 EXPECT_EQ(folder_b_3_, [controller_ selectedNode]); 185 186 // Delete the selected node, and verify it's no longer selected: 187 model.Remove(folder_b_, 3); 188 EXPECT_NE(folder_b_3_, [controller_ selectedNode]); 189 190 [controller_ cancel:nil]; 191} 192 193TEST_F(BookmarkEditorBaseControllerTest, SelectedFoldersParentDeleted) { 194 BookmarkModel& model(*(browser_helper_.profile()->GetBookmarkModel())); 195 const BookmarkNode* root = model.GetBookmarkBarNode(); 196 [controller_ selectTestNodeInBrowser:folder_b_3_]; 197 EXPECT_EQ(folder_b_3_, [controller_ selectedNode]); 198 199 // Delete the selected node's parent, and verify it's no longer selected: 200 model.Remove(root, 1); 201 EXPECT_NE(folder_b_3_, [controller_ selectedNode]); 202 203 [controller_ cancel:nil]; 204} 205 206TEST_F(BookmarkEditorBaseControllerTest, FolderAdded) { 207 BookmarkModel& model(*(browser_helper_.profile()->GetBookmarkModel())); 208 const BookmarkNode* root = model.GetBookmarkBarNode(); 209 210 // Add a folder node to the model, and verify it can be selected in the tree: 211 const BookmarkNode* folder_added = model.AddFolder( 212 root, 0, ASCIIToUTF16("added")); 213 [controller_ selectTestNodeInBrowser:folder_added]; 214 EXPECT_EQ(folder_added, [controller_ selectedNode]); 215 216 [controller_ cancel:nil]; 217} 218 219 220class BookmarkFolderInfoTest : public CocoaTest { }; 221 222TEST_F(BookmarkFolderInfoTest, Construction) { 223 NSMutableArray* children = [NSMutableArray arrayWithObject:@"child"]; 224 // We just need a pointer, and any pointer will do. 225 const BookmarkNode* fakeNode = 226 reinterpret_cast<const BookmarkNode*>(&children); 227 BookmarkFolderInfo* info = 228 [BookmarkFolderInfo bookmarkFolderInfoWithFolderName:@"name" 229 folderNode:fakeNode 230 children:children]; 231 EXPECT_TRUE(info); 232 EXPECT_EQ([info folderName], @"name"); 233 EXPECT_EQ([info children], children); 234 EXPECT_EQ([info folderNode], fakeNode); 235} 236