aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomáš Znamenáček2014-08-06 10:26:25 +0200
committerTomáš Znamenáček2015-01-07 15:33:46 +0100
commite30504eb2a7729333d3ebe9266ac493deb9ea02c (patch)
treea17eca00ed2f82d264bc1b7fcd27360bf7c6fff6
parent1bdadb166d7ac60a9ea8947e110146bf39a7fb9b (diff)
downloadMASShortcut-e30504eb2a7729333d3ebe9266ac493deb9ea02c.tar.bz2
Implemented equality for shortcut objects.
Shortcuts are equal if and only if their key codes and modifier flags are.
-rw-r--r--Framework/MASShortcut.m14
-rw-r--r--Framework/MASShortcutTests.m14
2 files changed, 28 insertions, 0 deletions
diff --git a/Framework/MASShortcut.m b/Framework/MASShortcut.m
index 3852a9a..14d8061 100644
--- a/Framework/MASShortcut.m
+++ b/Framework/MASShortcut.m
@@ -196,6 +196,20 @@ static NSString *const MASShortcutModifierFlags = @"ModifierFlags";
return (count ? [NSString stringWithCharacters:chars length:count] : @"");
}
+#pragma mark NSObject
+
+- (BOOL) isEqual: (MASShortcut*) object
+{
+ return [object isKindOfClass:[self class]]
+ && (object.keyCode == self.keyCode)
+ && (object.modifierFlags == self.modifierFlags);
+}
+
+- (NSUInteger) hash
+{
+ return self.keyCode + self.modifierFlags;
+}
+
#pragma mark NSCoding
- (void)encodeWithCoder:(NSCoder *)coder
diff --git a/Framework/MASShortcutTests.m b/Framework/MASShortcutTests.m
index 37a801f..d1cd8c4 100644
--- a/Framework/MASShortcutTests.m
+++ b/Framework/MASShortcutTests.m
@@ -5,6 +5,20 @@
@implementation MASShortcutTests
+- (void) testEquality
+{
+ MASShortcut *keyA = [MASShortcut shortcutWithKeyCode:1 modifierFlags:NSControlKeyMask];
+ MASShortcut *keyB = [MASShortcut shortcutWithKeyCode:2 modifierFlags:NSControlKeyMask];
+ MASShortcut *keyC = [MASShortcut shortcutWithKeyCode:1 modifierFlags:NSAlternateKeyMask];
+ MASShortcut *keyD = [MASShortcut shortcutWithKeyCode:1 modifierFlags:NSControlKeyMask];
+ XCTAssertTrue([keyA isEqual:keyA], @"Shortcut is equal to itself.");
+ XCTAssertTrue([keyA isEqual:[keyA copy]], @"Shortcut is equal to its copy.");
+ XCTAssertFalse([keyA isEqual:keyB], @"Shortcuts not equal when key codes differ.");
+ XCTAssertFalse([keyA isEqual:keyC], @"Shortcuts not equal when modifier flags differ.");
+ XCTAssertTrue([keyA isEqual:keyD], @"Shortcuts are equal when key codes and modifiers are.");
+ XCTAssertFalse([keyA isEqual:@"foo"], @"Shortcut not equal to an object of a different class.");
+}
+
- (void) testShortcutRecorderCompatibility
{
MASShortcut *key = [MASShortcut shortcutWithKeyCode:87 modifierFlags:1048576];