15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a string containing the x-coordinate of each of the views in |model|.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BoundsString(const ViewModel& model) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < model.view_size(); ++i) {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (i != 0)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result += " ";
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    result += base::IntToString(model.ideal_bounds(i).x());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a string containing the id of each of the views in |model|.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ViewIDsString(const ViewModel& model) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string result;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < model.view_size(); ++i) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (i != 0)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result += " ";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    result += base::IntToString(model.view_at(i)->id());
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ViewModel, BasicAssertions) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View v1;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ViewModel model;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v1, 0);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, model.view_size());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(&v1, model.view_at(0));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect v1_bounds(1, 2, 3, 4);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.set_ideal_bounds(0, v1_bounds);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(v1_bounds, model.ideal_bounds(0));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0, model.GetIndexOfView(&v1));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ViewModel, Move) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View v1, v2, v3;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v1.set_id(0);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v2.set_id(1);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v3.set_id(2);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ViewModel model;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v1, 0);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v2, 1);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v3, 2);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Move(0, 2);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1 2 0", ViewIDsString(model));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Move(2, 0);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("0 1 2", ViewIDsString(model));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ViewModel, MoveViewOnly) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  View v1, v2, v3;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v1.set_id(0);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v2.set_id(1);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v3.set_id(2);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ViewModel model;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v1, 0);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v2, 1);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.Add(&v3, 2);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.set_ideal_bounds(0, gfx::Rect(10, 0, 1, 2));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.set_ideal_bounds(1, gfx::Rect(11, 0, 1, 2));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.set_ideal_bounds(2, gfx::Rect(12, 0, 1, 2));
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.MoveViewOnly(0, 2);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1 2 0", ViewIDsString(model));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("10 11 12", BoundsString(model));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.MoveViewOnly(2, 0);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("0 1 2", ViewIDsString(model));
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("10 11 12", BoundsString(model));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.MoveViewOnly(0, 1);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("1 0 2", ViewIDsString(model));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("10 11 12", BoundsString(model));
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  model.MoveViewOnly(1, 0);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("0 1 2", ViewIDsString(model));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ("10 11 12", BoundsString(model));
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
97