Skip to content

Commit

Permalink
Add 'isEqualToXXX' for codeless components
Browse files Browse the repository at this point in the history
Summary: As title, make event binding comparable so we don't need to update event bindings when they're the same.

Reviewed By: Oliverccccct

Differential Revision: D20932495

fbshipit-source-id: 63657c9172d53c942fca736355ca005229c51f64
  • Loading branch information
dreamolight authored and facebook-github-bot committed Apr 9, 2020
1 parent 86ed53a commit 9c9295c
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ NS_SWIFT_NAME(CodelessParameterComponent)
@property (nonatomic, copy, readonly) NSString *pathType;

- (instancetype)initWithJSON:(NSDictionary *)dict;
- (BOOL)isEqualToParameter:(FBSDKCodelessParameterComponent *)parameter;

@end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,34 @@ - (instancetype)initWithJSON:(NSDictionary *)dict {
return self;
}

- (BOOL)isEqualToParameter:(FBSDKCodelessParameterComponent *)parameter
{
if (_path.count != parameter.path.count) {
return NO;
}

NSString *current = [NSString stringWithFormat:@"%@|%@|%@",
_name ?: @"",
_value ?: @"",
_pathType ?: @""];
NSString *compared = [NSString stringWithFormat:@"%@|%@|%@",
parameter.name ?: @"",
parameter.value ?: @"",
parameter.pathType ?: @""];

if (![current isEqualToString:compared]) {
return NO;
}

for (int i = 0; i < _path.count; i++) {
if (![_path[i] isEqualToPath:parameter.path[i]]) {
return NO;
}
}

return YES;
}

@end

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ NS_SWIFT_NAME(CodelessPathComponent)
@property (nonatomic, readonly) int row;
@property (nonatomic, readonly) int matchBitmask;

- (instancetype)initWithJSON:(NSDictionary*)dict;
- (instancetype)initWithJSON:(NSDictionary *)dict;
- (BOOL)isEqualToPath:(FBSDKCodelessPathComponent *)path;

@end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,23 @@ - (instancetype)initWithJSON:(NSDictionary *)dict {
return self;
}

- (BOOL)isEqualToPath:(FBSDKCodelessPathComponent *)path
{
NSString *current = [NSString stringWithFormat:@"%@|%@|%@|%@|%d|%d|%d|%d|%d",
_className ?: @"",
_text ?: @"",
_hint ?: @"",
_desc ?: @"",
_index, _section, _row, _tag, _matchBitmask];
NSString *compared = [NSString stringWithFormat:@"%@|%@|%@|%@|%d|%d|%d|%d|%d",
path.className ?: @"",
path.text ?: @"",
path.hint ?: @"",
path.desc ?: @"",
path.index, path.section, path.row, path.tag, path.matchBitmask];
return [current isEqualToString:compared];
}

@end

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ NS_SWIFT_NAME(EventBinding)
+ (BOOL)isPath:(NSArray *)path matchViewPath:(NSArray *)viewPath;
- (FBSDKEventBinding *)initWithJSON:(NSDictionary *)dict;
- (void)trackEvent:(id)sender;
- (BOOL)isEqualToBinding:(FBSDKEventBinding *)binding;

@end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,42 @@ + (NSObject *)findViewByPath:(NSArray *)path parent:(NSObject *)parent level:(in
return nil;
}

- (BOOL)isEqualToBinding:(FBSDKEventBinding *)binding
{
if (_path.count != binding.path.count ||
_parameters.count != binding.parameters.count) {
return NO;
}

NSString *current = [NSString stringWithFormat:@"%@|%@|%@|%@",
_eventName ?: @"",
_eventType ?: @"",
_appVersion ?: @"",
_pathType ?: @""];
NSString *compared = [NSString stringWithFormat:@"%@|%@|%@|%@",
binding.eventName ?: @"",
binding.eventType ?: @"",
binding.appVersion ?: @"",
binding.pathType ?: @""];
if (![current isEqualToString:compared]) {
return NO;
}

for (int i = 0; i < _path.count; i++) {
if (![_path[i] isEqualToPath:binding.path[i]]) {
return NO;
}
}

for (int i = 0; i < _parameters.count; i++) {
if (![_parameters[i] isEqualToParameter:binding.parameters[i]]) {
return NO;
}
}

return YES;
}

// MARK: - find event parameters via relative path
+ (NSString *)findParameterOfPath:(NSArray *)path
pathType:(NSString *)pathType
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,12 @@ - (void)testMatching {
component = binding.parameters[1];
NSString *action = [FBSDKEventBinding findParameterOfPath:component.path pathType:component.pathType sourceView:btnConfirm];
XCTAssertEqual(action, @"Confirm");
}

- (void)testEventBindingEquation {
NSArray *bindings = [FBSDKEventBindingManager parseArray:[FBSDKSampleEventBinding getSampleDictionary][@"event_bindings"]];
XCTAssertTrue([bindings[0] isEqualToBinding:bindings[0]]);
XCTAssertFalse([bindings[0] isEqualToBinding:bindings[1]]);
}

@end

0 comments on commit 9c9295c

Please sign in to comment.