blob: 997068712748481f02cdc42ce470387081a38624 [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/bookmarks/bookmark_editor.h"
#include "base/strings/utf_string_conversions.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/bookmarks/test/test_bookmark_client.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::ASCIIToUTF16;
using bookmarks::BookmarkModel;
using bookmarks::BookmarkNode;
namespace {
const BookmarkNode* InitBookmarkBar(BookmarkModel* model) {
const BookmarkNode* bookmarkbar = model->bookmark_bar_node();
model->AddURL(bookmarkbar, 0, u"url0", GURL("chrome://newtab"));
model->AddURL(bookmarkbar, 1, u"url1", GURL("chrome://newtab"));
return bookmarkbar;
}
TEST(BookmarkEditorTest, ApplyEditsWithNoFolderChange) {
std::unique_ptr<BookmarkModel> model(
bookmarks::TestBookmarkClient::CreateModel());
const BookmarkNode* bookmarkbar = InitBookmarkBar(model.get());
{
BookmarkEditor::EditDetails detail(
BookmarkEditor::EditDetails::AddFolder(bookmarkbar, 1));
BookmarkEditor::ApplyEditsWithNoFolderChange(
model.get(), bookmarkbar, detail, u"folder0", GURL(std::string()));
EXPECT_EQ(u"folder0", bookmarkbar->children()[1]->GetTitle());
}
{
BookmarkEditor::EditDetails detail(BookmarkEditor::EditDetails::AddFolder(
bookmarkbar, static_cast<size_t>(-1)));
BookmarkEditor::ApplyEditsWithNoFolderChange(
model.get(), bookmarkbar, detail, u"folder1", GURL(std::string()));
EXPECT_EQ(u"folder1", bookmarkbar->children()[3]->GetTitle());
}
{
BookmarkEditor::EditDetails detail(
BookmarkEditor::EditDetails::AddFolder(bookmarkbar, 10));
BookmarkEditor::ApplyEditsWithNoFolderChange(
model.get(), bookmarkbar, detail, u"folder2", GURL(std::string()));
EXPECT_EQ(u"folder2", bookmarkbar->children()[4]->GetTitle());
}
}
TEST(BookmarkEditorTest, ApplyEditsWithMultipleURLs) {
std::unique_ptr<BookmarkModel> model(
bookmarks::TestBookmarkClient::CreateModel());
const BookmarkNode* bookmarkbar = InitBookmarkBar(model.get());
BookmarkEditor::EditDetails detail(
BookmarkEditor::EditDetails::AddFolder(bookmarkbar, 2));
const std::u16string url_title_0 = u"url_0";
const std::u16string url_title_1 = u"url_1";
BookmarkEditor::EditDetails::BookmarkData url_data_0;
url_data_0.url = std::make_optional(GURL("chrome://newtab"));
url_data_0.title = url_title_0;
BookmarkEditor::EditDetails::BookmarkData url_data_1;
url_data_1.url = std::make_optional(GURL("chrome://newtab"));
url_data_1.title = url_title_1;
detail.bookmark_data.children.push_back(url_data_0);
detail.bookmark_data.children.push_back(url_data_1);
BookmarkEditor::ApplyEditsWithNoFolderChange(model.get(), bookmarkbar, detail,
u"folder", GURL(std::string()));
EXPECT_EQ(u"folder", bookmarkbar->children()[2]->GetTitle());
EXPECT_EQ(url_title_0, bookmarkbar->children()[2]->children()[0]->GetTitle());
EXPECT_EQ(url_title_1, bookmarkbar->children()[2]->children()[1]->GetTitle());
}
TEST(BookmarkEditorTest, ApplyEditsWithNestedFolder) {
std::unique_ptr<BookmarkModel> model(
bookmarks::TestBookmarkClient::CreateModel());
const BookmarkNode* bookmarkbar = InitBookmarkBar(model.get());
BookmarkEditor::EditDetails detail(
BookmarkEditor::EditDetails::AddFolder(bookmarkbar, 2));
const std::u16string nested_folder_title = u"nested_folder";
const std::u16string nested_url_title = u"nested_url";
BookmarkEditor::EditDetails::BookmarkData url_data;
url_data.url = std::make_optional(GURL("chrome://newtab"));
url_data.title = nested_url_title;
BookmarkEditor::EditDetails::BookmarkData folder_data;
folder_data.title = nested_folder_title;
folder_data.children.push_back(url_data);
detail.bookmark_data.children.push_back(folder_data);
BookmarkEditor::ApplyEditsWithNoFolderChange(model.get(), bookmarkbar, detail,
u"folder", GURL(std::string()));
EXPECT_EQ(u"folder", bookmarkbar->children()[2]->GetTitle());
EXPECT_EQ(nested_folder_title,
bookmarkbar->children()[2]->children()[0]->GetTitle());
EXPECT_EQ(
nested_url_title,
bookmarkbar->children()[2]->children()[0]->children()[0]->GetTitle());
}
TEST(BookmarkEditorTest, ApplyEditsWithURLsAndNestedFolders) {
std::unique_ptr<BookmarkModel> model(
bookmarks::TestBookmarkClient::CreateModel());
const BookmarkNode* bookmarkbar = InitBookmarkBar(model.get());
BookmarkEditor::EditDetails detail(
BookmarkEditor::EditDetails::AddFolder(bookmarkbar, 10));
const std::u16string nested_folder_title_0 = u"nested_folder_0";
const std::u16string nested_folder_title_1 = u"nested_folder_1";
const std::u16string nested_folder_title_2 = u"nested_folder_2";
const std::u16string url_title_0 = u"url_0";
const std::u16string url_title_1 = u"url_1";
const std::u16string nested_url_title = u"nested_url";
BookmarkEditor::EditDetails::BookmarkData url_data_0;
url_data_0.url = std::make_optional(GURL("chrome://newtab"));
url_data_0.title = url_title_0;
BookmarkEditor::EditDetails::BookmarkData url_data_1;
url_data_1.url = std::make_optional(GURL("chrome://newtab"));
url_data_1.title = url_title_1;
BookmarkEditor::EditDetails::BookmarkData nested_url_data;
nested_url_data.url = std::make_optional(GURL("chrome://newtab"));
nested_url_data.title = nested_url_title;
BookmarkEditor::EditDetails::BookmarkData folder_data_0;
folder_data_0.title = nested_folder_title_0;
folder_data_0.children.push_back(nested_url_data);
BookmarkEditor::EditDetails::BookmarkData folder_data_1;
folder_data_1.title = nested_folder_title_1;
folder_data_1.children.push_back(nested_url_data);
BookmarkEditor::EditDetails::BookmarkData folder_data_2;
folder_data_2.title = nested_folder_title_2;
folder_data_2.children.push_back(nested_url_data);
detail.bookmark_data.children.push_back(folder_data_0);
detail.bookmark_data.children.push_back(url_data_0);
detail.bookmark_data.children.push_back(folder_data_1);
detail.bookmark_data.children.push_back(folder_data_2);
detail.bookmark_data.children.push_back(url_data_1);
BookmarkEditor::ApplyEditsWithNoFolderChange(model.get(), bookmarkbar, detail,
u"folder", GURL(std::string()));
EXPECT_EQ(u"folder", bookmarkbar->children()[2]->GetTitle());
EXPECT_EQ(nested_folder_title_0,
bookmarkbar->children()[2]->children()[0]->GetTitle());
EXPECT_EQ(url_title_0, bookmarkbar->children()[2]->children()[1]->GetTitle());
EXPECT_EQ(nested_folder_title_1,
bookmarkbar->children()[2]->children()[2]->GetTitle());
EXPECT_EQ(nested_folder_title_2,
bookmarkbar->children()[2]->children()[3]->GetTitle());
EXPECT_EQ(url_title_1, bookmarkbar->children()[2]->children()[4]->GetTitle());
}
} // namespace