#include "gtest/gtest.h"

#include "networkremote/zeroconf.h"

namespace {

static const char k64CharAscii[] =
    "aaaaaaaaaaaaaaaa"
    "aaaaaaaaaaaaaaaa"
    "aaaaaaaaaaaaaaaa"
    "aaaaaaaaaaaaaaaa";

static const char kShortMultiByteString[] =
    "我会说一点汉语";

static const char kLongMultiByteString[] =
    "我会说一点汉语"
    "我会说一点汉语"
    "我会说一点汉语"
    "我会说一点汉语";

TEST(ZeroconfTest, TruncatesAscii) {
  QByteArray truncated = Zeroconf::TruncateName(
      QString::fromLatin1(k64CharAscii));
  EXPECT_EQ(63, truncated.size());
  EXPECT_TRUE(truncated.endsWith('\0'));
}

TEST(ZeroconfTest, DoesNotTruncateShortMultiByteUTF8) {
  EXPECT_EQ(
      sizeof(kShortMultiByteString),
      Zeroconf::TruncateName(QString::fromUtf8(kShortMultiByteString)).size());
}

TEST(ZeroconfTest, TruncatesLongMultiByteUTF8) {
  QByteArray truncated = Zeroconf::TruncateName(
      QString::fromLatin1(kLongMultiByteString));
  EXPECT_LE(63, truncated.size());
  EXPECT_TRUE(truncated.endsWith('\0'));
}

}  // namespace