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.
5 #import <Cocoa/Cocoa.h>
7 #include "base/mac/scoped_nsobject.h"
8 #include "base/strings/sys_string_conversions.h"
9 #import "chrome/browser/ui/cocoa/applescript/bookmark_applescript_utils_unittest.h"
10 #import "chrome/browser/ui/cocoa/applescript/bookmark_folder_applescript.h"
11 #import "chrome/browser/ui/cocoa/applescript/bookmark_item_applescript.h"
12 #import "chrome/browser/ui/cocoa/applescript/constants_applescript.h"
13 #import "chrome/browser/ui/cocoa/applescript/error_applescript.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #import "testing/gtest_mac.h"
16 #include "testing/platform_test.h"
19 typedef BookmarkAppleScriptTest BookmarkFolderAppleScriptTest;
23 // Test all the bookmark folders within.
24 TEST_F(BookmarkFolderAppleScriptTest, BookmarkFolders) {
25 NSArray* bookmarkFolders = [bookmarkBar_.get() bookmarkFolders];
27 EXPECT_EQ(2U, [bookmarkFolders count]);
29 BookmarkFolderAppleScript* f1 = [bookmarkFolders objectAtIndex:0];
30 BookmarkFolderAppleScript* f2 = [bookmarkFolders objectAtIndex:1];
31 EXPECT_NSEQ(@"f1", [f1 title]);
32 EXPECT_NSEQ(@"f2", [f2 title]);
33 EXPECT_EQ(2, [[f1 index] intValue]);
34 EXPECT_EQ(4, [[f2 index] intValue]);
36 for (BookmarkFolderAppleScript* bookmarkFolder in bookmarkFolders) {
37 EXPECT_EQ([bookmarkFolder container], bookmarkBar_.get());
38 EXPECT_NSEQ(AppleScript::kBookmarkFoldersProperty,
39 [bookmarkFolder containerProperty]);
43 // Insert a new bookmark folder.
44 TEST_F(BookmarkFolderAppleScriptTest, InsertBookmarkFolder) {
45 // Emulate what applescript would do when inserting a new bookmark folder.
46 // Emulates a script like |set var to make new bookmark folder with
47 // properties {title:"foo"}|.
48 base::scoped_nsobject<BookmarkFolderAppleScript> bookmarkFolder(
49 [[BookmarkFolderAppleScript alloc] init]);
50 base::scoped_nsobject<NSNumber> var([[bookmarkFolder.get() uniqueID] copy]);
51 [bookmarkFolder.get() setTitle:@"foo"];
52 [bookmarkBar_.get() insertInBookmarkFolders:bookmarkFolder.get()];
54 // Represents the bookmark folder after it's added.
55 BookmarkFolderAppleScript* bf =
56 [[bookmarkBar_.get() bookmarkFolders] objectAtIndex:2];
57 EXPECT_NSEQ(@"foo", [bf title]);
58 EXPECT_EQ([bf container], bookmarkBar_.get());
59 EXPECT_NSEQ(AppleScript::kBookmarkFoldersProperty,
60 [bf containerProperty]);
61 EXPECT_NSEQ(var.get(), [bf uniqueID]);
64 // Insert a new bookmark folder at a particular position.
65 TEST_F(BookmarkFolderAppleScriptTest, InsertBookmarkFolderAtPosition) {
66 // Emulate what applescript would do when inserting a new bookmark folder.
67 // Emulates a script like |set var to make new bookmark folder with
68 // properties {title:"foo"} at after bookmark folder 1|.
69 base::scoped_nsobject<BookmarkFolderAppleScript> bookmarkFolder(
70 [[BookmarkFolderAppleScript alloc] init]);
71 base::scoped_nsobject<NSNumber> var([[bookmarkFolder.get() uniqueID] copy]);
72 [bookmarkFolder.get() setTitle:@"foo"];
73 [bookmarkBar_.get() insertInBookmarkFolders:bookmarkFolder.get() atIndex:1];
75 // Represents the bookmark folder after it's added.
76 BookmarkFolderAppleScript* bf =
77 [[bookmarkBar_.get() bookmarkFolders] objectAtIndex:1];
78 EXPECT_NSEQ(@"foo", [bf title]);
79 EXPECT_EQ([bf container], bookmarkBar_.get());
80 EXPECT_NSEQ(AppleScript::kBookmarkFoldersProperty, [bf containerProperty]);
81 EXPECT_NSEQ(var.get(), [bf uniqueID]);
84 // Delete bookmark folders.
85 TEST_F(BookmarkFolderAppleScriptTest, DeleteBookmarkFolders) {
86 unsigned int folderCount = 2, itemCount = 3;
87 for (unsigned int i = 0; i < folderCount; ++i) {
88 EXPECT_EQ(folderCount - i, [[bookmarkBar_.get() bookmarkFolders] count]);
89 EXPECT_EQ(itemCount, [[bookmarkBar_.get() bookmarkItems] count]);
90 [bookmarkBar_.get() removeFromBookmarkFoldersAtIndex:0];
94 // Test all the bookmark items within.
95 TEST_F(BookmarkFolderAppleScriptTest, BookmarkItems) {
96 NSArray* bookmarkItems = [bookmarkBar_.get() bookmarkItems];
98 EXPECT_EQ(3U, [bookmarkItems count]);
100 BookmarkItemAppleScript* i1 = [bookmarkItems objectAtIndex:0];
101 BookmarkItemAppleScript* i2 = [bookmarkItems objectAtIndex:1];
102 BookmarkItemAppleScript* i3 = [bookmarkItems objectAtIndex:2];
103 EXPECT_NSEQ(@"a", [i1 title]);
104 EXPECT_NSEQ(@"d", [i2 title]);
105 EXPECT_NSEQ(@"h", [i3 title]);
106 EXPECT_EQ(1, [[i1 index] intValue]);
107 EXPECT_EQ(3, [[i2 index] intValue]);
108 EXPECT_EQ(5, [[i3 index] intValue]);
110 for (BookmarkItemAppleScript* bookmarkItem in bookmarkItems) {
111 EXPECT_EQ([bookmarkItem container], bookmarkBar_.get());
112 EXPECT_NSEQ(AppleScript::kBookmarkItemsProperty,
113 [bookmarkItem containerProperty]);
117 // Insert a new bookmark item.
118 TEST_F(BookmarkFolderAppleScriptTest, InsertBookmarkItem) {
119 // Emulate what applescript would do when inserting a new bookmark folder.
120 // Emulates a script like |set var to make new bookmark item with
121 // properties {title:"Google", URL:"http://google.com"}|.
122 base::scoped_nsobject<BookmarkItemAppleScript> bookmarkItem(
123 [[BookmarkItemAppleScript alloc] init]);
124 base::scoped_nsobject<NSNumber> var([[bookmarkItem.get() uniqueID] copy]);
125 [bookmarkItem.get() setTitle:@"Google"];
126 [bookmarkItem.get() setURL:@"http://google.com"];
127 [bookmarkBar_.get() insertInBookmarkItems:bookmarkItem.get()];
129 // Represents the bookmark item after it's added.
130 BookmarkItemAppleScript* bi =
131 [[bookmarkBar_.get() bookmarkItems] objectAtIndex:3];
132 EXPECT_NSEQ(@"Google", [bi title]);
133 EXPECT_EQ(GURL("http://google.com/"),
134 GURL(base::SysNSStringToUTF8([bi URL])));
135 EXPECT_EQ([bi container], bookmarkBar_.get());
136 EXPECT_NSEQ(AppleScript::kBookmarkItemsProperty, [bi containerProperty]);
137 EXPECT_NSEQ(var.get(), [bi uniqueID]);
139 // Test to see no bookmark item is created when no/invlid URL is entered.
140 base::scoped_nsobject<FakeScriptCommand> fakeScriptCommand(
141 [[FakeScriptCommand alloc] init]);
142 bookmarkItem.reset([[BookmarkItemAppleScript alloc] init]);
143 [bookmarkBar_.get() insertInBookmarkItems:bookmarkItem.get()];
144 EXPECT_EQ((int)AppleScript::errInvalidURL,
145 [fakeScriptCommand.get() scriptErrorNumber]);
148 // Insert a new bookmark item at a particular position.
149 TEST_F(BookmarkFolderAppleScriptTest, InsertBookmarkItemAtPosition) {
150 // Emulate what applescript would do when inserting a new bookmark item.
151 // Emulates a script like |set var to make new bookmark item with
152 // properties {title:"XKCD", URL:"http://xkcd.org}
153 // at after bookmark item 1|.
154 base::scoped_nsobject<BookmarkItemAppleScript> bookmarkItem(
155 [[BookmarkItemAppleScript alloc] init]);
156 base::scoped_nsobject<NSNumber> var([[bookmarkItem.get() uniqueID] copy]);
157 [bookmarkItem.get() setTitle:@"XKCD"];
158 [bookmarkItem.get() setURL:@"http://xkcd.org"];
160 [bookmarkBar_.get() insertInBookmarkItems:bookmarkItem.get() atIndex:1];
162 // Represents the bookmark item after its added.
163 BookmarkItemAppleScript* bi =
164 [[bookmarkBar_.get() bookmarkItems] objectAtIndex:1];
165 EXPECT_NSEQ(@"XKCD", [bi title]);
166 EXPECT_EQ(GURL("http://xkcd.org/"),
167 GURL(base::SysNSStringToUTF8([bi URL])));
168 EXPECT_EQ([bi container], bookmarkBar_.get());
169 EXPECT_NSEQ(AppleScript::kBookmarkItemsProperty,
170 [bi containerProperty]);
171 EXPECT_NSEQ(var.get(), [bi uniqueID]);
173 // Test to see no bookmark item is created when no/invlid URL is entered.
174 base::scoped_nsobject<FakeScriptCommand> fakeScriptCommand(
175 [[FakeScriptCommand alloc] init]);
176 bookmarkItem.reset([[BookmarkItemAppleScript alloc] init]);
177 [bookmarkBar_.get() insertInBookmarkItems:bookmarkItem.get() atIndex:1];
178 EXPECT_EQ((int)AppleScript::errInvalidURL,
179 [fakeScriptCommand.get() scriptErrorNumber]);
182 // Delete bookmark items.
183 TEST_F(BookmarkFolderAppleScriptTest, DeleteBookmarkItems) {
184 unsigned int folderCount = 2, itemCount = 3;
185 for (unsigned int i = 0; i < itemCount; ++i) {
186 EXPECT_EQ(folderCount, [[bookmarkBar_.get() bookmarkFolders] count]);
187 EXPECT_EQ(itemCount - i, [[bookmarkBar_.get() bookmarkItems] count]);
188 [bookmarkBar_.get() removeFromBookmarkItemsAtIndex:0];
192 // Set and get title.
193 TEST_F(BookmarkFolderAppleScriptTest, GetAndSetTitle) {
194 NSArray* bookmarkFolders = [bookmarkBar_.get() bookmarkFolders];
195 BookmarkFolderAppleScript* folder1 = [bookmarkFolders objectAtIndex:0];
196 [folder1 setTitle:@"Foo"];
197 EXPECT_NSEQ(@"Foo", [folder1 title]);