blob: c133b6a1531fa8ae9bfb142085ad4bb43694f62a [file] [log] [blame]
// Copyright 2020 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 "chrome/updater/lib_util.h"
#include "base/strings/string_piece.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace updater {
// Characters that must be percent-encoded.
TEST(UnescapeUrlComponentTest, ReservedCharacters) {
std::map<base::StringPiece, base::StringPiece> reserved_characters = {
{"!", "%21"}, {"#", "%23"}, {"$", "%24"}, {"%", "%25"}, {"&", "%26"},
{"'", "%27"}, {"(", "%28"}, {")", "%29"}, {"*", "%2A"}, {"+", "%2B"},
{",", "%2C"}, {"/", "%2F"}, {":", "%3A"}, {";", "%3B"}, {"=", "%3D"},
{"?", "%3F"}, {"@", "%40"}, {"[", "%5B"}, {"]", "%5D"}};
for (auto pair : reserved_characters) {
EXPECT_EQ(pair.first, UnescapeURLComponent(pair.second));
}
for (auto pair : reserved_characters) {
// If input contains a reserved character, just ignore it.
std::string escaped_includes_reserved = pair.first.as_string() + "%20";
std::string unescaped = pair.first.as_string() + " ";
EXPECT_EQ(unescaped, UnescapeURLComponent(escaped_includes_reserved));
}
}
TEST(UnescapeUrlComponentTest, CommonCharacters) {
std::map<base::StringPiece, base::StringPiece> common_characters = {
{"\n", "%0A"}, {"\r", "%0D"}, {" ", "%20"}, {"\"", "%22"},
{"%", "%25"}, {"-", "%2D"}, {".", "%2E"}, {"<", "%3C"},
{">", "%3E"}, {"\\", "%5C"}, {"^", "%5E"}, {"_", "%5F"},
{"`", "%60"}, {"{", "%7B"}, {"|", "%7C"}, {"}", "%7D"},
{"~", "%7E"}, {"£", "%C2%A3"}, {"円", "%E5%86%86"}};
for (auto pair : common_characters) {
EXPECT_EQ(pair.first, UnescapeURLComponent(pair.second));
}
}
TEST(UnescapeUrlComponentTest, MixedEscapedAndUnicode) {
EXPECT_EQ("££", UnescapeURLComponent("£%C2%A3"));
}
} // namespace updater