diff options
Diffstat (limited to 'webkit/glue/dom_operations_unittest.cc')
-rw-r--r-- | webkit/glue/dom_operations_unittest.cc | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/webkit/glue/dom_operations_unittest.cc b/webkit/glue/dom_operations_unittest.cc new file mode 100644 index 0000000..e9f590c --- /dev/null +++ b/webkit/glue/dom_operations_unittest.cc @@ -0,0 +1,184 @@ +// Copyright (c) 2006-2008 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 "base/file_util.h" +#include "base/path_service.h" +#include "base/string_util.h" +#include "net/base/net_util.h" +#include "net/url_request/url_request_context.h" +#include "third_party/WebKit/WebKit/chromium/public/WebView.h" +#include "webkit/glue/dom_operations.h" +#include "webkit/tools/test_shell/simple_resource_loader_bridge.h" +#include "webkit/tools/test_shell/test_shell_test.h" + +namespace { + +class DomOperationsTests : public TestShellTest { + public: + // Test function GetAllSavableResourceLinksForCurrentPage with a web page. + // We expect result of GetAllSavableResourceLinksForCurrentPage exactly + // matches expected_resources_set. + void GetSavableResourceLinksForPage(const FilePath& page_file_path, + const std::set<GURL>& expected_resources_set); + + protected: + // testing::Test + virtual void SetUp() { + TestShellTest::SetUp(); + } + + virtual void TearDown() { + TestShellTest::TearDown(); + } +}; + + +void DomOperationsTests::GetSavableResourceLinksForPage( + const FilePath& page_file_path, + const std::set<GURL>& expected_resources_set) { + // Convert local file path to file URL. + GURL file_url = net::FilePathToFileURL(page_file_path); + // Load the test file. + test_shell_->ResetTestController(); + test_shell_->LoadURL(file_url); + test_shell_->WaitTestFinished(); + // Get all savable resource links for the page. + std::vector<GURL> resources_list; + std::vector<GURL> referrers_list; + std::vector<GURL> frames_list; + webkit_glue::SavableResourcesResult result(&resources_list, + &referrers_list, + &frames_list); + + const char* savable_schemes[] = { + "http", + "https", + "file", + NULL + }; + + ASSERT_TRUE(webkit_glue::GetAllSavableResourceLinksForCurrentPage( + test_shell_->webView(), file_url, &result, savable_schemes)); + // Check all links of sub-resource + for (std::vector<GURL>::const_iterator cit = resources_list.begin(); + cit != resources_list.end(); ++cit) { + ASSERT_TRUE(expected_resources_set.find(*cit) != + expected_resources_set.end()); + } + // Check all links of frame. + for (std::vector<GURL>::const_iterator cit = frames_list.begin(); + cit != frames_list.end(); ++cit) { + ASSERT_TRUE(expected_resources_set.find(*cit) != + expected_resources_set.end()); + } +} + +// Test function GetAllSavableResourceLinksForCurrentPage with a web page +// which has valid savable resource links. +TEST_F(DomOperationsTests, GetSavableResourceLinksWithPageHasValidLinks) { + std::set<GURL> expected_resources_set; + // Set directory of test data. + FilePath page_file_path = data_dir_.AppendASCII("dom_serializer"); + + const char* expected_sub_resource_links[] = { + "file:///c:/yt/css/base_all-vfl36460.css", + "file:///c:/yt/js/base_all_with_bidi-vfl36451.js", + "file:///c:/yt/img/pixel-vfl73.gif" + }; + const char* expected_frame_links[] = { + "youtube_1.htm", + "youtube_2.htm" + }; + // Add all expected links of sub-resource to expected set. + for (size_t i = 0; i < arraysize(expected_sub_resource_links); ++i) + expected_resources_set.insert(GURL(expected_sub_resource_links[i])); + // Add all expected links of frame to expected set. + for (size_t i = 0; i < arraysize(expected_frame_links); ++i) { + const FilePath expected_frame_url = + page_file_path.AppendASCII(expected_frame_links[i]); + expected_resources_set.insert( + net::FilePathToFileURL(expected_frame_url)); + } + + page_file_path = page_file_path.AppendASCII("youtube_1.htm"); + GetSavableResourceLinksForPage(page_file_path, expected_resources_set); +} + +// Test function GetAllSavableResourceLinksForCurrentPage with a web page +// which does not have valid savable resource links. +TEST_F(DomOperationsTests, GetSavableResourceLinksWithPageHasInvalidLinks) { + std::set<GURL> expected_resources_set; + // Set directory of test data. + FilePath page_file_path = data_dir_.AppendASCII("dom_serializer"); + + const char* expected_frame_links[] = { + "youtube_2.htm" + }; + // Add all expected links of frame to expected set. + for (size_t i = 0; i < arraysize(expected_frame_links); ++i) { + FilePath expected_frame_url = + page_file_path.AppendASCII(expected_frame_links[i]); + expected_resources_set.insert( + net::FilePathToFileURL(expected_frame_url)); + } + + page_file_path = page_file_path.AppendASCII("youtube_2.htm"); + GetSavableResourceLinksForPage(page_file_path, expected_resources_set); +} + +// Tests ParseIconSizes with various input. +TEST_F(DomOperationsTests, ParseIconSizes) { + struct TestData { + const char* input; + const bool expected_result; + const bool is_any; + const size_t expected_size_count; + const int width1; + const int height1; + const int width2; + const int height2; + } data[] = { + // Bogus input cases. + { "10", false, false, 0, 0, 0, 0, 0 }, + { "10 10", false, false, 0, 0, 0, 0, 0 }, + { "010", false, false, 0, 0, 0, 0, 0 }, + { " 010 ", false, false, 0, 0, 0, 0, 0 }, + { " 10x ", false, false, 0, 0, 0, 0, 0 }, + { " x10 ", false, false, 0, 0, 0, 0, 0 }, + { "any 10x10", false, false, 0, 0, 0, 0, 0 }, + { "", false, false, 0, 0, 0, 0, 0 }, + { "10ax11", false, false, 0, 0, 0, 0, 0 }, + + // Any. + { "any", true, true, 0, 0, 0, 0, 0 }, + { " any", true, true, 0, 0, 0, 0, 0 }, + { " any ", true, true, 0, 0, 0, 0, 0 }, + + // Sizes. + { "10x11", true, false, 1, 10, 11, 0, 0 }, + { " 10x11 ", true, false, 1, 10, 11, 0, 0 }, + { " 10x11 1x2", true, false, 2, 10, 11, 1, 2 }, + }; + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { + bool is_any; + std::vector<gfx::Size> sizes; + bool result = webkit_glue::ParseIconSizes( + ASCIIToUTF16(data[i].input), &sizes, &is_any); + ASSERT_EQ(result, data[i].expected_result); + if (result) { + ASSERT_EQ(data[i].is_any, is_any); + ASSERT_EQ(data[i].expected_size_count, sizes.size()); + if (sizes.size() > 0) { + ASSERT_EQ(data[i].width1, sizes[0].width()); + ASSERT_EQ(data[i].height1, sizes[0].height()); + } + if (sizes.size() > 1) { + ASSERT_EQ(data[i].width2, sizes[1].width()); + ASSERT_EQ(data[i].height2, sizes[1].height()); + } + } + } +} + +} // namespace |