diff --git a/Example/SSDynamicTextExample.xcodeproj/project.pbxproj b/Example/SSDynamicTextExample.xcodeproj/project.pbxproj index 77a3ae9..e773b20 100644 --- a/Example/SSDynamicTextExample.xcodeproj/project.pbxproj +++ b/Example/SSDynamicTextExample.xcodeproj/project.pbxproj @@ -8,7 +8,7 @@ /* Begin PBXBuildFile section */ 25DE1D35E98A96562C2C3C9F /* libPods-SSDynamicTextExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A40B656FCA8C692363D81440 /* libPods-SSDynamicTextExample.a */; }; - 5E90DACD19F9655600257F8E /* SSDynamicTextTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E90DACC19F9655600257F8E /* SSDynamicTextTests.m */; }; + 4181AA311C30229E0000DDC1 /* SSDynamicsView.m in Sources */ = {isa = PBXBuildFile; fileRef = B74328F41B9461E60098E793 /* SSDynamicsView.m */; }; 5EE286D7180239B800D286ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EE286D6180239B800D286ED /* Foundation.framework */; }; 5EE286D9180239B800D286ED /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EE286D8180239B800D286ED /* CoreGraphics.framework */; }; 5EE286DB180239B800D286ED /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EE286DA180239B800D286ED /* UIKit.framework */; }; @@ -49,7 +49,6 @@ 46106B6E541D73855CEB3345 /* Pods-SSDynamicTextTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SSDynamicTextTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SSDynamicTextTests/Pods-SSDynamicTextTests.debug.xcconfig"; sourceTree = ""; }; 5E90DAC819F9655600257F8E /* SSDynamicTextTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SSDynamicTextTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 5E90DACB19F9655600257F8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5E90DACC19F9655600257F8E /* SSDynamicTextTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SSDynamicTextTests.m; sourceTree = ""; }; 5EE286D3180239B800D286ED /* SSDynamicTextExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SSDynamicTextExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 5EE286D6180239B800D286ED /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 5EE286D8180239B800D286ED /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -111,9 +110,6 @@ 5E90DAC919F9655600257F8E /* SSDynamicTextTests */ = { isa = PBXGroup; children = ( - B70414E41BAAF5750055958F /* SSTestsHelper.h */, - B70414E51BAAF5750055958F /* SSTestsHelper.m */, - 5E90DACC19F9655600257F8E /* SSDynamicTextTests.m */, B74328EF1B9455DC0098E793 /* SSDynamicLabelTests.m */, B74328F61B946E2A0098E793 /* SSDynamicTextFieldTests.m */, B74328F81B946EEB0098E793 /* SSDynamicTextViewTests.m */, @@ -122,6 +118,8 @@ 6696C9C11C14E7880067D4A4 /* SSDynamicViewsReleaseTests.m */, 667FF3871C0E4B0A00973E4C /* UIApplication+SSTextSizeTests.m */, 6611CBF41C0E52CC003E68A3 /* UIView+SSTextSizeTests.m */, + B70414E41BAAF5750055958F /* SSTestsHelper.h */, + B70414E51BAAF5750055958F /* SSTestsHelper.m */, B74328FC1B9476010098E793 /* SSAttributedStringValidator.h */, B74328FD1B9476010098E793 /* SSAttributedStringValidator.m */, 5E90DACA19F9655600257F8E /* Supporting Files */, @@ -377,11 +375,11 @@ files = ( B74328F01B9455DC0098E793 /* SSDynamicLabelTests.m in Sources */, B74328F91B946EEB0098E793 /* SSDynamicTextViewTests.m in Sources */, + 4181AA311C30229E0000DDC1 /* SSDynamicsView.m in Sources */, B74328F71B946E2A0098E793 /* SSDynamicTextFieldTests.m in Sources */, B74328FE1B9476010098E793 /* SSAttributedStringValidator.m in Sources */, 6696C9C21C14E7880067D4A4 /* SSDynamicViewsReleaseTests.m in Sources */, 661812031C0CED6C00F558EC /* UIFont+SSTextSizeTests.m in Sources */, - 5E90DACD19F9655600257F8E /* SSDynamicTextTests.m in Sources */, 6611CBF51C0E52CC003E68A3 /* UIView+SSTextSizeTests.m in Sources */, 667FF3881C0E4B0A00973E4C /* UIApplication+SSTextSizeTests.m in Sources */, B70414E61BAAF5750055958F /* SSTestsHelper.m in Sources */, diff --git a/Example/SSDynamicTextTests/SSAttributedStringValidator.h b/Example/SSDynamicTextTests/SSAttributedStringValidator.h index 2a3acec..49d0809 100644 --- a/Example/SSDynamicTextTests/SSAttributedStringValidator.h +++ b/Example/SSDynamicTextTests/SSAttributedStringValidator.h @@ -3,7 +3,7 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 31/08/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // #import diff --git a/Example/SSDynamicTextTests/SSDynamicButtonTests.m b/Example/SSDynamicTextTests/SSDynamicButtonTests.m index ddcd4ab..acc18ce 100644 --- a/Example/SSDynamicTextTests/SSDynamicButtonTests.m +++ b/Example/SSDynamicTextTests/SSDynamicButtonTests.m @@ -3,32 +3,26 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 31/08/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // -#import #import -#import -#import "SSDynamicsView.h" -#import "SSAttributedStringValidator.h" #import "SSTestsHelper.h" +#import "SSAttributedStringValidator.h" -@interface SSDynamicButtonTests : XCTestCase - -@property (nonatomic, strong) SSDynamicButton *dynamicButton; -@property (nonatomic, strong) SSDynamicButton *dynamicButtonFromXib; +#import "SSDynamicButton.h" +#import "SSDynamicsView.h" +@interface SSDynamicButtonTests : XCTestCase @end @implementation SSDynamicButtonTests - (void)setUp { [super setUp]; - self.dynamicButton = [SSDynamicButton buttonWithFont:SSTestFontName baseSize:SSTestFontSize]; - SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; - self.dynamicButtonFromXib = view.button; - [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + //Default content size category + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryLarge]; } - (void)tearDown { @@ -36,38 +30,99 @@ - (void)tearDown { [super tearDown]; } -- (void)testDefaultSettings { - //Assert - XCTAssertEqualObjects(self.dynamicButton.titleLabel.font.fontName, SSTestFontName); - XCTAssertEqualObjects(self.dynamicButtonFromXib.titleLabel.font.fontName, SSTestFontName); - XCTAssertEqual(self.dynamicButton.titleLabel.font.pointSize, SSTestFontSize); - XCTAssertEqual(self.dynamicButtonFromXib.titleLabel.font.pointSize, SSTestFontSize); +- (NSArray *)dynamicButtonsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize { + SSDynamicButton *dynamicButtonWithFont = [SSDynamicButton buttonWithFont:fontName baseSize:fontSize]; + + UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize]; + SSDynamicButton *dynamicButtonWithFontDescriptor = [SSDynamicButton buttonWithFontDescriptor:fontDescriptor]; + + SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; + SSDynamicButton *dynamicButtonFromXib = view.button; + + return @[ dynamicButtonWithFont, dynamicButtonWithFontDescriptor, dynamicButtonFromXib ]; } -- (void)testContentSizeChange { +- (void)testButtonTitleLabelFontNameShouldBeEqualToFontNameFromConstructor { + //Arrange + NSString *expectedFontName = SSTestFontName; + //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:SSTestFontSize]; - //Assert - XCTAssertEqual(self.dynamicButton.titleLabel.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicButtonFromXib.titleLabel.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + for (SSDynamicButton *button in dynamicButtons) { + //Assert + XCTAssertEqualObjects(button.titleLabel.font.fontName, expectedFontName); + } } -- (void)testAttributedStringContentSizeChange { +- (void)testButtonTitleLabelFontSizeShouldBeEqualToFontSizeInConstructorForDefaultPreferredContentSizeCategory { //Arrange - NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString]; - [self.dynamicButton setAttributedTitle:attributedString forState:UIControlStateNormal]; - [self.dynamicButtonFromXib setAttributedTitle:attributedString forState:UIControlStateNormal]; - [SSTestsHelper postContentSizeChangeNotification]; + CGFloat expectedFontSize = SSTestFontSize; //Act - [[NSNotificationCenter defaultCenter] postNotificationName:UIContentSizeCategoryDidChangeNotification object:nil]; + NSArray *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicButton *button in dynamicButtons) { + //Assert + XCTAssertEqualWithAccuracy(button.titleLabel.font.pointSize, expectedFontSize, FLT_EPSILON); + } +} + +- (void)testButtonTitleLabelFontSizeShouldBeEqualToLabelFontSizeIncreasedByPreferredContentSizeCategoryDelta { + // Arrange + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + CGFloat initialFontSize = SSTestFontSize; + + //Act + NSArray *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:initialFontSize]; + + for (SSDynamicButton *button in dynamicButtons) { + + //Assert + XCTAssertEqualWithAccuracy(button.titleLabel.font.pointSize, initialFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } +} + +/** + Uncomment after fix: https://github.com/splinesoft/SSDynamicText/issues/27 +- (void)testButtonTitleLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategoryDelta { + //Arrange + CGFloat newFontSize = 7.0f; + UIFont *newFont = [UIFont systemFontOfSize:newFontSize]; + + NSArray *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicButton *button in dynamicButtons) { + //Act + button.titleLabel.font = newFont; + + //Assert + XCTAssertEqualWithAccuracy(button.titleLabel.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } +} + */ + +- (void)testButtonTitleLabelAttributedStringFontSizesShouldBeIncreasedByContentSizeCategoryDelta { + //Arrange + NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString]; + + NSArray *dynamicButtons = [self dynamicButtonsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicButton *button in dynamicButtons) { + //Act + [button setAttributedTitle:attributedString forState:UIControlStateNormal]; + + //Assert + XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:button.titleLabel.attributedText + changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - //Assert - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicButton.titleLabel.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicButtonFromXib.titleLabel.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); + XCTAssertEqualObjects(button.titleLabel.attributedText.string, attributedString.string); + } } @end diff --git a/Example/SSDynamicTextTests/SSDynamicLabelTests.m b/Example/SSDynamicTextTests/SSDynamicLabelTests.m index 37b77b6..10c4530 100644 --- a/Example/SSDynamicTextTests/SSDynamicLabelTests.m +++ b/Example/SSDynamicTextTests/SSDynamicLabelTests.m @@ -3,32 +3,26 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 31/08/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // -#import #import -#import -#import "SSDynamicsView.h" -#import "SSAttributedStringValidator.h" #import "SSTestsHelper.h" +#import "SSAttributedStringValidator.h" -@interface SSDynamicLabelTests : XCTestCase - -@property (nonatomic, strong) SSDynamicLabel *dynamicLabel; -@property (nonatomic, strong) SSDynamicLabel *dynamicLabelFromXib; +#import "SSDynamicLabel.h" +#import "SSDynamicsView.h" +@interface SSDynamicLabelTests : XCTestCase @end @implementation SSDynamicLabelTests - (void)setUp { [super setUp]; - self.dynamicLabel = [SSDynamicLabel labelWithFont:SSTestFontName baseSize:SSTestFontSize]; - SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; - self.dynamicLabelFromXib = view.label; - [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + //Default content size category + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryLarge]; } - (void)tearDown { @@ -36,58 +30,96 @@ - (void)tearDown { [super tearDown]; } +- (NSArray *)dynamicLabelsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize { + SSDynamicLabel *dynamicLabelWithFont = [SSDynamicLabel labelWithFont:fontName baseSize:fontSize]; + + UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize]; + SSDynamicLabel *dynamicLabelWithFontDescriptor = [SSDynamicLabel labelWithFontDescriptor:fontDescriptor]; -- (void)testDefaultSettings { - //Assert - XCTAssertEqualObjects(self.dynamicLabel.font.fontName, SSTestFontName); - XCTAssertEqualObjects(self.dynamicLabelFromXib.font.fontName, SSTestFontName); - XCTAssertEqual(self.dynamicLabel.font.pointSize, SSTestFontSize); - XCTAssertEqual(self.dynamicLabelFromXib.font.pointSize, SSTestFontSize); + SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; + SSDynamicLabel *dynamicLabelFromXib = view.label; + + return @[ dynamicLabelWithFont, dynamicLabelWithFontDescriptor, dynamicLabelFromXib ]; } -- (void)testContentSizeChange { +- (void)testLabelFontNameShouldBeEqualToFontNameFromConstructor { + //Arrange + NSString *expectedFontName = SSTestFontName; + //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize]; - //Assert - XCTAssertEqual(self.dynamicLabel.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicLabelFromXib.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + for (SSDynamicLabel *label in dynamicLabels) { + //Assert + XCTAssertEqualObjects(label.font.fontName, expectedFontName); + } } -- (void)testFontChangeAndThenContentSizeChange { +- (void)testLabelFontSizeShouldBeEqualToFontSizeInConstructorForDefaultPreferredContentSizeCategory { + //Arrange + CGFloat expectedFontSize = SSTestFontSize; + + //Act + NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicLabel *label in dynamicLabels) { + //Assert + XCTAssertEqualWithAccuracy(label.font.pointSize, expectedFontSize, FLT_EPSILON); + } +} + +- (void)testLabelFontSizeShouldBeEqualToLabelFontSizeIncreasedByPreferredContentSizeCategoryDelta { + // Arrange + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + CGFloat initialFontSize = SSTestFontSize; + + //Act + NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:initialFontSize]; + + for (SSDynamicLabel *label in dynamicLabels) { + + //Assert + XCTAssertEqualWithAccuracy(label.font.pointSize, initialFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } +} + +- (void)testLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategoryDelta { //Arrange CGFloat newFontSize = 7.0f; UIFont *newFont = [UIFont systemFontOfSize:newFontSize]; - //Act - self.dynamicLabel.font = newFont; - self.dynamicLabelFromXib.font = newFont; - [SSTestsHelper postContentSizeChangeNotification]; - - //Assert - XCTAssertEqualObjects(self.dynamicLabel.font.fontName, newFont.fontName); - XCTAssertEqualObjects(self.dynamicLabelFromXib.font.fontName, newFont.fontName); - XCTAssertEqual(self.dynamicLabel.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicLabelFromXib.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicLabel *label in dynamicLabels) { + //Act + label.font = newFont; + + //Assert + XCTAssertEqualWithAccuracy(label.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } } -- (void)testAttributedStringContentSizeChange { +- (void)testLabelAttributedStringFontSizesShouldBeIncreasedByContentSizeCategoryDelta { //Arrange NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString]; - self.dynamicLabel.dynamicAttributedText = attributedString; - self.dynamicLabelFromXib.dynamicAttributedText = attributedString; - //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicLabels = [self dynamicLabelsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicLabel *label in dynamicLabels) { + //Act + label.dynamicAttributedText = attributedString; - //Assert - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicLabel.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicLabelFromXib.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); + //Assert + XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:label.attributedText + changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertEqualObjects(attributedString, self.dynamicLabel.dynamicAttributedText); - XCTAssertEqualObjects(attributedString, self.dynamicLabelFromXib.dynamicAttributedText); + XCTAssertEqualObjects(label.dynamicAttributedText, attributedString); + } } @end diff --git a/Example/SSDynamicTextTests/SSDynamicTextFieldTests.m b/Example/SSDynamicTextTests/SSDynamicTextFieldTests.m index 1c6b2be..d251105 100644 --- a/Example/SSDynamicTextTests/SSDynamicTextFieldTests.m +++ b/Example/SSDynamicTextTests/SSDynamicTextFieldTests.m @@ -3,33 +3,26 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 31/08/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // -#import #import -#import -#import "SSDynamicsView.h" -#import "SSAttributedStringValidator.h" #import "SSTestsHelper.h" +#import "SSAttributedStringValidator.h" -@interface SSDynamicTextFieldTests : XCTestCase - -@property (nonatomic, strong) SSDynamicTextField *dynamicTextField; -@property (nonatomic, strong) SSDynamicTextField *dynamicTextFieldFromXib; +#import "SSDynamicTextField.h" +#import "SSDynamicsView.h" +@interface SSDynamicTextFieldTests : XCTestCase @end @implementation SSDynamicTextFieldTests - (void)setUp { [super setUp]; - - self.dynamicTextField = [SSDynamicTextField textFieldWithFont:SSTestFontName baseSize:SSTestFontSize]; - SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; - self.dynamicTextFieldFromXib = view.textField; - [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + //Default content size category + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryLarge]; } - (void)tearDown { @@ -37,57 +30,96 @@ - (void)tearDown { [super tearDown]; } -- (void)testDefaultSettings { - //Assert - XCTAssertEqualObjects(self.dynamicTextField.font.fontName, SSTestFontName); - XCTAssertEqualObjects(self.dynamicTextFieldFromXib.font.fontName, SSTestFontName); - XCTAssertEqual(self.dynamicTextField.font.pointSize, SSTestFontSize); - XCTAssertEqual(self.dynamicTextFieldFromXib.font.pointSize, SSTestFontSize); +- (NSArray *)dynamicTextFieldsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize { + SSDynamicTextField *dynamicTextFieldWithFont = [SSDynamicTextField textFieldWithFont:fontName baseSize:fontSize]; + + UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize]; + SSDynamicTextField *dynamicTextFieldWithFontDescriptor = [SSDynamicTextField textFieldWithFontDescriptor:fontDescriptor]; + + SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; + SSDynamicTextField *dynamicTextFieldFromXib = view.textField; + + return @[ dynamicTextFieldWithFont, dynamicTextFieldWithFontDescriptor, dynamicTextFieldFromXib ]; +} + +- (void)testTextFieldFontNameShouldBeEqualToFontNameFromConstructor { + //Arrange + NSString *expectedFontName = SSTestFontName; + + //Act + NSArray *dynamicTextFields = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicTextField *textField in dynamicTextFields) { + //Assert + XCTAssertEqualObjects(textField.font.fontName, expectedFontName); + } +} + +- (void)testTextFieldFontSizeShouldBeEqualToFontSizeInConstructorForDefaultPreferredContentSizeCategory { + //Arrange + CGFloat expectedFontSize = SSTestFontSize; + + //Act + NSArray *dynamicTextFields = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicTextField *textField in dynamicTextFields) { + //Assert + XCTAssertEqualWithAccuracy(textField.font.pointSize, expectedFontSize, FLT_EPSILON); + } } -- (void)testContentSizeChange { +- (void)testTextFieldFontSizeShouldBeEqualToLabelFontSizeIncreasedByPreferredContentSizeCategoryDelta { + // Arrange + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + CGFloat initialFontSize = SSTestFontSize; + //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicTextFields = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:initialFontSize]; - //Assert - XCTAssertEqual(self.dynamicTextField.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicTextFieldFromXib.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + for (SSDynamicTextField *textField in dynamicTextFields) { + + //Assert + XCTAssertEqualWithAccuracy(textField.font.pointSize, initialFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } } -- (void)testFontChangeAndThenContentSizeChange { +- (void)testLabelFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategoryDelta { //Arrange CGFloat newFontSize = 7.0f; UIFont *newFont = [UIFont systemFontOfSize:newFontSize]; - //Act - self.dynamicTextField.font = newFont; - self.dynamicTextFieldFromXib.font = newFont; - [SSTestsHelper postContentSizeChangeNotification]; - - //Assert - XCTAssertEqualObjects(self.dynamicTextField.font.fontName, newFont.fontName); - XCTAssertEqualObjects(self.dynamicTextFieldFromXib.font.fontName, newFont.fontName); - XCTAssertEqual(self.dynamicTextField.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicTextFieldFromXib.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + NSArray *dynamicTextField = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicTextField *textField in dynamicTextField) { + //Act + textField.font = newFont; + + //Assert + XCTAssertEqualWithAccuracy(textField.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } } -- (void)testAttributedStringContentSizeChange { +- (void)testTextFieldAttributedStringFontSizesShouldBeIncreasedByContentSizeCategoryDelta { //Arrange NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString]; - self.dynamicTextField.dynamicAttributedText = attributedString; - self.dynamicTextFieldFromXib.dynamicAttributedText = attributedString; - //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicTextFields = [self dynamicTextFieldsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; - //Assert - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicTextField.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicTextFieldFromXib.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); + for (SSDynamicTextField *textField in dynamicTextFields) { + //Act + textField.dynamicAttributedText = attributedString; - XCTAssertEqualObjects(attributedString, self.dynamicTextField.dynamicAttributedText); - XCTAssertEqualObjects(attributedString, self.dynamicTextFieldFromXib.dynamicAttributedText); + //Assert + XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:textField.attributedText + changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); + + XCTAssertEqualObjects(textField.dynamicAttributedText, attributedString); + } } @end diff --git a/Example/SSDynamicTextTests/SSDynamicTextTests.m b/Example/SSDynamicTextTests/SSDynamicTextTests.m deleted file mode 100644 index 294da92..0000000 --- a/Example/SSDynamicTextTests/SSDynamicTextTests.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// SSDynamicTextTests.m -// SSDynamicTextTests -// -// Created by Jonathan Hersh on 10/23/14. -// Copyright (c) 2014 Splinesoft. All rights reserved. -// - -#import -#import -#import "SSTestsHelper.h" - -@interface SSDynamicTextTests : XCTestCase - -@end - -@implementation SSDynamicTextTests - -- (void)testInitializable { - //Assert - XCTAssertNotNil([SSDynamicLabel labelWithFont:SSTestFontName baseSize:SSTestFontSize], @"Label should initialize"); - XCTAssertNotNil([SSDynamicTextField textFieldWithFont:SSTestFontName baseSize:SSTestFontSize], @"Text field should initialize"); - XCTAssertNotNil([SSDynamicTextView textViewWithFont:SSTestFontName baseSize:SSTestFontSize], @"Text view should initialize"); - XCTAssertNotNil([SSDynamicButton buttonWithFont:SSTestFontName baseSize:SSTestFontSize], @"Button should initialize"); -} - -@end diff --git a/Example/SSDynamicTextTests/SSDynamicTextViewTests.m b/Example/SSDynamicTextTests/SSDynamicTextViewTests.m index 6fca9f7..bf8d604 100644 --- a/Example/SSDynamicTextTests/SSDynamicTextViewTests.m +++ b/Example/SSDynamicTextTests/SSDynamicTextViewTests.m @@ -3,32 +3,26 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 31/08/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // -#import #import -#import -#import "SSDynamicsView.h" -#import "SSAttributedStringValidator.h" #import "SSTestsHelper.h" +#import "SSAttributedStringValidator.h" -@interface SSDynamicTextViewTests : XCTestCase - -@property (nonatomic, strong) SSDynamicTextView *dynamicTextView; -@property (nonatomic, strong) SSDynamicTextView *dynamicTextViewFromXib; +#import "SSDynamicTextView.h" +#import "SSDynamicsView.h" +@interface SSDynamicTextViewTests : XCTestCase @end @implementation SSDynamicTextViewTests - (void)setUp { [super setUp]; - self.dynamicTextView = [SSDynamicTextView textViewWithFont:SSTestFontName baseSize:SSTestFontSize]; - SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; - self.dynamicTextViewFromXib = view.textView; - [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + //Default content size category + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryLarge]; } - (void)tearDown { @@ -36,57 +30,96 @@ - (void)tearDown { [super tearDown]; } -- (void)testDefaultSettings { - //Assert - XCTAssertEqualObjects(self.dynamicTextView.font.fontName, SSTestFontName); - XCTAssertEqualObjects(self.dynamicTextViewFromXib.font.fontName, SSTestFontName); - XCTAssertEqual(self.dynamicTextView.font.pointSize, SSTestFontSize); - XCTAssertEqual(self.dynamicTextViewFromXib.font.pointSize, SSTestFontSize); +- (NSArray *)dynamicTextViewsWithFontName:(NSString *)fontName fontSize:(CGFloat)fontSize { + SSDynamicTextView *dynamicTextViewWithFont = [SSDynamicTextView textViewWithFont:fontName baseSize:fontSize]; + + UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:fontName size:fontSize]; + SSDynamicTextView *dynamicTextViewWithFontDescriptor = [SSDynamicTextView textViewWithFontDescriptor:fontDescriptor]; + + SSDynamicsView *view = [[NSBundle mainBundle] loadNibNamed:@"SSDynamicsView" owner:nil options:nil].firstObject; + SSDynamicTextView *dynamicTextViewFromXib = view.textView; + + return @[ dynamicTextViewWithFont, dynamicTextViewWithFontDescriptor, dynamicTextViewFromXib ]; +} + +- (void)testTextViewFontNameShouldBeEqualToFontNameFromConstructor { + //Arrange + NSString *expectedFontName = SSTestFontName; + + //Act + NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicTextView *textView in dynamicTextViews) { + //Assert + XCTAssertEqualObjects(textView.font.fontName, expectedFontName); + } +} + +- (void)testTextViewFontSizeShouldBeEqualToFontSizeInConstructorForDefaultPreferredContentSizeCategory { + //Arrange + CGFloat expectedFontSize = SSTestFontSize; + + //Act + NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + for (SSDynamicTextView *textView in dynamicTextViews) { + //Assert + XCTAssertEqualWithAccuracy(textView.font.pointSize, expectedFontSize, FLT_EPSILON); + } } -- (void)testContentSizeChange { +- (void)testTextViewFontSizeShouldBeEqualToLabelFontSizeIncreasedByPreferredContentSizeCategoryDelta { + // Arrange + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + CGFloat initialFontSize = SSTestFontSize; + //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:initialFontSize]; + + for (SSDynamicTextView *textView in dynamicTextViews) { - //Assert - XCTAssertEqual(self.dynamicTextView.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicTextViewFromXib.font.pointSize, SSTestFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + //Assert + XCTAssertEqualWithAccuracy(textView.font.pointSize, initialFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } } -- (void)testFontChangeAndThenContentSizeChange { +- (void)testTextViewFontSizeShouldBeEqualToNewFontSizeIncreasedByContentSizeCategoryDelta { //Arrange CGFloat newFontSize = 7.0f; UIFont *newFont = [UIFont systemFontOfSize:newFontSize]; - //Act - self.dynamicTextView.font = newFont; - self.dynamicTextViewFromXib.font = newFont; - [SSTestsHelper postContentSizeChangeNotification]; - - //Assert - XCTAssertEqualObjects(self.dynamicTextView.font.fontName, newFont.fontName); - XCTAssertEqualObjects(self.dynamicTextViewFromXib.font.fontName, newFont.fontName); - XCTAssertEqual(self.dynamicTextView.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); - XCTAssertEqual(self.dynamicTextViewFromXib.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge); + NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicTextView *textView in dynamicTextViews) { + //Act + textView.font = newFont; + + //Assert + XCTAssertEqualWithAccuracy(textView.font.pointSize, newFontSize + SSTestFontSizeDifferenceForSizeExtraExtraLarge, FLT_EPSILON); + } } -- (void)testAttributedStringContentSizeChange { +- (void)testTextViewAttributedStringFontSizesShouldBeIncreasedByContentSizeCategoryDelta { //Arrange NSAttributedString *attributedString = [SSAttributedStringValidator testAttributedString]; - self.dynamicTextView.dynamicAttributedText = attributedString; - self.dynamicTextViewFromXib.dynamicAttributedText = attributedString; - //Act - [SSTestsHelper postContentSizeChangeNotification]; + NSArray *dynamicTextViews = [self dynamicTextViewsWithFontName:SSTestFontName fontSize:SSTestFontSize]; + + [SSTestsHelper startMockingPreferredContentSizeCategory:UIContentSizeCategoryExtraExtraLarge]; + + for (SSDynamicTextView *textView in dynamicTextViews) { + //Act + textView.dynamicAttributedText = attributedString; - //Assert - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicTextView.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:self.dynamicTextViewFromXib.attributedText - changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); + //Assert + XCTAssertTrue([SSAttributedStringValidator isValidTestAttributedString:textView.attributedText + changedByDelta:SSTestFontSizeDifferenceForSizeExtraExtraLarge]); - XCTAssertEqualObjects(attributedString, self.dynamicTextView.dynamicAttributedText); - XCTAssertEqualObjects(attributedString, self.dynamicTextViewFromXib.dynamicAttributedText); + XCTAssertEqualObjects(textView.dynamicAttributedText, attributedString); + } } @end diff --git a/Example/SSDynamicTextTests/SSTestsHelper.h b/Example/SSDynamicTextTests/SSTestsHelper.h index 0111981..e208cb7 100644 --- a/Example/SSDynamicTextTests/SSTestsHelper.h +++ b/Example/SSDynamicTextTests/SSTestsHelper.h @@ -3,7 +3,7 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 17/09/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // #import diff --git a/Example/SSDynamicTextTests/SSTestsHelper.m b/Example/SSDynamicTextTests/SSTestsHelper.m index 7fb48fc..282f975 100644 --- a/Example/SSDynamicTextTests/SSTestsHelper.m +++ b/Example/SSDynamicTextTests/SSTestsHelper.m @@ -3,7 +3,7 @@ // SSDynamicTextExample // // Created by Remigiusz Herba on 17/09/15. -// +// Copyright (c) 2015 Splinesoft. All rights reserved. // #import "SSTestsHelper.h" @@ -19,6 +19,10 @@ @implementation SSTestsHelper + (void)startMockingPreferredContentSizeCategory:(NSString *)contentSizeCategory { + if (applicationMock) { + [self stopMockingPreferredContentSizeCategory]; + } + applicationMock = OCMPartialMock([UIApplication sharedApplication]); OCMStub([applicationMock preferredContentSizeCategory]).andReturn(contentSizeCategory); } @@ -33,6 +37,10 @@ + (void)postContentSizeChangeNotification { } + (void)startMockingBundleDictionary:(NSDictionary *)dictionary { + if (bundleMock) { + [self stopMockingBundleDictionary]; + } + bundleMock = OCMPartialMock([NSBundle mainBundle]); OCMStub([bundleMock infoDictionary]).andReturn(dictionary); }