15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/test/gfx_util.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <iomanip> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <sstream> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/box_f.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/point.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/point3_f.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/point_f.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/quad_f.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/rect.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/rect_f.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/size.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/size_f.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/vector2d.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/vector2d_f.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/vector3d_f.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/transform.h" 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gfx { 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string ColorAsString(SkColor color) { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::ostringstream stream; 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) stream << std::hex << std::uppercase << "#" << std::setfill('0') 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << std::setw(2) << SkColorGetA(color) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << std::setw(2) << SkColorGetR(color) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << std::setw(2) << SkColorGetG(color) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << std::setw(2) << SkColorGetB(color); 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return stream.str(); 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FloatAlmostEqual(float a, float b) { 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // FloatLE is the gtest predicate for less than or almost equal to. 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ::testing::FloatLE("a", "b", a, b) && 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ::testing::FloatLE("b", "a", b, a); 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)::testing::AssertionResult AssertBoxFloatEqual(const char* lhs_expr, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const char* rhs_expr, 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const BoxF& lhs, 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const BoxF& rhs) { 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (FloatAlmostEqual(lhs.x(), rhs.x()) && 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FloatAlmostEqual(lhs.y(), rhs.y()) && 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FloatAlmostEqual(lhs.z(), rhs.z()) && 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FloatAlmostEqual(lhs.width(), rhs.width()) && 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FloatAlmostEqual(lhs.height(), rhs.height()) && 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FloatAlmostEqual(lhs.depth(), rhs.depth())) { 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ::testing::AssertionSuccess(); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ::testing::AssertionFailure() << "Value of: " << rhs_expr 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\n Actual: " << rhs.ToString() 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\nExpected: " << lhs_expr 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\nWhich is: " << lhs.ToString(); 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch::testing::AssertionResult AssertRectFloatEqual(const char* lhs_expr, 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* rhs_expr, 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const RectF& lhs, 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const RectF& rhs) { 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (FloatAlmostEqual(lhs.x(), rhs.x()) && 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FloatAlmostEqual(lhs.y(), rhs.y()) && 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FloatAlmostEqual(lhs.width(), rhs.width()) && 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FloatAlmostEqual(lhs.height(), rhs.height())) { 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ::testing::AssertionSuccess(); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ::testing::AssertionFailure() 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "Value of: " << rhs_expr << "\n Actual: " << rhs.ToString() 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "\nExpected: " << lhs_expr << "\nWhich is: " << lhs.ToString(); 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)::testing::AssertionResult AssertSkColorsEqual(const char* lhs_expr, 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const char* rhs_expr, 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SkColor lhs, 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SkColor rhs) { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (lhs == rhs) { 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ::testing::AssertionSuccess(); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ::testing::AssertionFailure() << "Value of: " << rhs_expr 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\n Actual: " << ColorAsString(rhs) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\nExpected: " << lhs_expr 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << "\nWhich is: " << ColorAsString(lhs); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const BoxF& box, ::std::ostream* os) { 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << box.ToString(); 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Point& point, ::std::ostream* os) { 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << point.ToString(); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Point3F& point, ::std::ostream* os) { 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << point.ToString(); 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const PointF& point, ::std::ostream* os) { 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << point.ToString(); 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const QuadF& quad, ::std::ostream* os) { 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << quad.ToString(); 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Rect& rect, ::std::ostream* os) { 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << rect.ToString(); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const RectF& rect, ::std::ostream* os) { 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << rect.ToString(); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Size& size, ::std::ostream* os) { 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << size.ToString(); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const SizeF& size, ::std::ostream* os) { 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << size.ToString(); 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Transform& transform, ::std::ostream* os) { 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << transform.ToString(); 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Vector2d& vector, ::std::ostream* os) { 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << vector.ToString(); 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Vector2dF& vector, ::std::ostream* os) { 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << vector.ToString(); 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid PrintTo(const Vector3dF& vector, ::std::ostream* os) { 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch *os << vector.ToString(); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace gfx 146