// Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/range/range.h"

TEST(RangeTest, FromCHARRANGE) {
  CHARRANGE cr = { 10, 32 };
  gfx::Range r(cr, 50);
  EXPECT_EQ(10U, r.start());
  EXPECT_EQ(32U, r.end());
  EXPECT_EQ(22U, r.length());
  EXPECT_FALSE(r.is_reversed());
  EXPECT_TRUE(r.IsValid());
}

TEST(RangeTest, FromReversedCHARRANGE) {
  CHARRANGE cr = { 20, 10 };
  gfx::Range r(cr, 40);
  EXPECT_EQ(20U, r.start());
  EXPECT_EQ(10U, r.end());
  EXPECT_EQ(10U, r.length());
  EXPECT_TRUE(r.is_reversed());
  EXPECT_TRUE(r.IsValid());
}

TEST(RangeTest, FromCHARRANGETotal) {
  CHARRANGE cr = { 0, -1 };
  gfx::Range r(cr, 20);
  EXPECT_EQ(0U, r.start());
  EXPECT_EQ(20U, r.end());
  EXPECT_EQ(20U, r.length());
  EXPECT_FALSE(r.is_reversed());
  EXPECT_TRUE(r.IsValid());
}

TEST(RangeTest, ToCHARRANGE) {
  gfx::Range r(10, 30);
  CHARRANGE cr = r.ToCHARRANGE();
  EXPECT_EQ(10, cr.cpMin);
  EXPECT_EQ(30, cr.cpMax);
}

TEST(RangeTest, ReversedToCHARRANGE) {
  gfx::Range r(20, 10);
  CHARRANGE cr = r.ToCHARRANGE();
  EXPECT_EQ(20U, cr.cpMin);
  EXPECT_EQ(10U, cr.cpMax);
}

TEST(RangeTest, FromCHARRANGEInvalid) {
  CHARRANGE cr = { -1, -1 };
  gfx::Range r(cr, 30);
  EXPECT_FALSE(r.IsValid());
}

TEST(RangeTest, ToCHARRANGEInvalid) {
  gfx::Range r(gfx::Range::InvalidRange());
  CHARRANGE cr = r.ToCHARRANGE();
  EXPECT_EQ(-1, cr.cpMin);
  EXPECT_EQ(-1, cr.cpMax);
}
