Skip to content

Commit a91a450

Browse files
author
Бабинцев Павел Валерьевич
committed
Merge pull request #15 in UPCMC/ftctextentryformatting from digits-formmater-trimming-bug-fix to master
* commit 'aa4c1a2a665c64388a6d28f7ca65e372d99f6bd8': Fix digits input filter trim bug (DigitValueFilter)
2 parents eb43935 + aa4c1a2 commit a91a450

4 files changed

Lines changed: 160 additions & 2 deletions

File tree

FTCTextEntryFormatting.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
21591A1641163D3E4D1A1F34 /* FTCDigitsInputFilterTestCaseWithZeroMaxLength.m in Sources */ = {isa = PBXBuildFile; fileRef = F515E4501F5D58CD00AEEC8C /* FTCDigitsInputFilterTestCaseWithZeroMaxLength.m */; };
1011
B1EBF8E71F2315F90014F4CB /* FTCTextEntryFormatting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1EBF8DD1F2315F90014F4CB /* FTCTextEntryFormatting.framework */; };
1112
B1EBF9441F2316410014F4CB /* FTCNoFormattingFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = B1EBF9001F2316410014F4CB /* FTCNoFormattingFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; };
1213
B1EBF9451F2316410014F4CB /* FTCNoFormattingFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EBF9011F2316410014F4CB /* FTCNoFormattingFormatter.m */; };
@@ -65,6 +66,7 @@
6566
B1EBF9DF1F231C190014F4CB /* FTCPostfixFormatterTestCaseWithNotEmptyPostfix.m in Sources */ = {isa = PBXBuildFile; fileRef = B1EBF9D71F231C190014F4CB /* FTCPostfixFormatterTestCaseWithNotEmptyPostfix.m */; };
6667
CCC1C0B14A2C0AF523465DB5 /* FTCMaskFormatterGenericConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = CCC1C3A298D5610F9EAECBC1 /* FTCMaskFormatterGenericConfig.h */; settings = {ATTRIBUTES = (Public, ); }; };
6768
CCC1CD063EECBF9CCDDE12F9 /* FTCMaskFormatterGenericConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = CCC1CD7598485396BE2F9CEF /* FTCMaskFormatterGenericConfig.m */; };
69+
F5859D5F1F5E4E1D00607B61 /* FTCDigitsInputFilterTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = F5859D5E1F5E4E1D00607B61 /* FTCDigitsInputFilterTestCase.m */; };
6870
/* End PBXBuildFile section */
6971

7072
/* Begin PBXContainerItemProxy section */
@@ -141,6 +143,8 @@
141143
B1EBF9D71F231C190014F4CB /* FTCPostfixFormatterTestCaseWithNotEmptyPostfix.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FTCPostfixFormatterTestCaseWithNotEmptyPostfix.m; sourceTree = "<group>"; };
142144
CCC1C3A298D5610F9EAECBC1 /* FTCMaskFormatterGenericConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FTCMaskFormatterGenericConfig.h; sourceTree = "<group>"; };
143145
CCC1CD7598485396BE2F9CEF /* FTCMaskFormatterGenericConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FTCMaskFormatterGenericConfig.m; sourceTree = "<group>"; };
146+
F515E4501F5D58CD00AEEC8C /* FTCDigitsInputFilterTestCaseWithZeroMaxLength.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FTCDigitsInputFilterTestCaseWithZeroMaxLength.m; path = InputFilter/FTCDigitsInputFilterTestCaseWithZeroMaxLength.m; sourceTree = "<group>"; };
147+
F5859D5E1F5E4E1D00607B61 /* FTCDigitsInputFilterTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FTCDigitsInputFilterTestCase.m; path = FormatCoordinator/FTCDigitsInputFilterTestCase.m; sourceTree = "<group>"; };
144148
/* End PBXFileReference section */
145149

146150
/* Begin PBXFrameworksBuildPhase section */
@@ -186,6 +190,7 @@
186190
B1EBF8F71F2316410014F4CB /* UnitTests */ = {
187191
isa = PBXGroup;
188192
children = (
193+
F515E4521F5D58D200AEEC8C /* InputFilter */,
189194
B1EBF9B01F2317430014F4CB /* FormatCoordinator */,
190195
B1EBF9CB1F231C190014F4CB /* Formatters */,
191196
B1EBF8F91F2316410014F4CB /* Info.plist */,
@@ -367,6 +372,15 @@
367372
path = FTCPostfixFormatter;
368373
sourceTree = "<group>";
369374
};
375+
F515E4521F5D58D200AEEC8C /* InputFilter */ = {
376+
isa = PBXGroup;
377+
children = (
378+
F5859D5E1F5E4E1D00607B61 /* FTCDigitsInputFilterTestCase.m */,
379+
F515E4501F5D58CD00AEEC8C /* FTCDigitsInputFilterTestCaseWithZeroMaxLength.m */,
380+
);
381+
name = InputFilter;
382+
sourceTree = "<group>";
383+
};
370384
/* End PBXGroup section */
371385

372386
/* Begin PBXHeadersBuildPhase section */
@@ -535,10 +549,12 @@
535549
buildActionMask = 2147483647;
536550
files = (
537551
B1EBF9DA1F231C190014F4CB /* FTCMaskFormatterTestCase.m in Sources */,
552+
F5859D5F1F5E4E1D00607B61 /* FTCDigitsInputFilterTestCase.m in Sources */,
538553
B1EBF9DE1F231C190014F4CB /* FTCPostfixFormatterTestCaseWithNilPostfix.m in Sources */,
539554
B1EBF9DF1F231C190014F4CB /* FTCPostfixFormatterTestCaseWithNotEmptyPostfix.m in Sources */,
540555
B1EBF9DD1F231C190014F4CB /* FTCPostfixFormatterTestCaseWithEmptyPostfix.m in Sources */,
541556
B1EBF9BF1F2317430014F4CB /* FormatCoordinatorTestCase.m in Sources */,
557+
21591A1641163D3E4D1A1F34 /* FTCDigitsInputFilterTestCaseWithZeroMaxLength.m in Sources */,
542558
);
543559
runOnlyForDeploymentPostprocessing = 0;
544560
};

Src/Core/InputFiltering/DigitsValueFilter/FTCDigitsValueFilter.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ - (FTCFilteredString *)replaceSubstringInString:(NSString *)originalString atRan
2727

2828
NSString *filteredString = [originalString stringByReplacingCharactersInRange:range withString:filteredReplacement];
2929

30-
if( shouldTrim && (filteredString.length > _maxLength) )
30+
if( shouldTrim && (filteredString.length > _maxLength) && (0 != _maxLength) )
3131
{
32-
filteredString = [filteredString substringFromIndex:filteredString.length - _maxLength];
32+
filteredString = [filteredString substringToIndex:_maxLength];
3333
}
3434

3535
if( 0 == _maxLength || filteredString.length <= _maxLength )
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
//
2+
// FTCDigitsInputFilterTestCase.m
3+
// FTCTextEntryFormatting
4+
//
5+
// Created by Бабинцев Павел on 05.09.17.
6+
// Copyright © 2017 FTC. All rights reserved.
7+
//
8+
9+
@import XCTest;
10+
@import FTCTextEntryFormatting;
11+
12+
static const NSUInteger MAX_LENGTH = 5;
13+
14+
@interface FTCDigitsInputFilterTestCase : XCTestCase
15+
@end
16+
17+
@implementation FTCDigitsInputFilterTestCase
18+
{
19+
FTCDigitsValueFilter *filter;
20+
}
21+
22+
- (void)setUp
23+
{
24+
[super setUp];
25+
26+
filter = [[FTCDigitsValueFilter alloc] initWithMaxLength:MAX_LENGTH];
27+
}
28+
29+
- (void)test_filter_should_trim_empty_string
30+
{
31+
NSString *string = @"";
32+
NSString *filteredString = [filter filterString:string];
33+
XCTAssertEqual(filteredString.length, 0);
34+
}
35+
36+
- (void)test_filter_trim_string_case
37+
{
38+
NSString *string = @"123456";
39+
NSString *filteredString = [filter filterString:string];
40+
XCTAssertEqual(filteredString.length, MAX_LENGTH);
41+
}
42+
43+
- (void)test_filter_empty_string
44+
{
45+
NSString *string = @"";
46+
NSString *filteredString = [filter filterString:string];
47+
48+
XCTAssertEqualObjects(string, filteredString);
49+
}
50+
51+
- (void)test_filter_non_empty_digits_only_string
52+
{
53+
NSString *string = @"233223";
54+
NSString *etalon = @"23322";
55+
NSString *filteredString = [filter filterString:string];
56+
57+
XCTAssertEqualObjects(etalon, filteredString);
58+
}
59+
60+
- (void)test_filter_non_empty_string
61+
{
62+
NSString *string = @"asdsdf33223dd";
63+
NSString *etalon = @"33223";
64+
NSString *filteredString = [filter filterString:string];
65+
66+
XCTAssertEqualObjects(etalon, filteredString);
67+
XCTAssertEqual(filteredString.length, MAX_LENGTH);
68+
}
69+
70+
- (void)test_filter_digits_string_with_comma_delemiter
71+
{
72+
NSString *string = @"332,23";
73+
NSString *etalon = @"33223";
74+
NSString *filteredString = [filter filterString:string];
75+
76+
XCTAssertEqualObjects(etalon, filteredString);
77+
XCTAssertEqual(filteredString.length, MAX_LENGTH);
78+
}
79+
80+
@end
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//
2+
// FTCTextInputFilter.m
3+
// FTCTextEntryFormatting
4+
//
5+
// Created by Бабинцев Павел on 04.09.17.
6+
// Copyright © 2017 FTC. All rights reserved.
7+
//
8+
9+
@import XCTest;
10+
@import FTCTextEntryFormatting;
11+
12+
13+
@interface FTCDigitsInputFilterTestCaseWithZeroMaxLength : XCTestCase
14+
@end
15+
16+
@implementation FTCDigitsInputFilterTestCaseWithZeroMaxLength
17+
{
18+
FTCDigitsValueFilter *filter;
19+
}
20+
21+
- (void)setUp
22+
{
23+
[super setUp];
24+
25+
filter = [[FTCDigitsValueFilter alloc] initWithMaxLength:0];
26+
}
27+
28+
- (void)test_filter_empty_string
29+
{
30+
NSString *string = @"";
31+
NSString *filteredString = [filter filterString:string];
32+
33+
XCTAssertEqualObjects(string, filteredString);
34+
}
35+
36+
- (void)test_filter_non_empty_digits_only_string
37+
{
38+
NSString *string = @"233223";
39+
NSString *filteredString = [filter filterString:string];
40+
41+
XCTAssertEqualObjects(string, filteredString);
42+
}
43+
44+
- (void)test_filter_non_empty_string
45+
{
46+
NSString *string = @"asdsdf33223dd";
47+
NSString *etalon = @"33223";
48+
NSString *filteredString = [filter filterString:string];
49+
50+
XCTAssertEqualObjects(etalon, filteredString);
51+
}
52+
53+
- (void)test_filter_digits_string_with_comma_delemiter
54+
{
55+
NSString *string = @"332,23";
56+
NSString *etalon = @"33223";
57+
NSString *filteredString = [filter filterString:string];
58+
59+
XCTAssertEqualObjects(etalon, filteredString);
60+
}
61+
62+
@end

0 commit comments

Comments
 (0)