1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Copyright 2014 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez// found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "mojo/public/cpp/bindings/string.h"
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#include "testing/gtest/include/gtest/gtest.h"
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace mojo {
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace test {
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznamespace {
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezconst char* kHelloWorld = "hello world";
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, DefaultIsNotNull) {
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s;
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s.is_null());
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, ConstructedWithNULL) {
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s(nullptr);
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s.is_null());
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, ConstructedWithNullCharPointer) {
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  const char* null = nullptr;
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s(null);
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s.is_null());
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, AssignedNULL) {
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s("");
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s.is_null());
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  s = nullptr;
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s.is_null());
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, Empty) {
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s("");
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s.is_null());
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s.get().empty());
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, Basic) {
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s(kHelloWorld);
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_EQ(std::string(kHelloWorld), s.get());
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, Assignment) {
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s(kHelloWorld);
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String t = s;  // Makes a copy.
52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(t.is_null());
53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_EQ(std::string(kHelloWorld), t.get());
54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s.is_null());
55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, Equality) {
58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String s(kHelloWorld);
59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String t(kHelloWorld);
60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_EQ(s, t);
61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s == s);
62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s != s);
63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s == t);
64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s != t);
65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == s);
66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s == kHelloWorld);
67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE("not" != s);
68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE("not" == s);
69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s != "not");
70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s == "not");
71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  // Test null strings.
73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String n1;
74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String n2;
75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(n1 == n1);
76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(n1 != n2);
77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(n1 == n2);
78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(n1 != n2);
79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(n1 != s);
80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(n1 == s);
81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(s != n1);
82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(s == n1);
83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, LessThanNullness) {
86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String null;
87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String null2;
88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(null < null2);
89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(null2 < null);
90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String real("real");
92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(null < real);
93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_FALSE(real < null);
94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, MoveConstructors) {
97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::string std_str(kHelloWorld);
98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String str1(std::move(std_str));
100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == str1);
101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String str2(std::move(str1));
103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == str2);
104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(str1.is_null());
105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, MoveAssignments) {
108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::string std_str(kHelloWorld);
109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String str1;
111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  str1 = std::move(std_str);
112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == str1);
113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String str2;
115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  str2 = std::move(str1);
116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == str2);
117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(str1.is_null());
118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTEST(StringTest, Storage) {
121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  String str(kHelloWorld);
122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == str.storage());
124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  std::string storage = str.PassStorage();
126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(str.is_null());
127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  EXPECT_TRUE(kHelloWorld == storage);
128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}
129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
130645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace test
131645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez}  // namespace mojo
132