blob: 4fdad2bc96cda34ed3249f6f3dc55a78667c65c3 [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/shared/model/url/url_util.h"
#import <array>
#import <string_view>
#import "base/strings/sys_string_conversions.h"
#import "ios/chrome/browser/shared/model/url/chrome_url_constants.h"
#import "ios/components/webui/web_ui_url_constants.h"
#import "net/base/apple/url_conversions.h"
#import "testing/gtest_mac.h"
#import "testing/platform_test.h"
#import "url/gurl.h"
namespace {
using ChromeURLUtilTest = PlatformTest;
TEST_F(ChromeURLUtilTest, TestIsExternalFileReference) {
GURL external_url("chrome://external-file/foo/bar");
GURL not_external_url("chrome://foo/bar");
GURL still_not_external_url("http://external-file/foo/bar");
EXPECT_TRUE(UrlIsExternalFileReference(external_url));
EXPECT_FALSE(UrlIsExternalFileReference(not_external_url));
EXPECT_FALSE(UrlIsExternalFileReference(still_not_external_url));
}
TEST_F(ChromeURLUtilTest, TestUrlIsDownloadedFile) {
GURL downloaded_file_url("chrome://downloads/fileName");
GURL external_file_url("chrome://external-file/fileName");
GURL not_downloaded_file_url("http://downloads/fileName");
EXPECT_TRUE(UrlIsDownloadedFile(downloaded_file_url));
EXPECT_FALSE(UrlIsDownloadedFile(external_file_url));
EXPECT_FALSE(UrlIsDownloadedFile(not_downloaded_file_url));
}
constexpr auto kSchemeTestData = std::to_array<std::string_view>({
"http://foo.com",
"https://foo.com",
"data:text/html;charset=utf-8,Hello",
"about:blank",
"chrome://settings",
});
// Tests UrlHasChromeScheme with NSURL* parameter.
TEST_F(ChromeURLUtilTest, NSURLHasChromeScheme) {
for (const std::string_view url : kSchemeTestData) {
NSURL* nsurl = [NSURL URLWithString:base::SysUTF8ToNSString(url)];
bool nsurl_result = UrlHasChromeScheme(nsurl);
EXPECT_EQ(GURL(url).SchemeIs(kChromeUIScheme), nsurl_result)
<< "Scheme check failed for " << url;
}
}
// Tests UrlHasChromeScheme with const GURL& paramter.
TEST_F(ChromeURLUtilTest, GURLHasChromeScheme) {
for (const std::string_view url : kSchemeTestData) {
bool result = UrlHasChromeScheme(GURL(url));
EXPECT_EQ(GURL(url).SchemeIs(kChromeUIScheme), result)
<< "Scheme check failed for " << url;
}
}
TEST_F(ChromeURLUtilTest, GetBundleURLScheme) {
// Verifies that there is some default values.
ChromeAppConstants* constants = [ChromeAppConstants sharedInstance];
NSString* originalScheme = [constants bundleURLScheme];
EXPECT_GT([originalScheme length], 0U);
// Verifies that Chrome scheme can be reset for testing.
[constants setCallbackSchemeForTesting:@"blah"];
EXPECT_NSEQ(@"blah", [constants bundleURLScheme]);
// Resets state in case of further tests.
[constants setCallbackSchemeForTesting:originalScheme];
}
TEST_F(ChromeURLUtilTest, GetAllBundleURLSchemes) {
// Verifies that there is at least 3 scheme (regular, secure and callback).
ChromeAppConstants* constants = [ChromeAppConstants sharedInstance];
NSArray* schemes = [constants allBundleURLSchemes];
EXPECT_GT([schemes count], 2U);
// Verifies that at least the main unit test scheme is in returned schemes.
NSString* unittestScheme = @"ios-chrome-unittests.http";
EXPECT_TRUE([schemes containsObject:unittestScheme]);
}
} // namespace