// 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 {

TEST(StringTest, DefaultIsNull) {
  String s;
  EXPECT_TRUE(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, AssignedNullCharPointer) {
  String s("");
  EXPECT_FALSE(s.is_null());
  const char* null = nullptr;
  s = null;
  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("hello world");
  EXPECT_EQ(std::string("hello world"), s.get());
}

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

TEST(StringTest, ConstAt) {
  const String s("abc");
  EXPECT_EQ('a', s.at(0));
  EXPECT_EQ('b', s.at(1));
  EXPECT_EQ('c', s.at(2));
}

TEST(StringTest, NonConstAt) {
  String s("abc");
  EXPECT_EQ('a', s.at(0));
  EXPECT_EQ('b', s.at(1));
  s.at(0) = 'x';
  s.at(1) = 'y';
  EXPECT_EQ('x', s.at(0));
  EXPECT_EQ('y', s.at(1));
  EXPECT_EQ('c', s.at(2));
}

TEST(StringTest, ConstArraySubscript) {
  const String s("abc");
  EXPECT_EQ('a', s[0]);
  EXPECT_EQ('b', s[1]);
  EXPECT_EQ('c', s[2]);
}

TEST(StringTest, NonConstArraySubscript) {
  String s("abc");
  EXPECT_EQ('a', s[0]);
  EXPECT_EQ('b', s[1]);
  s[0] = 'x';
  s[1] = 'y';
  EXPECT_EQ('x', s[0]);
  EXPECT_EQ('y', s[1]);
  EXPECT_EQ('c', s[2]);
}

TEST(StringTest, Equality) {
  String s("hello world");
  String t("hello world");
  EXPECT_EQ(s, t);
  EXPECT_TRUE(s == t);
  EXPECT_TRUE("hello world" == s);
  EXPECT_TRUE(s == "hello world");
  EXPECT_TRUE("not" != s);
  EXPECT_TRUE(s != "not");
}

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);
}

}  // namespace test
}  // namespace mojo
