// Copyright 2016 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/lib/wtf_hash_util.h"

#include "mojo/public/interfaces/bindings/tests/test_structs.mojom-blink.h"
#include "mojo/public/interfaces/bindings/tests/test_wtf_types.mojom-blink.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/wtf/HashFunctions.h"

namespace mojo {
namespace test {
namespace {

using WTFHashTest = testing::Test;

TEST_F(WTFHashTest, NestedStruct) {
  // Just check that this template instantiation compiles.
  ASSERT_EQ(::mojo::internal::Hash(
                ::mojo::internal::kHashSeed,
                blink::SimpleNestedStruct::New(blink::ContainsOther::New(1))),
            ::mojo::internal::Hash(
                ::mojo::internal::kHashSeed,
                blink::SimpleNestedStruct::New(blink::ContainsOther::New(1))));
}

TEST_F(WTFHashTest, UnmappedNativeStruct) {
  // Just check that this template instantiation compiles.
  ASSERT_EQ(::mojo::internal::Hash(::mojo::internal::kHashSeed,
                                   blink::UnmappedNativeStruct::New()),
            ::mojo::internal::Hash(::mojo::internal::kHashSeed,
                                   blink::UnmappedNativeStruct::New()));
}

TEST_F(WTFHashTest, Enum) {
  // Just check that this template instantiation compiles.

  // Top-level.
  ASSERT_EQ(WTF::DefaultHash<blink::TopLevelEnum>::Hash().hash(
                blink::TopLevelEnum::E0),
            WTF::DefaultHash<blink::TopLevelEnum>::Hash().hash(
                blink::TopLevelEnum::E0));

  // Nested in struct.
  ASSERT_EQ(WTF::DefaultHash<blink::TestWTFStruct::NestedEnum>::Hash().hash(
                blink::TestWTFStruct::NestedEnum::E0),
            WTF::DefaultHash<blink::TestWTFStruct::NestedEnum>::Hash().hash(
                blink::TestWTFStruct::NestedEnum::E0));

  // Nested in interface.
  ASSERT_EQ(WTF::DefaultHash<blink::TestWTF::NestedEnum>::Hash().hash(
                blink::TestWTF::NestedEnum::E0),
            WTF::DefaultHash<blink::TestWTF::NestedEnum>::Hash().hash(
                blink::TestWTF::NestedEnum::E0));
}

}  // namespace
}  // namespace test
}  // namespace mojo
