1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/bookmarks/bookmark_model.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_bookmark_helpers.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_bookmarks_module_constants.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace keys = extension_bookmarks_module_constants;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionBookmarksTest : public testing::Test {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    model_.reset(new BookmarkModel(NULL));
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    model_->AddURL(model_->other_node(), 0, ASCIIToUTF16("Digg"),
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     GURL("http://www.reddit.com"));
203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    model_->AddURL(model_->other_node(), 0, ASCIIToUTF16("News"),
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                     GURL("http://www.foxnews.com"));
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    folder = model_->AddFolder(
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        model_->other_node(), 0, ASCIIToUTF16("outer folder"));
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    model_->AddFolder(folder, 0, ASCIIToUTF16("inner folder 1"));
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    model_->AddFolder(folder, 0, ASCIIToUTF16("inner folder 2"));
263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    model_->AddURL(folder, 0, ASCIIToUTF16("Digg"), GURL("http://reddit.com"));
273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    model_->AddURL(folder, 0, ASCIIToUTF16("CNet"), GURL("http://cnet.com"));
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<BookmarkModel> model_;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const BookmarkNode* folder;
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionBookmarksTest, GetFullTreeFromRoot) {
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DictionaryValue* tree = extension_bookmark_helpers::GetNodeDictionary(
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      model_->other_node(),
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true,    // Recurse.
373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      false);  // Not only folders.
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ListValue* children;
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tree->GetList(keys::kChildrenKey, &children);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(3U, children->GetSize());
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionBookmarksTest, GetFoldersOnlyFromRoot) {
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DictionaryValue* tree = extension_bookmark_helpers::GetNodeDictionary(
453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      model_->other_node(),
463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true,   // Recurse.
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true);  // Only folders.
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ListValue* children;
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tree->GetList(keys::kChildrenKey, &children);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1U, children->GetSize());
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionBookmarksTest, GetSubtree) {
543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DictionaryValue* tree = extension_bookmark_helpers::GetNodeDictionary(
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      folder,
563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true,    // Recurse.
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      false);  // Not only folders.
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ListValue* children;
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tree->GetList(keys::kChildrenKey, &children);
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(4U, children->GetSize());
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DictionaryValue* digg;
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(children->GetDictionary(1, &digg));
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string title;
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  digg->GetString(keys::kTitleKey, &title);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("Digg", title);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionBookmarksTest, GetSubtreeFoldersOnly) {
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DictionaryValue* tree = extension_bookmark_helpers::GetNodeDictionary(
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      folder,
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true,   // Recurse.
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      true);  // Only folders.
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ListValue* children;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tree->GetList(keys::kChildrenKey, &children);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2U, children->GetSize());
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DictionaryValue* inner_folder;
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(children->GetDictionary(1, &inner_folder));
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string title;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inner_folder->GetString(keys::kTitleKey, &title);
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ("inner folder 1", title);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
82