summaryrefslogtreecommitdiffstats
path: root/chrome/test/model_test_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test/model_test_utils.cc')
-rw-r--r--chrome/test/model_test_utils.cc82
1 files changed, 82 insertions, 0 deletions
diff --git a/chrome/test/model_test_utils.cc b/chrome/test/model_test_utils.cc
new file mode 100644
index 0000000..218cfd8
--- /dev/null
+++ b/chrome/test/model_test_utils.cc
@@ -0,0 +1,82 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "model_test_utils.h"
+
+#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "googleurl/src/gurl.h"
+
+namespace model_test_utils {
+
+std::wstring ModelStringFromNode(const BookmarkNode* node) {
+ // Since the children of the node are not available as a vector,
+ // we'll just have to do it the hard way.
+ int child_count = node->GetChildCount();
+ std::wstring child_string;
+ for (int i = 0; i < child_count; ++i) {
+ const BookmarkNode* child = node->GetChild(i);
+ if (child->is_folder()) {
+ child_string += child->GetTitle() + L":[ " + ModelStringFromNode(child)
+ + L"] ";
+ } else {
+ child_string += child->GetTitle() + L" ";
+ }
+ }
+ return child_string;
+}
+
+// Helper function which does the actual work of creating the nodes for
+// a particular level in the hierarchy.
+std::wstring::size_type AddNodesFromString(BookmarkModel& model,
+ const BookmarkNode* node,
+ const std::wstring& model_string,
+ std::wstring::size_type start_pos) {
+ DCHECK(node);
+ int index = node->GetChildCount();
+ static const std::wstring folder_tell(L":[");
+ std::wstring::size_type end_pos = model_string.find(' ', start_pos);
+ while (end_pos != std::wstring::npos) {
+ std::wstring::size_type part_length = end_pos - start_pos;
+ std::wstring node_name = model_string.substr(start_pos, part_length);
+ // Are we at the end of a folder group?
+ if (node_name != L"]") {
+ // No, is it a folder?
+ std::wstring tell;
+ if (part_length > 2)
+ tell = node_name.substr(part_length - 2, 2);
+ if (tell == folder_tell) {
+ node_name = node_name.substr(0, part_length - 2);
+ const BookmarkNode* new_node = model.AddGroup(node, index, node_name);
+ end_pos = AddNodesFromString(model, new_node, model_string,
+ end_pos + 1);
+ } else {
+ std::string url_string("http://");
+ url_string += std::string(node_name.begin(), node_name.end());
+ url_string += ".com";
+ model.AddURL(node, index, node_name, GURL(url_string));
+ ++end_pos;
+ }
+ ++index;
+ start_pos = end_pos;
+ end_pos = model_string.find(' ', start_pos);
+ } else {
+ ++end_pos;
+ break;
+ }
+ }
+ return end_pos;
+}
+
+void AddNodesFromModelString(BookmarkModel& model,
+ const BookmarkNode* node,
+ const std::wstring& model_string) {
+ DCHECK(node);
+ const std::wstring folder_tell(L":[");
+ std::wstring::size_type start_pos = 0;
+ std::wstring::size_type end_pos =
+ AddNodesFromString(model, node, model_string, start_pos);
+ DCHECK(end_pos == std::wstring::npos);
+}
+
+} // namespace model_test_utils