// Copyright 2018 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 "base/task/task_traits.h"

#include "base/task/test_task_traits_extension.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace base {

TEST(TaskTraitsExtensionTest, NoExtension) {
  constexpr TaskTraits traits = {};

  EXPECT_EQ(traits.extension_id(),
            TaskTraitsExtensionStorage::kInvalidExtensionId);
}

#if !defined(STARBOARD)
// Cobalt does not support task traits with extension yet.
TEST(TaskTraitsExtensionTest, CreateWithOneExtensionTrait) {
  constexpr TaskTraits traits = {TestExtensionEnumTrait::kB};

  EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(),
            TestExtensionEnumTrait::kB);
  EXPECT_FALSE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait());
}

TEST(TaskTraitsExtensionTest, CreateWithMultipleExtensionTraits) {
  constexpr TaskTraits traits = {TestExtensionEnumTrait::kB,
                                 TestExtensionBoolTrait()};

  EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(),
            TestExtensionEnumTrait::kB);
  EXPECT_TRUE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait());
}

TEST(TaskTraitsExtensionTest, CreateWithBaseAndExtensionTraits) {
  constexpr TaskTraits traits = {TaskPriority::USER_BLOCKING,
                                 TestExtensionEnumTrait::kC,
                                 TestExtensionBoolTrait()};

  EXPECT_EQ(traits.priority(), TaskPriority::USER_BLOCKING);
  EXPECT_EQ(traits.GetExtension<TestTaskTraitsExtension>().enum_trait(),
            TestExtensionEnumTrait::kC);
  EXPECT_TRUE(traits.GetExtension<TestTaskTraitsExtension>().bool_trait());
}
#endif  // !defined(STARBOARD)

}  // namespace base
