Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Unified Diff: ui/ios/NSString+CrStringDrawing_unittest.mm

Issue 497503004: Add NSString category for providing iOS6-style string drawing APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: don't cache scale Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ios/NSString+CrStringDrawing.mm ('k') | ui/ios/ui_ios.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ios/NSString+CrStringDrawing_unittest.mm
diff --git a/ui/ios/NSString+CrStringDrawing_unittest.mm b/ui/ios/NSString+CrStringDrawing_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..6f0497d06494e914c129de180d16f255347d01ca
--- /dev/null
+++ b/ui/ios/NSString+CrStringDrawing_unittest.mm
@@ -0,0 +1,107 @@
+// 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 "ui/ios/NSString+CrStringDrawing.h"
+
+#include "base/mac/scoped_nsobject.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/sys_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+namespace {
+
+typedef PlatformTest NSStringCrStringDrawing;
+
+// These test verifies that the category methods return the same values as the
+// deprecated methods, so ignore warnings about using deprecated methods.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
+TEST_F(NSStringCrStringDrawing, SizeWithFont) {
+ NSArray* fonts = @[
+ [NSNull null],
+ [UIFont systemFontOfSize:16],
+ [UIFont boldSystemFontOfSize:10],
+ [UIFont fontWithName:@"Helvetica" size:12.0],
+ ];
+ for (UIFont* font in fonts) {
+ if ([font isEqual:[NSNull null]])
+ font = nil;
+ std::string font_tag = "with font ";
+ font_tag.append(
+ base::SysNSStringToUTF8(font ? [font description] : @"nil"));
+ EXPECT_EQ([@"" sizeWithFont:font].width,
+ [@"" cr_sizeWithFont:font].width) << font_tag;
+ EXPECT_EQ([@"" sizeWithFont:font].height,
+ [@"" cr_sizeWithFont:font].height) << font_tag;
+ EXPECT_EQ([@"Test" sizeWithFont:font].width,
+ [@"Test" cr_sizeWithFont:font].width) << font_tag;
+ EXPECT_EQ([@"Test" sizeWithFont:font].height,
+ [@"Test" cr_sizeWithFont:font].height) << font_tag;
+ EXPECT_EQ([@"你好" sizeWithFont:font].width,
+ [@"你好" cr_sizeWithFont:font].width) << font_tag;
+ EXPECT_EQ([@"你好" sizeWithFont:font].height,
+ [@"你好" cr_sizeWithFont:font].height) << font_tag;
+ NSString* long_string = @"★ This is a test string that is very long.";
+ EXPECT_EQ([long_string sizeWithFont:font].width,
+ [long_string cr_sizeWithFont:font].width) << font_tag;
+ EXPECT_EQ([long_string sizeWithFont:font].height,
+ [long_string cr_sizeWithFont:font].height) << font_tag;
+ }
+}
+#pragma clang diagnostic pop // ignored "-Wdeprecated-declarations"
+
+TEST_F(NSStringCrStringDrawing, PixelAlignedSizeWithFont) {
+ NSArray* fonts = @[
+ [UIFont systemFontOfSize:16],
+ [UIFont boldSystemFontOfSize:10],
+ [UIFont fontWithName:@"Helvetica" size:12.0],
+ ];
+ NSArray* strings = @[
+ @"",
+ @"Test",
+ @"你好",
+ @"★ This is a test string that is very long.",
+ ];
+ for (UIFont* font in fonts) {
+ NSDictionary* attributes = @{ NSFontAttributeName : font };
+
+ for (NSString* string in strings) {
+ std::string test_tag = base::StringPrintf("for string '%s' with font %s",
+ base::SysNSStringToUTF8(string).c_str(),
+ base::SysNSStringToUTF8([font description]).c_str());
+
+ CGSize size_with_attributes = [string sizeWithAttributes:attributes];
+ CGSize size_with_pixel_aligned =
+ [string cr_pixelAlignedSizeWithFont:font];
+
+ // Verify that the pixel_aligned size is always rounded up (i.e. the size
+ // returned from sizeWithAttributes: is less than or equal to the pixel-
+ // aligned size).
+ EXPECT_LE(size_with_attributes.width,
+ size_with_pixel_aligned.width) << test_tag;
+ EXPECT_LE(size_with_attributes.height,
+ size_with_pixel_aligned.height) << test_tag;
+
+ // Verify that the pixel_aligned size is never more than a pixel different
+ // than the size returned from sizeWithAttributes:.
+ static CGFloat scale = [[UIScreen mainScreen] scale];
+ EXPECT_NEAR(size_with_attributes.width * scale,
+ size_with_pixel_aligned.width * scale,
+ 0.9999) << test_tag;
+ EXPECT_NEAR(size_with_attributes.height * scale,
+ size_with_pixel_aligned.height * scale,
+ 0.9999) << test_tag;
+
+ // Verify that the pixel-aligned value is pixel-aligned.
+ EXPECT_FLOAT_EQ(roundf(size_with_pixel_aligned.width * scale),
+ size_with_pixel_aligned.width * scale) << test_tag;
+ EXPECT_FLOAT_EQ(roundf(size_with_pixel_aligned.height * scale),
+ size_with_pixel_aligned.height * scale) << test_tag;
+ }
+ }
+}
+
+
+} // namespace
« no previous file with comments | « ui/ios/NSString+CrStringDrawing.mm ('k') | ui/ios/ui_ios.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698