普通文本  |  132行  |  2.74 KB

// Copyright 2014 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 "mojo/public/cpp/bindings/string.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace mojo {
namespace test {

namespace {
const char* kHelloWorld = "hello world";
}  // namespace

TEST(StringTest, DefaultIsNotNull) {
  String s;
  EXPECT_FALSE(s.is_null());
}

TEST(StringTest, ConstructedWithNULL) {
  String s(nullptr);
  EXPECT_TRUE(s.is_null());
}

TEST(StringTest, ConstructedWithNullCharPointer) {
  const char* null = nullptr;
  String s(null);
  EXPECT_TRUE(s.is_null());
}

TEST(StringTest, AssignedNULL) {
  String s("");
  EXPECT_FALSE(s.is_null());
  s = nullptr;
  EXPECT_TRUE(s.is_null());
}

TEST(StringTest, Empty) {
  String s("");
  EXPECT_FALSE(s.is_null());
  EXPECT_TRUE(s.get().empty());
}

TEST(StringTest, Basic) {
  String s(kHelloWorld);
  EXPECT_EQ(std::string(kHelloWorld), s.get());
}

TEST(StringTest, Assignment) {
  String s(kHelloWorld);
  String t = s;  // Makes a copy.
  EXPECT_FALSE(t.is_null());
  EXPECT_EQ(std::string(kHelloWorld), t.get());
  EXPECT_FALSE(s.is_null());
}

TEST(StringTest, Equality) {
  String s(kHelloWorld);
  String t(kHelloWorld);
  EXPECT_EQ(s, t);
  EXPECT_TRUE(s == s);
  EXPECT_FALSE(s != s);
  EXPECT_TRUE(s == t);
  EXPECT_FALSE(s != t);
  EXPECT_TRUE(kHelloWorld == s);
  EXPECT_TRUE(s == kHelloWorld);
  EXPECT_TRUE("not" != s);
  EXPECT_FALSE("not" == s);
  EXPECT_TRUE(s != "not");
  EXPECT_FALSE(s == "not");

  // Test null strings.
  String n1;
  String n2;
  EXPECT_TRUE(n1 == n1);
  EXPECT_FALSE(n1 != n2);
  EXPECT_TRUE(n1 == n2);
  EXPECT_FALSE(n1 != n2);
  EXPECT_TRUE(n1 != s);
  EXPECT_FALSE(n1 == s);
  EXPECT_TRUE(s != n1);
  EXPECT_FALSE(s == n1);
}

TEST(StringTest, LessThanNullness) {
  String null;
  String null2;
  EXPECT_FALSE(null < null2);
  EXPECT_FALSE(null2 < null);

  String real("real");
  EXPECT_TRUE(null < real);
  EXPECT_FALSE(real < null);
}

TEST(StringTest, MoveConstructors) {
  std::string std_str(kHelloWorld);

  String str1(std::move(std_str));
  EXPECT_TRUE(kHelloWorld == str1);

  String str2(std::move(str1));
  EXPECT_TRUE(kHelloWorld == str2);
  EXPECT_TRUE(str1.is_null());
}

TEST(StringTest, MoveAssignments) {
  std::string std_str(kHelloWorld);

  String str1;
  str1 = std::move(std_str);
  EXPECT_TRUE(kHelloWorld == str1);

  String str2;
  str2 = std::move(str1);
  EXPECT_TRUE(kHelloWorld == str2);
  EXPECT_TRUE(str1.is_null());
}

TEST(StringTest, Storage) {
  String str(kHelloWorld);

  EXPECT_TRUE(kHelloWorld == str.storage());

  std::string storage = str.PassStorage();
  EXPECT_TRUE(str.is_null());
  EXPECT_TRUE(kHelloWorld == storage);
}

}  // namespace test
}  // namespace mojo