// Copyright 2015 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 "cc/resources/platform_color.h"

#include <stddef.h>

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

namespace cc {
namespace {

// Verify SameComponentOrder on this platform.
TEST(PlatformColorTest, SameComponentOrder) {
  bool rgba = !!SK_B32_SHIFT;

  for (size_t i = 0; i <= RESOURCE_FORMAT_MAX; ++i) {
    ResourceFormat format = static_cast<ResourceFormat>(i);
    switch (format) {
      case RGBA_8888:
        EXPECT_EQ(rgba, PlatformColor::SameComponentOrder(format));
        break;
      case BGRA_8888:
        EXPECT_NE(rgba, PlatformColor::SameComponentOrder(format));
        break;
      // The following formats are not platform colors.
      case ALPHA_8:
      case LUMINANCE_8:
      case RGB_565:
      case RGBA_4444:
      case ETC1:
      case RED_8:
      case LUMINANCE_F16:
        break;
    }
  }
}

}  // namespace
}  // namespace cc
