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