diff options
Diffstat (limited to 'chrome/test/chromedriver/chrome/chrome_impl_unittest.cc')
-rw-r--r-- | chrome/test/chromedriver/chrome/chrome_impl_unittest.cc | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/chrome/test/chromedriver/chrome/chrome_impl_unittest.cc b/chrome/test/chromedriver/chrome/chrome_impl_unittest.cc new file mode 100644 index 0000000..9e859ae --- /dev/null +++ b/chrome/test/chromedriver/chrome/chrome_impl_unittest.cc @@ -0,0 +1,160 @@ +// Copyright (c) 2012 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 <list> +#include <string> + +#include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" +#include "base/values.h" +#include "chrome/test/chromedriver/chrome/chrome_impl.h" +#include "chrome/test/chromedriver/chrome/devtools_client.h" +#include "chrome/test/chromedriver/chrome/status.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +typedef std::list<internal::WebViewInfo> WebViewInfoList; + +void ExpectEqual(const internal::WebViewInfo& info1, + const internal::WebViewInfo& info2) { + EXPECT_EQ(info1.id, info2.id); + EXPECT_EQ(info1.type, info2.type); + EXPECT_EQ(info1.url, info2.url); + EXPECT_EQ(info1.debugger_url, info2.debugger_url); +} + +} // namespace + +TEST(ParsePagesInfo, Normal) { + WebViewInfoList list; + Status status = internal::ParsePagesInfo( + "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]", + &list); + ASSERT_TRUE(status.IsOk()); + ASSERT_EQ(1u, list.size()); + ExpectEqual( + internal::WebViewInfo( + "1", "ws://debugurl1", "http://page1", internal::WebViewInfo::kPage), + list.front()); +} + +TEST(ParsePagesInfo, Multiple) { + WebViewInfoList list; + Status status = internal::ParsePagesInfo( + "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}," + " {\"type\": \"other\", \"id\": \"2\", \"url\": \"http://page2\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl2\"}]", + &list); + ASSERT_TRUE(status.IsOk()); + ASSERT_EQ(2u, list.size()); + ExpectEqual( + internal::WebViewInfo( + "1", "ws://debugurl1", "http://page1", internal::WebViewInfo::kPage), + list.front()); + ExpectEqual( + internal::WebViewInfo( + "2", "ws://debugurl2", "http://page2", internal::WebViewInfo::kOther), + list.back()); +} + +TEST(ParsePagesInfo, WithoutDebuggerUrl) { + WebViewInfoList list; + Status status = internal::ParsePagesInfo( + "[{\"type\": \"page\", \"id\": \"1\", \"url\": \"http://page1\"}]", + &list); + ASSERT_TRUE(status.IsOk()); + ASSERT_EQ(1u, list.size()); + ExpectEqual( + internal::WebViewInfo( + "1", "", "http://page1", internal::WebViewInfo::kPage), + list.front()); +} + +namespace { + +void AssertFails(const std::string& data) { + WebViewInfoList list; + Status status = internal::ParsePagesInfo(data, &list); + ASSERT_FALSE(status.IsOk()); + ASSERT_EQ(0u, list.size()); +} + +} // namespace + +TEST(ParsePagesInfo, NonList) { + AssertFails("{\"id\": \"1\"}"); +} + +TEST(ParsePagesInfo, NonDictionary) { + AssertFails("[1]"); +} + +TEST(ParsePagesInfo, NoId) { + AssertFails( + "[{\"type\": \"page\", \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +TEST(ParsePagesInfo, InvalidId) { + AssertFails( + "[{\"type\": \"page\", \"id\": 1, \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +TEST(ParsePagesInfo, NoType) { + AssertFails( + "[{\"id\": \"1\", \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +TEST(ParsePagesInfo, InvalidType) { + AssertFails( + "[{\"type\": \"123\", \"id\": \"1\", \"url\": \"http://page1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +TEST(ParsePagesInfo, NoUrl) { + AssertFails( + "[{\"type\": \"page\", \"id\": \"1\"," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +TEST(ParsePagesInfo, InvalidUrl) { + AssertFails( + "[{\"type\": \"page\", \"id\": \"1\", \"url\": 1," + " \"webSocketDebuggerUrl\": \"ws://debugurl1\"}]"); +} + +namespace { + +void AssertVersionFails(const std::string& data) { + std::string version; + Status status = internal::ParseVersionInfo(data, &version); + ASSERT_TRUE(status.IsError()); + ASSERT_TRUE(version.empty()); +} + +} // namespace + +TEST(ParseVersionInfo, InvalidJSON) { + AssertVersionFails("["); +} + +TEST(ParseVersionInfo, NonDict) { + AssertVersionFails("[]"); +} + +TEST(ParseVersionInfo, NoBrowserKey) { + AssertVersionFails("{}"); +} + +TEST(ParseVersionInfo, Valid) { + std::string version; + Status status = internal::ParseVersionInfo("{\"Browser\": \"1\"}", &version); + ASSERT_TRUE(status.IsOk()); + ASSERT_EQ("1", version); +} |