Skip to content

Commit

Permalink
Add Pruning function continue to do matching even when finding a match
Browse files Browse the repository at this point in the history
Reviewed By: KylinChang

Differential Revision: D20332581

fbshipit-source-id: 250b058713bd54f711841e53377b0cd9ee58e801
  • Loading branch information
Tao Chen authored and facebook-github-bot committed Mar 9, 2020
1 parent d78287e commit 085b968
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ + (void)getMetadataWithText:(NSString *)text
secureTextEntry:(BOOL)secureTextEntry
inputType:(UIKeyboardType)inputType
{
text = [self normalizedValue:text];
text = [self normalizeValue:text];
placeholder = [self normalizeField:placeholder];
if (secureTextEntry || [placeholder containsString:@"password"] ||
text.length == 0 ||
Expand All @@ -230,23 +230,15 @@ + (void)getMetadataWithText:(NSString *)text
continue;
}

BOOL isRuleVMatched = [rule[FIELD_V] isEqualToString:@""] || [self checkMetadataText:text matchRuleV:rule[FIELD_V]];
if (isRuleVMatched) {
if ([key isEqualToString:@"r6"]) {
NSString *prunedText = [text componentsSeparatedByString:@"-"][0];
[FBSDKMetadataIndexer checkAndAppendData:prunedText forKey:key];
} else {
[FBSDKMetadataIndexer checkAndAppendData:text forKey:key];
}
break;
}

NSString *preProcessedText = text;
if ([key isEqualToString:@"r2"]) {
NSString *prunedText = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+- ()."]] componentsJoinedByString:@""];
if ([self checkMetadataText:prunedText matchRuleV:rule[FIELD_V]]) {
[FBSDKMetadataIndexer checkAndAppendData:prunedText forKey:key];
break;
}
preProcessedText = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"+- ()."]] componentsJoinedByString:@""];
}
BOOL isRuleVMatched = [rule[FIELD_V] isEqualToString:@""] || [self checkMetadataText:preProcessedText matchRuleV:rule[FIELD_V]];
if (isRuleVMatched) {
NSString *prunedText = [self pruneValue:preProcessedText forKey:key];
[FBSDKMetadataIndexer checkAndAppendData:prunedText forKey:key];
continue;
}
}
}
Expand Down Expand Up @@ -322,14 +314,33 @@ + (NSString *)normalizeField:(NSString *)field
withTemplate:@""].lowercaseString;
}

+ (NSString *)normalizedValue:(NSString *)value
+ (NSString *)normalizeValue:(NSString *)value
{
if (!value) {
return nil;
}
return [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]].lowercaseString;
}

+ (NSString *)pruneValue:(NSString *)value forKey:(NSString *)key
{
if (value.length == 0) {
return @"";
}
if ([key isEqualToString:@"r3"]) {
if ([value hasPrefix:@"m"] || [value hasPrefix:@"b"] || [value hasPrefix:@"ge"]) {
value = @"m";
} else {
value = @"f";
}
} else if ([key isEqualToString:@"r4"] || [key isEqualToString:@"r5"]) {
value = [[value componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""];
} else if ([key isEqualToString:@"r6"]) {
value = [value componentsSeparatedByString:@"-"][0];
}
return value;
}

@end

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,19 @@ - (void)testGetMetadataWithPhoneNumber
OCMVerify([_mockMetadataIndexer checkAndAppendData:text forKey:@"r2"]);
}

// test for geting metadata with valid phone number or zipcode with labels
- (void)testGetMetadataWithPhoneNumberWithLabels
{
NSString *text = @"11122";
[FBSDKMetadataIndexer getMetadataWithText:text
placeholder:@""
labels:@[@"phone", @"zipcode"]
secureTextEntry:NO
inputType:UIKeyboardTypePhonePad];
OCMVerify([_mockMetadataIndexer checkAndAppendData:text forKey:@"r2"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:text forKey:@"r6"]);
}

// test for geting metadata with secure text
- (void)testGetMetadataWithSecureText
{
Expand Down Expand Up @@ -328,7 +341,7 @@ - (void)testGetMetadataWithValidGender
labels:nil
secureTextEntry:NO
inputType:UIKeyboardTypeDefault];
OCMVerify([_mockMetadataIndexer checkAndAppendData:text forKey:@"r3"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"m" forKey:@"r3"]);
}

- (void)testGetMetadataWithInvalidGender
Expand Down Expand Up @@ -365,7 +378,7 @@ - (void)testGetMetadataWithValidCity
labels:nil
secureTextEntry:NO
inputType:UIKeyboardTypeDefault];
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"menlo park" forKey:@"r4"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"menlopark" forKey:@"r4"]);
}

- (void)testGetMetadataWithInvalidCity
Expand Down Expand Up @@ -444,19 +457,18 @@ - (void)testGetMetadataWithValidZip
OCMVerify([_mockMetadataIndexer checkAndAppendData:text forKey:@"r6"]);
}

// test for getting metadata with valid zipcode containing -
// test for getting metadata with valid zipcode containing "-" (will also be regarded as phone number)
- (void)testGetMetadataWithValidZipWithPunctuations
{
NSString *text = @"94025-1234";
NSString *indicator = @"zcode";
[FBSDKMetadataIndexer getMetadataWithText:text
placeholder:indicator
labels:nil
placeholder:@""
labels:@[@"zcode", @"phone"]
secureTextEntry:NO
inputType:UIKeyboardTypePhonePad];
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"94025" forKey:@"r6"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"940251234" forKey:@"r2"]);
OCMReject([_mockMetadataIndexer checkAndAppendData:text forKey:@"r6"]);
OCMReject([_mockMetadataIndexer checkAndAppendData:@"940251234" forKey:@"r2"]);
}

- (void)testGetMetadataWithInvalidZip
Expand Down Expand Up @@ -560,4 +572,19 @@ - (void)testGetMetadataWithInvalidLnIndicator
OCMReject([_mockMetadataIndexer checkAndAppendData:[OCMArg any] forKey:@"r8"]);
}

// test for getting meta with first name with labels (will also be regarded as last name, state, city
- (void)testGetMetadataWithFirstNameWithLabels
{
NSString *text = @"Taylor";
[FBSDKMetadataIndexer getMetadataWithText:text
placeholder:@""
labels:@[@"fn", @"ln", @"state", @"city"]
secureTextEntry:NO
inputType:UIKeyboardTypeDefault];
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"taylor" forKey:@"r4"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"taylor" forKey:@"r5"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"taylor" forKey:@"r7"]);
OCMVerify([_mockMetadataIndexer checkAndAppendData:@"taylor" forKey:@"r8"]);
}

@end

0 comments on commit 085b968

Please sign in to comment.