| 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
|
|
|