// Copyright 2014 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "cobalt/cssom/keyword_value.h"

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

namespace cobalt {
namespace cssom {

TEST(KeywordValueTest, InstancesAndValuesAreConsistent) {
  EXPECT_EQ(KeywordValue::kAbsolute, KeywordValue::GetAbsolute()->value());
  EXPECT_EQ(KeywordValue::kAuto, KeywordValue::GetAuto()->value());
  EXPECT_EQ(KeywordValue::kBaseline, KeywordValue::GetBaseline()->value());
  EXPECT_EQ(KeywordValue::kBlock, KeywordValue::GetBlock()->value());
  EXPECT_EQ(KeywordValue::kBottom, KeywordValue::GetBottom()->value());
  EXPECT_EQ(KeywordValue::kBreakWord, KeywordValue::GetBreakWord()->value());
  EXPECT_EQ(KeywordValue::kCenter, KeywordValue::GetCenter()->value());
  EXPECT_EQ(KeywordValue::kContain, KeywordValue::GetContain()->value());
  EXPECT_EQ(KeywordValue::kCover, KeywordValue::GetCover()->value());
  EXPECT_EQ(KeywordValue::kCursive, KeywordValue::GetCursive()->value());
  EXPECT_EQ(KeywordValue::kEllipsis, KeywordValue::GetEllipsis()->value());
  EXPECT_EQ(KeywordValue::kEnd, KeywordValue::GetEnd()->value());
  EXPECT_EQ(KeywordValue::kFantasy, KeywordValue::GetFantasy()->value());
  EXPECT_EQ(KeywordValue::kHidden, KeywordValue::GetHidden()->value());
  EXPECT_EQ(KeywordValue::kInherit, KeywordValue::GetInherit()->value());
  EXPECT_EQ(KeywordValue::kInitial, KeywordValue::GetInitial()->value());
  EXPECT_EQ(KeywordValue::kInline, KeywordValue::GetInline()->value());
  EXPECT_EQ(KeywordValue::kInlineBlock,
            KeywordValue::GetInlineBlock()->value());
  EXPECT_EQ(KeywordValue::kLeft, KeywordValue::GetLeft()->value());
  EXPECT_EQ(KeywordValue::kMiddle, KeywordValue::GetMiddle()->value());
  EXPECT_EQ(KeywordValue::kMonospace, KeywordValue::GetMonospace()->value());
  EXPECT_EQ(KeywordValue::kNone, KeywordValue::GetNone()->value());
  EXPECT_EQ(KeywordValue::kNoRepeat, KeywordValue::GetNoRepeat()->value());
  EXPECT_EQ(KeywordValue::kNormal, KeywordValue::GetNormal()->value());
  EXPECT_EQ(KeywordValue::kNoWrap, KeywordValue::GetNoWrap()->value());
  EXPECT_EQ(KeywordValue::kRelative, KeywordValue::GetRelative()->value());
  EXPECT_EQ(KeywordValue::kRepeat, KeywordValue::GetRepeat()->value());
  EXPECT_EQ(KeywordValue::kRight, KeywordValue::GetRight()->value());
  EXPECT_EQ(KeywordValue::kSansSerif, KeywordValue::GetSansSerif()->value());
  EXPECT_EQ(KeywordValue::kScroll, KeywordValue::GetScroll()->value());
  EXPECT_EQ(KeywordValue::kSerif, KeywordValue::GetSerif()->value());
  EXPECT_EQ(KeywordValue::kStart, KeywordValue::GetStart()->value());
  EXPECT_EQ(KeywordValue::kStatic, KeywordValue::GetStatic()->value());
  EXPECT_EQ(KeywordValue::kTop, KeywordValue::GetTop()->value());
  EXPECT_EQ(KeywordValue::kUppercase, KeywordValue::GetUppercase()->value());
  EXPECT_EQ(KeywordValue::kVisible, KeywordValue::GetVisible()->value());
}

}  // namespace cssom
}  // namespace cobalt
