Chromium Code Reviews| Index: ui/gfx/canvas_unittest_mac.mm |
| diff --git a/ui/gfx/canvas_unittest_mac.mm b/ui/gfx/canvas_unittest_mac.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f5f6fbbff236e6e4f973030d6b84ec0d6c6224b5 |
| --- /dev/null |
| +++ b/ui/gfx/canvas_unittest_mac.mm |
| @@ -0,0 +1,80 @@ |
| +// 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 "ui/gfx/canvas.h" |
| + |
| +#import <Cocoa/Cocoa.h> |
| + |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "base/strings/sys_string_conversions.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "ui/base/range/range.h" |
|
Alexei Svitkine (slow)
2013/09/08 06:51:36
Looks like this got moved to ui/gfx/range/range.h
|
| +#include "ui/gfx/font.h" |
| +#include "ui/gfx/font_list.h" |
| + |
| +namespace gfx { |
| + |
| +namespace { |
| + |
| +// Mac-specific code for string size computations. This is a verbatim copy |
| +// of the old implementation that used to be in canvas_mac.mm. |
| +void CanvasMac_SizeStringInt(const base::string16& text, |
| + const gfx::FontList& font_list, |
| + int* width, |
| + int* height, |
| + int line_height, |
| + int flags) { |
| + DLOG_IF(WARNING, line_height != 0) << "Line heights not implemented."; |
| + DLOG_IF(WARNING, flags & Canvas::MULTI_LINE) << "Multi-line not implemented."; |
| + |
| + NSFont* native_font = font_list.GetPrimaryFont().GetNativeFont(); |
| + NSString* ns_string = base::SysUTF16ToNSString(text); |
| + NSDictionary* attributes = |
| + [NSDictionary dictionaryWithObject:native_font |
| + forKey:NSFontAttributeName]; |
| + NSSize string_size = [ns_string sizeWithAttributes:attributes]; |
| + *width = string_size.width; |
| + *height = font_list.GetHeight(); |
| +} |
| + |
| +} // namespace |
| + |
| +class CanvasTestMac : public testing::Test { |
| + protected: |
| + // Compare the size returned by Canvas::SizeStringInt to the size generated |
| + // by the platform-specific version in CanvasMac_SizeStringInt. Will generate |
| + // expectation failure on any mismatch. Only works for single-line text |
| + // without specified line height, since that is all the platform |
| + // implementation supports. |
| + void CompareSizes(const char* text) { |
| + gfx::FontList font_list(font_); |
| + base::string16 text16 = base::UTF8ToUTF16(text); |
| + |
| + int mac_width = -1; |
| + int mac_height = -1; |
| + CanvasMac_SizeStringInt(text16, font_list, &mac_width, &mac_height, 0, 0); |
| + |
| + int canvas_width = -1; |
| + int canvas_height = -1; |
| + Canvas::SizeStringInt( |
| + text16, font_list, &canvas_width, &canvas_height, 0, 0); |
| + |
| + EXPECT_EQ(mac_width, canvas_width) << " width for " << text; |
| + EXPECT_EQ(mac_height, canvas_height) << " height for " << text; |
| + } |
| + |
| + private: |
| + gfx::Font font_; |
| +}; |
| + |
| + // Tests that Canvas' SizeStringInt yields result consistent with a native |
| + // implementation. |
| + TEST_F(CanvasTestMac, StringSizeIdenticalForSkia) { |
| + CompareSizes(""); |
| + CompareSizes("Foo"); |
| + CompareSizes("Longword"); |
| + CompareSizes("This is a complete sentence."); |
| +} |
| + |
| +} // namespace gfx |