| Index: chrome/browser/sync/glue/session_model_associator_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/sync/glue/session_model_associator_unittest.cc (revision 0)
|
| +++ chrome/browser/sync/glue/session_model_associator_unittest.cc (revision 0)
|
| @@ -0,0 +1,163 @@
|
| +// 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 <string>
|
| +#include <vector>
|
| +
|
| +#include "base/scoped_ptr.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/sessions/session_types.h"
|
| +#include "chrome/browser/sync/glue/session_model_associator.h"
|
| +#include "chrome/common/page_transition_types.h"
|
| +#include "chrome/common/url_constants.h"
|
| +#include "chrome/test/testing_profile.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +using browser_sync::SessionModelAssociator;
|
| +using browser_sync::ForeignSessionTracker;
|
| +namespace browser_sync {
|
| +
|
| +typedef testing::Test SessionModelAssociatorTest;
|
| +
|
| +TEST_F(SessionModelAssociatorTest, SessionWindowHasNoTabsToSync) {
|
| + SessionWindow win;
|
| + ASSERT_TRUE(SessionModelAssociator::SessionWindowHasNoTabsToSync(win));
|
| + scoped_ptr<SessionTab> tab(new SessionTab());
|
| + win.tabs.push_back(tab.release());
|
| + ASSERT_TRUE(SessionModelAssociator::SessionWindowHasNoTabsToSync(win));
|
| + TabNavigation nav(0, GURL("about:bubba"), GURL("about:referrer"),
|
| + string16(ASCIIToUTF16("title")),
|
| + std::string("state"), 0U);
|
| + win.tabs[0]->navigations.push_back(nav);
|
| + ASSERT_FALSE(SessionModelAssociator::SessionWindowHasNoTabsToSync(win));
|
| +}
|
| +
|
| +TEST_F(SessionModelAssociatorTest, IsValidSessionTab) {
|
| + SessionTab tab;
|
| + ASSERT_FALSE(SessionModelAssociator::IsValidSessionTab(tab));
|
| + TabNavigation nav(0, GURL(chrome::kChromeUINewTabURL),
|
| + GURL("about:referrer"),
|
| + string16(ASCIIToUTF16("title")),
|
| + std::string("state"), 0U);
|
| + tab.navigations.push_back(nav);
|
| + // NewTab does not count as valid if it's the only navigation.
|
| + ASSERT_FALSE(SessionModelAssociator::IsValidSessionTab(tab));
|
| + TabNavigation nav2(0, GURL("about:bubba"),
|
| + GURL("about:referrer"),
|
| + string16(ASCIIToUTF16("title")),
|
| + std::string("state"), 0U);
|
| + tab.navigations.push_back(nav2);
|
| + // Once there's another navigation, the tab is valid.
|
| + ASSERT_TRUE(SessionModelAssociator::IsValidSessionTab(tab));
|
| +}
|
| +
|
| +TEST_F(SessionModelAssociatorTest, PopulateSessionWindow) {
|
| + sync_pb::SessionWindow window_s;
|
| + window_s.add_tab(0);
|
| + window_s.set_browser_type(sync_pb::SessionWindow_BrowserType_TYPE_NORMAL);
|
| + window_s.set_selected_tab_index(1);
|
| +
|
| + std::string tag = "tag";
|
| + ForeignSessionTracker tracker;
|
| + ForeignSession* session = tracker.GetForeignSession(tag);
|
| + SessionWindow* win = new SessionWindow();
|
| + session->windows.push_back(win);
|
| + SessionModelAssociator::PopulateSessionWindowFromSpecifics(
|
| + tag, window_s, 0, win, &tracker);
|
| + ASSERT_EQ(1U, win->tabs.size());
|
| + ASSERT_EQ(1, win->selected_tab_index);
|
| + ASSERT_EQ(1, win->type);
|
| + ASSERT_EQ(1U, tracker.num_foreign_sessions());
|
| + ASSERT_EQ(1U, tracker.num_foreign_tabs(std::string("tag")));
|
| +
|
| + // We do this so that when the destructor for the tracker is called, it will
|
| + // be able to delete the session, window, and tab. We can't delete these
|
| + // ourselves, otherwise we would run into double free errors when the
|
| + // destructor was invoked (the true argument tells the tracker the tab
|
| + // is now associated with a window).
|
| + ASSERT_TRUE(tracker.GetSessionTab(tag, 0, true));
|
| +}
|
| +
|
| +TEST_F(SessionModelAssociatorTest, PopulateSessionTab) {
|
| + sync_pb::SessionTab tab_s;
|
| + tab_s.set_tab_visual_index(13);
|
| + tab_s.set_current_navigation_index(3);
|
| + tab_s.set_pinned(true);
|
| + tab_s.set_extension_app_id("app_id");
|
| + sync_pb::TabNavigation* navigation = tab_s.add_navigation();
|
| + navigation->set_index(12);
|
| + navigation->set_virtual_url("http://foo/1");
|
| + navigation->set_referrer("referrer");
|
| + navigation->set_title("title");
|
| + navigation->set_page_transition(sync_pb::TabNavigation_PageTransition_TYPED);
|
| +
|
| + SessionTab tab;
|
| + SessionModelAssociator::PopulateSessionTabFromSpecifics(tab_s, 0, &tab);
|
| + ASSERT_EQ(13, tab.tab_visual_index);
|
| + ASSERT_EQ(3, tab.current_navigation_index);
|
| + ASSERT_TRUE(tab.pinned);
|
| + ASSERT_EQ("app_id", tab.extension_app_id);
|
| + ASSERT_EQ(12, tab.navigations[0].index());
|
| + ASSERT_EQ(GURL("referrer"), tab.navigations[0].referrer());
|
| + ASSERT_EQ(string16(ASCIIToUTF16("title")), tab.navigations[0].title());
|
| + ASSERT_EQ(PageTransition::TYPED, tab.navigations[0].transition());
|
| + ASSERT_EQ(GURL("http://foo/1"), tab.navigations[0].virtual_url());
|
| +}
|
| +
|
| +TEST_F(SessionModelAssociatorTest, ForeignSessionTracker) {
|
| + const std::string tag1 = "tag";
|
| + const std::string tag2 = "tag2";
|
| + const std::string tag3 = "tag3";
|
| + ForeignSessionTracker tracker;
|
| + ASSERT_TRUE(tracker.empty());
|
| + ASSERT_EQ(0U, tracker.num_foreign_sessions());
|
| + ASSERT_EQ(0U, tracker.num_foreign_tabs(tag1));
|
| + SessionTab* tab = tracker.GetSessionTab(tag1, 0, false);
|
| + ASSERT_EQ(1U, tracker.num_foreign_tabs(tag1));
|
| + ASSERT_EQ(0U, tracker.num_foreign_sessions());
|
| + SessionTab* tab2 = tracker.GetSessionTab(tag1, 0, false);
|
| + ASSERT_EQ(1U, tracker.num_foreign_tabs(tag1));
|
| + ASSERT_EQ(0U, tracker.num_foreign_sessions());
|
| + ASSERT_EQ(tab, tab2);
|
| + tab2 = tracker.GetSessionTab(tag2, 0, false);
|
| + ASSERT_EQ(1U, tracker.num_foreign_tabs(tag1));
|
| + ASSERT_EQ(1U, tracker.num_foreign_tabs(tag2));
|
| + ASSERT_EQ(0U, tracker.num_foreign_sessions());
|
| +
|
| + ASSERT_FALSE(tracker.DeleteForeignSession(tag1));
|
| + ASSERT_FALSE(tracker.DeleteForeignSession(tag3));
|
| +
|
| + ForeignSession* session = tracker.GetForeignSession(tag1);
|
| + ForeignSession* session2 = tracker.GetForeignSession(tag2);
|
| + ForeignSession* session3 = tracker.GetForeignSession(tag3);
|
| + ASSERT_EQ(3U, tracker.num_foreign_sessions());
|
| +
|
| + ASSERT_TRUE(session);
|
| + ASSERT_TRUE(session2);
|
| + ASSERT_TRUE(session3);
|
| + ASSERT_NE(session, session2);
|
| + ASSERT_NE(session2, session3);
|
| + ASSERT_TRUE(tracker.DeleteForeignSession(tag3));
|
| + ASSERT_EQ(2U, tracker.num_foreign_sessions());
|
| +
|
| + const SessionTab *tab_ptr;
|
| + ASSERT_TRUE(tracker.LookupSessionTab(tag1, 0, &tab_ptr));
|
| + ASSERT_EQ(tab_ptr, tab);
|
| +
|
| + std::vector<SessionWindow*> windows;
|
| + ASSERT_TRUE(tracker.LookupSessionWindows(tag1, &windows));
|
| + ASSERT_EQ(0U, windows.size());
|
| +
|
| + // The sessions don't have valid windows, lookup should not succeed.
|
| + std::vector<const ForeignSession*> sessions;
|
| + ASSERT_FALSE(tracker.LookupAllForeignSessions(&sessions));
|
| +
|
| + tracker.clear();
|
| + ASSERT_EQ(0U, tracker.num_foreign_tabs(tag1));
|
| + ASSERT_EQ(0U, tracker.num_foreign_tabs(tag2));
|
| + ASSERT_EQ(0U, tracker.num_foreign_sessions());
|
| +}
|
| +
|
| +} // namespace browser_sync
|
| +
|
|
|
| Property changes on: chrome/browser/sync/glue/session_model_associator_unittest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|