• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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