Index: ui/gfx/color_profile_mac_unittest.mm |
diff --git a/ui/gfx/color_profile_mac_unittest.mm b/ui/gfx/color_profile_mac_unittest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..59efb61aa0fce307eac3aa0d43a348a0daa8cf68 |
--- /dev/null |
+++ b/ui/gfx/color_profile_mac_unittest.mm |
@@ -0,0 +1,96 @@ |
+// Copyright 2014 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. |
+ |
+#import <Cocoa/Cocoa.h> |
+ |
+#include "base/mac/scoped_nsobject.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/gfx/color_profile.h" |
+#include "ui/gfx/mac/coordinate_conversion.h" |
+#import "ui/gfx/test/ui_cocoa_test_helper.h" |
+ |
+namespace { |
+ |
+class ColorProfileTest : public ui::CocoaTest { |
+ public: |
+ virtual void SetUp() override { |
+ ui::CocoaTest::SetUp(); |
+ |
+ // Verify the primary screen origin. |
+ NSRect primary_screen_frame = PrimaryScreenFrame(); |
+ EXPECT_EQ(0, primary_screen_frame.origin.x); |
+ EXPECT_EQ(0, primary_screen_frame.origin.y); |
+ |
+ // Move the test window onto the screen. |
+ MoveTestWindowTo(gfx::Rect(0, 0, 200, 200)); |
+ |
+ // Verify it is contained by the screen. |
+ BOOL screen_contains_test_window = NSContainsRect( |
+ primary_screen_frame, [test_window() frame]); |
+ EXPECT_TRUE(screen_contains_test_window); |
+ } |
+ |
+ void MoveTestWindowTo(gfx::Rect bounds) { |
+ [test_window() setFrame:gfx::ScreenRectToNSRect(bounds) display:NO]; |
+ EXPECT_EQ(bounds.ToString(), TestWindowBounds().ToString()); |
+ } |
+ |
+ gfx::Rect TestWindowBounds() { |
+ return gfx::ScreenRectFromNSRect([test_window() frame]); |
+ } |
+ |
+ BOOL TestWindowOnScreen() { |
+ return NSIntersectsRect(PrimaryScreenFrame(), [test_window() frame]); |
+ } |
+ |
+ BOOL TestWindowContainedOnScreen() { |
+ return NSContainsRect(PrimaryScreenFrame(), [test_window() frame]); |
+ } |
+ |
+ NSRect PrimaryScreenFrame() { |
+ return [[[NSScreen screens] objectAtIndex:0] frame]; |
+ } |
+}; |
+ |
+bool TestColorProfileForBounds(const gfx::Rect& bounds) { |
+ std::vector<char> color_profile; |
+ return gfx::GetDisplayColorProfile(bounds, &color_profile); |
+} |
+ |
+TEST_F(ColorProfileTest, GetDisplayColorProfileForOnScreenBounds) { |
+ MoveTestWindowTo(gfx::Rect(10, 10, 100, 100)); |
+ EXPECT_FALSE(TestWindowBounds().IsEmpty()); |
+ EXPECT_TRUE(TestWindowContainedOnScreen()); |
+ EXPECT_TRUE(TestColorProfileForBounds(TestWindowBounds())); |
+} |
+ |
+TEST_F(ColorProfileTest, GetDisplayColorProfileForPartiallyOnScreenBounds) { |
+ MoveTestWindowTo(gfx::Rect(-50, -50, 80, 80)); |
+ EXPECT_FALSE(TestWindowBounds().IsEmpty()); |
+ EXPECT_TRUE(TestWindowOnScreen()); |
+ EXPECT_TRUE(TestColorProfileForBounds(TestWindowBounds())); |
+} |
+ |
+TEST_F(ColorProfileTest, GetDisplayColorProfileForOffScreenBounds) { |
+ MoveTestWindowTo(gfx::Rect(-100, -100, 10, 10)); |
+ EXPECT_FALSE(TestWindowBounds().IsEmpty()); |
+ EXPECT_FALSE(TestWindowOnScreen()); |
+ EXPECT_FALSE(TestColorProfileForBounds(TestWindowBounds())); |
+} |
+ |
+TEST_F(ColorProfileTest, GetDisplayColorProfileForEmptyOnScreenBounds) { |
+ MoveTestWindowTo(gfx::Rect(10, 10, 0, 0)); |
+ EXPECT_TRUE(TestWindowBounds().IsEmpty()); |
+ EXPECT_FALSE(TestWindowOnScreen()); |
+ EXPECT_FALSE(TestColorProfileForBounds(TestWindowBounds())); |
+} |
+ |
+TEST_F(ColorProfileTest, GetDisplayColorProfileForEmptyOffScreenBounds) { |
+ MoveTestWindowTo(gfx::Rect(-100, -100, 0, 0)); |
+ EXPECT_TRUE(TestWindowBounds().IsEmpty()); |
+ EXPECT_FALSE(TestWindowOnScreen()); |
+ EXPECT_FALSE(TestColorProfileForBounds(TestWindowBounds())); |
+} |
+ |
+} // namespace |