blob: 28be9bd851001daeb4f19b7f1016436c032cac36 [file] [log] [blame]
license.botf003cfe2008-08-24 09:55:55 +09001// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit3f4a7322008-07-27 06:49:38 +09004
5#include "testing/gtest/include/gtest/gtest.h"
6#include "base/string_escape.h"
7
8TEST(StringEscapeTest, JavascriptDoubleQuote) {
9 static const char* kToEscape = "\b\001aZ\"\\wee";
10 static const char* kEscaped = "\\b\\x01aZ\\\"\\\\wee";
deanm@google.coma5937362008-08-19 21:34:51 +090011 static const char* kEscapedQuoted = "\"\\b\\x01aZ\\\"\\\\wee\"";
initial.commit3f4a7322008-07-27 06:49:38 +090012 static const wchar_t* kUToEscape = L"\b\x0001" L"a\x123fZ\"\\wee";
13 static const char* kUEscaped = "\\b\\x01a\\u123FZ\\\"\\\\wee";
14 static const char* kUEscapedQuoted = "\"\\b\\x01a\\u123FZ\\\"\\\\wee\"";
15
16 std::string out;
17
18 // Test wide unicode escaping
19 out = "testy: ";
20 string_escape::JavascriptDoubleQuote(std::wstring(kUToEscape), false, &out);
21 ASSERT_EQ(std::string("testy: ") + kUEscaped, out);
22
23 out = "testy: ";
24 string_escape::JavascriptDoubleQuote(std::wstring(kUToEscape), true, &out);
25 ASSERT_EQ(std::string("testy: ") + kUEscapedQuoted, out);
26
27 // Test null and high bit / negative unicode values
28 std::wstring wstr(L"TeSt");
29 wstr.push_back(0);
30 wstr.push_back(0xffb1);
31 wstr.push_back(0x00ff);
32
33 out = "testy: ";
34 string_escape::JavascriptDoubleQuote(wstr, false, &out);
35 ASSERT_EQ("testy: TeSt\\x00\\uFFB1\\xFF", out);
36
37 // Test escaping of 7bit ascii
38 out = "testy: ";
39 string_escape::JavascriptDoubleQuote(std::string(kToEscape), false, &out);
40 ASSERT_EQ(std::string("testy: ") + kEscaped, out);
41
deanm@google.coma5937362008-08-19 21:34:51 +090042 out = "testy: ";
43 string_escape::JavascriptDoubleQuote(std::string(kToEscape), true, &out);
44 ASSERT_EQ(std::string("testy: ") + kEscapedQuoted, out);
45
initial.commit3f4a7322008-07-27 06:49:38 +090046 // Test null, non-printable, and non-7bit
47 std::string str("TeSt");
48 str.push_back(0);
49 str.push_back(15);
50 str.push_back(127);
51 str.push_back(-16);
52 str.push_back(-128);
53 str.push_back('!');
54
55 out = "testy: ";
56 string_escape::JavascriptDoubleQuote(str, false, &out);
57 ASSERT_EQ("testy: TeSt\\x00\\x0F\\x7F\xf0\x80!", out);
deanm@google.coma5937362008-08-19 21:34:51 +090058
59 // Test escape sequences
60 out = "testy: ";
61 string_escape::JavascriptDoubleQuote("a\b\f\n\r\t\v\1\\.\"z", false, &out);
62 ASSERT_EQ("testy: a\\b\\f\\n\\r\\t\\v\\x01\\\\.\\\"z", out);
initial.commit3f4a7322008-07-27 06:49:38 +090063}
license.botf003cfe2008-08-24 09:55:55 +090064