// 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 "testing/gtest/include/gtest/gtest.h" #include "base/string_escape.h" TEST(StringEscapeTest, JavascriptDoubleQuote) { static const char* kToEscape = "\b\001aZ\"\\wee"; static const char* kEscaped = "\\b\\x01aZ\\\"\\\\wee"; static const char* kEscapedQuoted = "\"\\b\\x01aZ\\\"\\\\wee\""; static const wchar_t* kUToEscape = L"\b\x0001" L"a\x123fZ\"\\wee"; static const char* kUEscaped = "\\b\\x01a\\u123FZ\\\"\\\\wee"; static const char* kUEscapedQuoted = "\"\\b\\x01a\\u123FZ\\\"\\\\wee\""; std::string out; // Test wide unicode escaping out = "testy: "; string_escape::JavascriptDoubleQuote(std::wstring(kUToEscape), false, &out); ASSERT_EQ(std::string("testy: ") + kUEscaped, out); out = "testy: "; string_escape::JavascriptDoubleQuote(std::wstring(kUToEscape), true, &out); ASSERT_EQ(std::string("testy: ") + kUEscapedQuoted, out); // Test null and high bit / negative unicode values std::wstring wstr(L"TeSt"); wstr.push_back(0); wstr.push_back(0xffb1); wstr.push_back(0x00ff); out = "testy: "; string_escape::JavascriptDoubleQuote(wstr, false, &out); ASSERT_EQ("testy: TeSt\\x00\\uFFB1\\xFF", out); // Test escaping of 7bit ascii out = "testy: "; string_escape::JavascriptDoubleQuote(std::string(kToEscape), false, &out); ASSERT_EQ(std::string("testy: ") + kEscaped, out); out = "testy: "; string_escape::JavascriptDoubleQuote(std::string(kToEscape), true, &out); ASSERT_EQ(std::string("testy: ") + kEscapedQuoted, out); // Test null, non-printable, and non-7bit std::string str("TeSt"); str.push_back(0); str.push_back(15); str.push_back(127); str.push_back(-16); str.push_back(-128); str.push_back('!'); out = "testy: "; string_escape::JavascriptDoubleQuote(str, false, &out); ASSERT_EQ("testy: TeSt\\x00\\x0F\\x7F\xf0\x80!", out); // Test escape sequences out = "testy: "; string_escape::JavascriptDoubleQuote("a\b\f\n\r\t\v\1\\.\"z", false, &out); ASSERT_EQ("testy: a\\b\\f\\n\\r\\t\\v\\x01\\\\.\\\"z", out); }