From f02788116c227ade7847124f3052900d01dfe7f7 Mon Sep 17 00:00:00 2001 From: michael starke Date: Wed, 12 Aug 2015 18:12:19 +0200 Subject: [PATCH] Using current KeePassKit, extended Tests Signed-off-by: michael starke --- MacPass.xcodeproj/project.pbxproj | 2 ++ MacPassTests/KPKTestNSCoding.m | 23 +++++++++--- MacPassTests/KPKTestNSCopying.m | 60 ++++++++++++++++++++++++++++--- MacPassTests/KPKTestUndo.m | 21 ++++++++++- 4 files changed, 95 insertions(+), 11 deletions(-) diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 2ca9db2d..07880655 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -949,6 +949,7 @@ 4CC6DB7C17D23DCE002C6091 /* KPKUTIs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KPKUTIs.m; sourceTree = ""; }; 4CC7EA1917807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HNHRoundedTextFieldCellHelper.h; sourceTree = ""; }; 4CC7EA1A17807E7E0089D4F3 /* HNHRoundedTextFieldCellHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HNHRoundedTextFieldCellHelper.m; sourceTree = ""; }; + 4CC97C3B1B7B9D52007D54AA /* KPKNode+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "KPKNode+Private.h"; sourceTree = ""; }; 4CCA7EEC1797866F00B0B55E /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GeneralSettings.strings; sourceTree = ""; }; 4CCA7EEE1797867200B0B55E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/GeneralSettings.strings; sourceTree = ""; }; 4CCA8E9A18D91ED9001A6754 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; @@ -2084,6 +2085,7 @@ 4C591B55178F897A0080B16B /* KPKBinary.h */, 4C591B56178F897A0080B16B /* KPKBinary.m */, 4C39B3F3178FEFAE0027DC7C /* KPKNode.h */, + 4CC97C3B1B7B9D52007D54AA /* KPKNode+Private.h */, 4C39B3F4178FEFAE0027DC7C /* KPKNode.m */, 4C3F28521791EDE800703281 /* KPKErrors.h */, 4C3F28531791EDFD00703281 /* KPKErrors.m */, diff --git a/MacPassTests/KPKTestNSCoding.m b/MacPassTests/KPKTestNSCoding.m index 967d239f..7de5da9d 100644 --- a/MacPassTests/KPKTestNSCoding.m +++ b/MacPassTests/KPKTestNSCoding.m @@ -42,7 +42,6 @@ NSData *data = [self encode:binary]; KPKBinary *decodedBinary = [self decode:data ofClass:[KPKBinary class]]; - XCTAssertTrue([decodedBinary.data isEqualToData:binary.data]); XCTAssertTrue([decodedBinary.name isEqualToString:binary.name]); } @@ -105,20 +104,36 @@ group.title = @"A Group"; group.iconId = 50; group.notes = @"Some notes"; + group.isAutoTypeEnabled = KPKInheritYES; + KPKEntry *entry = [[KPKEntry alloc] init]; entry.title = @"Entry"; entry.url = @"www.url.com"; [group addEntry:entry]; + + KPKGroup *childGroup = [[KPKGroup alloc] init]; + childGroup.title = @"Subgroup"; + childGroup.iconId = 1; + childGroup.isAutoTypeEnabled = KPKInheritNO; + [group addGroup:childGroup]; + + KPKEntry *subEntry = [[KPKEntry alloc] init]; + subEntry.title = @"Subentry"; + subEntry.url = @"www.url.com"; + [childGroup addEntry:subEntry]; NSData *data = [self encode:group]; KPKGroup *decodedGroup = [self decode:data ofClass:[KPKGroup class]]; XCTAssertTrue([group.uuid isEqual:decodedGroup.uuid]); XCTAssertTrue([group.title isEqualToString:decodedGroup.title]); - XCTAssertEqual([group.entries count], [decodedGroup.entries count]); + XCTAssertEqual(group.entries.count, decodedGroup.entries.count); XCTAssertEqual(group.iconId, decodedGroup.iconId); XCTAssertTrue([group.notes isEqualToString:decodedGroup.notes]); - + + XCTAssertEqualObjects(childGroup.parent, group); + XCTAssertEqualObjects(subEntry.parent, childGroup); + KPKEntry *decodedEntry = [decodedGroup entryForUUID:entry.uuid]; XCTAssertNotNil(decodedEntry); XCTAssertEqualObjects(decodedEntry.parent, decodedGroup); @@ -137,11 +152,9 @@ } - (id)decode:(NSData *)data ofClass:(Class)class usingSecureCoding:(BOOL)secureCoding { - if(secureCoding && ![class instancesRespondToSelector:@selector(supportsSecureCoding)]) { return nil; } - if(![class instancesRespondToSelector:@selector(initWithCoder:)]) { return nil; } diff --git a/MacPassTests/KPKTestNSCopying.m b/MacPassTests/KPKTestNSCopying.m index 81913b7c..f2e27a97 100644 --- a/MacPassTests/KPKTestNSCopying.m +++ b/MacPassTests/KPKTestNSCopying.m @@ -7,6 +7,8 @@ // #import +#import "KPKIconTypes.h" +#import "KPKGroup.h" #import "KPKEntry.h" #import "KPKAttribute.h" #import "KPKBinary.h" @@ -54,16 +56,64 @@ entry.title = @"NewTitle"; [entry removeBinary:binary]; - [[entry.customAttributes lastObject] setKey:@"NewCustomKey"]; + ((KPKAttribute *)entry.customAttributes.lastObject).key = @"NewCustomKey"; XCTAssertNotNil(copyEntry, @"Copied Entry cannot be nil"); - XCTAssertTrue([copyEntry.title isEqualToString:@"Title"], @"Titles should match"); - XCTAssertTrue([copyEntry.url isEqualToString:@"URL"], @"URLS should match"); - XCTAssertTrue([copyEntry.binaries count] == 1, @"Binaries should be copied"); + XCTAssertEqualObjects(copyEntry.title, @"Title", @"Titles should match"); + XCTAssertEqualObjects(copyEntry.url, @"URL", @"URLS should match"); + XCTAssertEqual(copyEntry.binaries.count, 1, @"Binareis should be copied"); KPKBinary *copiedBinary = [copyEntry.binaries lastObject]; XCTAssertTrue([copiedBinary.data isEqualToData:binary.data], @"Binary data should match"); - XCTAssertTrue([copiedBinary.name isEqualToString:binary.name], @"Binary names should match"); + XCTAssertTrue([copiedBinary.name isEqualToString:binary.name], @"Binary names should macht"); +} + +- (void)testGroupCopying { + + /* + root + + Group A + + Entry A + + Group A1 + + Group A2 + + Entry B + */ + + KPKGroup *root = [[KPKGroup alloc] init]; + root.title = @"root"; + + KPKGroup *groupA = [[KPKGroup alloc] init]; + groupA.title = @"Group A"; + groupA.isAutoTypeEnabled = KPKInheritNO; + + KPKGroup *groupA1 = [[KPKGroup alloc] init]; + groupA1.title = @"Group A1"; + groupA1.notes = @"Some notes"; + groupA1.iconId = KPKIconASCII; + + KPKGroup *groupA2 = [[KPKGroup alloc] init]; + groupA2.title = @"Group A2"; + groupA2.notes = @"More notes"; + groupA2.isSearchEnabled = KPKInheritYES; + + KPKEntry *entryA = [[KPKEntry alloc] init]; + entryA.title = @"Entry A"; + entryA.url = @"www.url.com"; + KPKEntry *entryB = [[KPKEntry alloc] init]; + entryB.title = @"Entry B"; + entryB.url = @"www.nope.com"; + + + [groupA addEntry:entryA]; + [groupA addGroup:groupA1]; + [groupA addGroup:groupA2]; + [groupA2 addEntry:entryB]; + + [root addGroup:groupA]; + + KPKGroup *copy = [root copy]; + + XCTAssertEqualObjects(root, copy); } @end diff --git a/MacPassTests/KPKTestUndo.m b/MacPassTests/KPKTestUndo.m index 9f3abf7a..76a8266c 100644 --- a/MacPassTests/KPKTestUndo.m +++ b/MacPassTests/KPKTestUndo.m @@ -336,8 +336,27 @@ XCTFail(@"Missing test"); } +- (void)testUpdateToInvalidNode { + XCTAssertFalse(_undoManager.canUndo, @"Undo stack is empty"); + XCTAssertFalse(_undoManager.canRedo, @"Redo stack is empty"); + + KPKEntry *invalid = [_tree createEntry:_tree.root]; + KPKEntry *copy = [_entryA copy]; + XCTAssertThrows([_entryA updateToNode:invalid], @"Updating to a wrong node is not allowed"); + XCTAssertEqualObjects(_entryA, copy, @"Entry a has no changes after updateToNode was called with wrong node argument"); + + XCTAssertFalse(_undoManager.canUndo, @"Undo stack is empty after failed update"); + XCTAssertFalse(_undoManager.canRedo, @"Redo stack is empty after failed update"); + +} + - (void)testUndoRedoEditEntry { - XCTFail(@"Missing test"); + XCTAssertFalse(_undoManager.canUndo, @"Undo stack is empty"); + XCTAssertFalse(_undoManager.canRedo, @"Redo stack is empty"); + + KPKEntry *copy = [_entryA copy]; + copy.title = @"New Title"; + copy.url = @"New URL"; } - (void)testUndoRedoEditGroup {