1 // Copyright (c) 2012 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.
4
5 #include <list>
6 #include <string>
7
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/test/chromedriver/chrome/status.h"
10 #include "chrome/test/chromedriver/chrome/stub_chrome.h"
11 #include "chrome/test/chromedriver/chrome/stub_web_view.h"
12 #include "chrome/test/chromedriver/session.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace {
16
17 class MockChrome : public StubChrome {
18 public:
MockChrome()19 MockChrome() : web_view_("1") {}
~MockChrome()20 virtual ~MockChrome() {}
21
GetWebViewById(const std::string & id,WebView ** web_view)22 virtual Status GetWebViewById(const std::string& id,
23 WebView** web_view) OVERRIDE {
24 if (id == web_view_.GetId()) {
25 *web_view = &web_view_;
26 return Status(kOk);
27 }
28 return Status(kUnknownError);
29 }
30
31 private:
32 StubWebView web_view_;
33 };
34
35 } // namespace
36
TEST(Session,GetTargetWindowNoChrome)37 TEST(Session, GetTargetWindowNoChrome) {
38 Session session("1");
39 WebView* web_view;
40 ASSERT_EQ(kNoSuchWindow, session.GetTargetWindow(&web_view).code());
41 }
42
TEST(Session,GetTargetWindowTargetWindowClosed)43 TEST(Session, GetTargetWindowTargetWindowClosed) {
44 scoped_ptr<Chrome> chrome(new MockChrome());
45 Session session("1", chrome.Pass());
46 session.window = "2";
47 WebView* web_view;
48 ASSERT_EQ(kNoSuchWindow, session.GetTargetWindow(&web_view).code());
49 }
50
TEST(Session,GetTargetWindowTargetWindowStillOpen)51 TEST(Session, GetTargetWindowTargetWindowStillOpen) {
52 scoped_ptr<Chrome> chrome(new MockChrome());
53 Session session("1", chrome.Pass());
54 session.window = "1";
55 WebView* web_view = NULL;
56 ASSERT_EQ(kOk, session.GetTargetWindow(&web_view).code());
57 ASSERT_TRUE(web_view);
58 }
59
TEST(Session,SwitchToParentFrame)60 TEST(Session, SwitchToParentFrame) {
61 scoped_ptr<Chrome> chrome(new MockChrome());
62 Session session("1", chrome.Pass());
63
64 // Initial frame should be top frame.
65 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
66
67 // Switching to parent frame should be a no-op.
68 session.SwitchToParentFrame();
69 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
70
71 session.SwitchToSubFrame("1.1", std::string());
72 ASSERT_EQ("1.1", session.GetCurrentFrameId());
73 session.SwitchToParentFrame();
74 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
75
76 session.SwitchToSubFrame("2.1", std::string());
77 ASSERT_EQ("2.1", session.GetCurrentFrameId());
78 session.SwitchToSubFrame("2.2", std::string());
79 ASSERT_EQ("2.2", session.GetCurrentFrameId());
80 session.SwitchToParentFrame();
81 ASSERT_EQ("2.1", session.GetCurrentFrameId());
82 session.SwitchToParentFrame();
83 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
84 }
85
TEST(Session,SwitchToTopFrame)86 TEST(Session, SwitchToTopFrame) {
87 scoped_ptr<Chrome> chrome(new MockChrome());
88 Session session("1", chrome.Pass());
89
90 // Initial frame should be top frame.
91 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
92
93 // Switching to top frame should be a no-op.
94 session.SwitchToTopFrame();
95 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
96
97 session.SwitchToSubFrame("3.1", std::string());
98 ASSERT_EQ("3.1", session.GetCurrentFrameId());
99 session.SwitchToSubFrame("3.2", std::string());
100 ASSERT_EQ("3.2", session.GetCurrentFrameId());
101 session.SwitchToTopFrame();
102 ASSERT_EQ(std::string(), session.GetCurrentFrameId());
103 }
104