blob: cd031771126a91bfeef62d5c5793cbe9746adc29 [file] [log] [blame]
François Degros899487c2019-07-12 11:57:52 +10001// Copyright 2019 The Chromium OS 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.
4
5#include "cros-disks/quote.h"
6
7#include <sstream>
8#include <string>
9#include <vector>
10
11#include <gtest/gtest.h>
12
13namespace cros_disks {
14namespace {
15
16template <typename T>
17std::string ToString(const T& t) {
18 std::ostringstream out;
19 out << quote(t) << std::flush;
20 return out.str();
21}
22
François Degrosca450862021-01-14 14:40:02 +110023template <typename T>
24std::string Redacted(const T& t) {
25 std::ostringstream out;
26 out << redact(t, true) << std::flush;
27 return out.str();
28}
29
François Degros899487c2019-07-12 11:57:52 +100030TEST(Quote, StringLiteral) {
31 EXPECT_EQ(ToString<char[1]>(""), "''");
32 EXPECT_EQ(ToString<char[8]>(R"(a\b"c'd)"), R"('a\\b"c\'d')");
33}
34
35TEST(Quote, CStyleString) {
36 EXPECT_EQ(ToString<const char*>(nullptr), "(null)");
37 EXPECT_EQ(ToString<const char*>(""), "''");
38 EXPECT_EQ(ToString<const char*>(R"(")"), R"('"')");
39 EXPECT_EQ(ToString<const char*>(R"(\)"), R"('\\')");
40 EXPECT_EQ(ToString<const char*>("'"), R"('\'')");
41 EXPECT_EQ(ToString<const char*>("a"), "'a'");
42 EXPECT_EQ(ToString<const char*>(R"(a\b"c'd)"), R"('a\\b"c\'d')");
43}
44
45TEST(Quote, StdString) {
46 EXPECT_EQ(ToString<std::string>(""), "''");
47 EXPECT_EQ(ToString<std::string>(R"(")"), R"('"')");
48 EXPECT_EQ(ToString<std::string>(R"(\)"), R"('\\')");
49 EXPECT_EQ(ToString<std::string>("'"), R"('\'')");
50 EXPECT_EQ(ToString<std::string>("a"), "'a'");
51 EXPECT_EQ(ToString<std::string>(R"(a\b"c'd)"), R"('a\\b"c\'d')");
52}
53
54TEST(Quote, FilePath) {
55 EXPECT_EQ(ToString(base::FilePath("")), "''");
56 EXPECT_EQ(ToString(base::FilePath(R"(")")), R"('"')");
57 EXPECT_EQ(ToString(base::FilePath(R"(\)")), R"('\\')");
58 EXPECT_EQ(ToString(base::FilePath("'")), R"('\'')");
59 EXPECT_EQ(ToString(base::FilePath("a")), "'a'");
60 EXPECT_EQ(ToString(base::FilePath(R"(a\b"c'd)")), R"('a\\b"c\'d')");
61}
62
63TEST(Quote, VectorOfStrings) {
64 EXPECT_EQ(ToString<std::vector<std::string>>({}), "[]");
65 EXPECT_EQ(ToString<std::vector<std::string>>({""}), "['']");
66 EXPECT_EQ(ToString<std::vector<std::string>>({"a"}), "['a']");
67 EXPECT_EQ(ToString<std::vector<std::string>>(
68 {"", R"(")", R"(\)", "'", "a", R"(a\b"c'd)"}),
69 R"(['', '"', '\\', '\'', 'a', 'a\\b"c\'d'])");
70}
71
François Degrosca450862021-01-14 14:40:02 +110072TEST(Redact, StringLiteral) {
73 EXPECT_EQ(Redacted<char[1]>(""), "(redacted)");
74 EXPECT_EQ(Redacted<char[8]>(R"(a\b"c'd)"), "(redacted)");
75}
76
77TEST(Redact, CStyleString) {
78 EXPECT_EQ(Redacted<const char*>(nullptr), "(null)");
79 EXPECT_EQ(Redacted<const char*>(""), "(redacted)");
80 EXPECT_EQ(Redacted<const char*>("a"), "(redacted)");
81}
82
83TEST(Redact, StdString) {
84 EXPECT_EQ(Redacted<std::string>(""), "(redacted)");
85 EXPECT_EQ(Redacted<std::string>("a"), "(redacted)");
86}
87
88TEST(Redact, FilePath) {
89 EXPECT_EQ(Redacted(base::FilePath("")), "(redacted)");
90 EXPECT_EQ(Redacted(base::FilePath("a")), "(redacted)");
91}
92
93TEST(Redact, VectorOfStrings) {
94 EXPECT_EQ(Redacted<std::vector<std::string>>({}), "[]");
95 EXPECT_EQ(Redacted<std::vector<std::string>>({""}), "[(redacted)]");
96 EXPECT_EQ(Redacted<std::vector<std::string>>({"a"}), "[(redacted)]");
97 EXPECT_EQ(Redacted<std::vector<std::string>>({"", "'", "a"}),
98 R"([(redacted), (redacted), (redacted)])");
99}
100
François Degros899487c2019-07-12 11:57:52 +1000101} // namespace
102} // namespace cros_disks