// Copyright (c) 2012 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/basictypes.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/shadow_value.h"

namespace gfx {

TEST(ShadowValueTest, GetMargin) {
  const struct TestCase {
    Insets expected_margin;
    size_t shadow_count;
    ShadowValue shadows[2];
  } kTestCases[] = {
    {
      Insets(), 0, {},
    },
    {
      Insets(-2, -2, -2, -2),
      1,
      { ShadowValue(gfx::Point(0, 0), 4, 0), },
    },
    {
      Insets(0, -1, -4, -3),
      1,
      { ShadowValue(gfx::Point(1, 2), 4, 0), },
    },
    {
      Insets(-4, -3, 0, -1),
      1,
      { ShadowValue(gfx::Point(-1, -2), 4, 0), },
    },
    {
      Insets(0, -1, -5, -4),
      2,
      {
        ShadowValue(gfx::Point(1, 2), 4, 0),
        ShadowValue(gfx::Point(2, 3), 4, 0),
      },
    },
    {
      Insets(-4, -3, -5, -4),
      2,
      {
        ShadowValue(gfx::Point(-1, -2), 4, 0),
        ShadowValue(gfx::Point(2, 3), 4, 0),
      },
    },
  };

  for (size_t i = 0; i < arraysize(kTestCases); ++i) {
    Insets margin = ShadowValue::GetMargin(
        ShadowValues(kTestCases[i].shadows,
                     kTestCases[i].shadows + kTestCases[i].shadow_count));

    EXPECT_EQ(kTestCases[i].expected_margin, margin) << " i=" << i;
  }
}

}  // namespace gfx
