// Copyright 2004 Google Inc. All Rights Reserved

#include "talk/base/gunit.h"
#include "talk/xmpp/jid.h"

using buzz::Jid;

TEST(JidTest, TestDomain) {
  Jid jid("dude");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("dude", jid.domain());
  EXPECT_EQ("", jid.resource());
  EXPECT_EQ("dude", jid.Str());
  EXPECT_EQ("dude", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_TRUE(jid.IsBare());
  EXPECT_FALSE(jid.IsFull());
}

TEST(JidTest, TestNodeDomain) {
  Jid jid("walter@dude");
  EXPECT_EQ("walter", jid.node());
  EXPECT_EQ("dude", jid.domain());
  EXPECT_EQ("", jid.resource());
  EXPECT_EQ("walter@dude", jid.Str());
  EXPECT_EQ("walter@dude", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_TRUE(jid.IsBare());
  EXPECT_FALSE(jid.IsFull());
}

TEST(JidTest, TestDomainResource) {
  Jid jid("dude/bowlingalley");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("dude", jid.domain());
  EXPECT_EQ("bowlingalley", jid.resource());
  EXPECT_EQ("dude/bowlingalley", jid.Str());
  EXPECT_EQ("dude", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_FALSE(jid.IsBare());
  EXPECT_TRUE(jid.IsFull());
}

TEST(JidTest, TestNodeDomainResource) {
  Jid jid("walter@dude/bowlingalley");
  EXPECT_EQ("walter", jid.node());
  EXPECT_EQ("dude", jid.domain());
  EXPECT_EQ("bowlingalley", jid.resource());
  EXPECT_EQ("walter@dude/bowlingalley", jid.Str());
  EXPECT_EQ("walter@dude", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_FALSE(jid.IsBare());
  EXPECT_TRUE(jid.IsFull());
}

TEST(JidTest, TestNode) {
  Jid jid("walter@");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("", jid.domain());
  EXPECT_EQ("", jid.resource());
  EXPECT_EQ("", jid.Str());
  EXPECT_EQ("", jid.BareJid().Str());
  EXPECT_FALSE(jid.IsValid());
  EXPECT_TRUE(jid.IsBare());
  EXPECT_FALSE(jid.IsFull());
}

TEST(JidTest, TestResource) {
  Jid jid("/bowlingalley");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("", jid.domain());
  EXPECT_EQ("", jid.resource());
  EXPECT_EQ("", jid.Str());
  EXPECT_EQ("", jid.BareJid().Str());
  EXPECT_FALSE(jid.IsValid());
  EXPECT_TRUE(jid.IsBare());
  EXPECT_FALSE(jid.IsFull());
}

TEST(JidTest, TestNodeResource) {
  Jid jid("walter@/bowlingalley");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("", jid.domain());
  EXPECT_EQ("", jid.resource());
  EXPECT_EQ("", jid.Str());
  EXPECT_EQ("", jid.BareJid().Str());
  EXPECT_FALSE(jid.IsValid());
  EXPECT_TRUE(jid.IsBare());
  EXPECT_FALSE(jid.IsFull());
}

TEST(JidTest, TestFunky) {
  Jid jid("bowling@muchat/walter@dude");
  EXPECT_EQ("bowling", jid.node());
  EXPECT_EQ("muchat", jid.domain());
  EXPECT_EQ("walter@dude", jid.resource());
  EXPECT_EQ("bowling@muchat/walter@dude", jid.Str());
  EXPECT_EQ("bowling@muchat", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_FALSE(jid.IsBare());
  EXPECT_TRUE(jid.IsFull());
}

TEST(JidTest, TestFunky2) {
  Jid jid("muchat/walter@dude");
  EXPECT_EQ("", jid.node());
  EXPECT_EQ("muchat", jid.domain());
  EXPECT_EQ("walter@dude", jid.resource());
  EXPECT_EQ("muchat/walter@dude", jid.Str());
  EXPECT_EQ("muchat", jid.BareJid().Str());
  EXPECT_TRUE(jid.IsValid());
  EXPECT_FALSE(jid.IsBare());
  EXPECT_TRUE(jid.IsFull());
}
