// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/platform/wtf/uuid.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace blink {

TEST(UuidTest, BaseUuid) {
  EXPECT_TRUE(IsValidUuid("00000000-0000-0000-0000-000000000000"));
}

TEST(UuidTest, ComplexUuid) {
  EXPECT_TRUE(IsValidUuid("01234567-89ab-cdef-0123-456789abcdef"));
  EXPECT_TRUE(IsValidUuid("7ad025e0-1e86-11e5-b5f7-727283247c7f"));
}

TEST(UuidTest, WrongCharacter) {
  EXPECT_FALSE(IsValidUuid("g0000000-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("0000000g-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-g000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-000g-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-g000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-000g-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-g000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-000g-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-g00000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-00000000000g"));
}

TEST(UuidTest, UpperCaseCharacter) {
  EXPECT_FALSE(IsValidUuid("A0000000-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("0000000A-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-A000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-000A-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-A000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-000A-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-A000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-000A-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-A00000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-00000000000A"));
}

TEST(UuidTest, LongUuid) {
  EXPECT_FALSE(IsValidUuid("a00000000-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000a-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-a0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000a-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-a0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000a-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-a0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000a-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-a000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-000000000000a"));
}

TEST(UuidTest, ShortUuid) {
  EXPECT_FALSE(IsValidUuid("0000000-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("0000000-0000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-000-0000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-000-0000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-000-000000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-00000000000"));
  EXPECT_FALSE(IsValidUuid("00000000-0000-0000-0000-00000000000"));
}

TEST(UuidTest, NoHyphen) {
  EXPECT_FALSE(IsValidUuid("00000000 0000 0000 0000 000000000000"));
}

}  // namespace blink
