mirror of
https://github.com/MacPass/MacPass.git
synced 2025-12-13 22:52:26 +00:00
exposed private API for better testing on MPPickcharsParser.
Parser now support default conversion to down arrow presses. Special format handling currently not supported
This commit is contained in:
@@ -326,6 +326,7 @@
|
||||
4C0728BB17B5B7F7005A7DD9 /* MPPasswordEditWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPPasswordEditWindowController.h; sourceTree = "<group>"; };
|
||||
4C0728BC17B5B7F7005A7DD9 /* MPPasswordEditWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPPasswordEditWindowController.m; sourceTree = "<group>"; };
|
||||
4C0728BE17B68ED0005A7DD9 /* SavePanelAccessoryView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SavePanelAccessoryView.xib; sourceTree = "<group>"; };
|
||||
4C088C401FD9A42800F92502 /* MPPickcharsParser_Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPPickcharsParser_Private.h; sourceTree = "<group>"; };
|
||||
4C0949571FD6B89B004F2971 /* NSUserNotification+MPAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSUserNotification+MPAdditions.h"; sourceTree = "<group>"; };
|
||||
4C0949581FD6B89B004F2971 /* NSUserNotification+MPAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSUserNotification+MPAdditions.m"; sourceTree = "<group>"; };
|
||||
4C09495A1FD6E510004F2971 /* MPAddCustomFieldContextMenuDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPAddCustomFieldContextMenuDelegate.h; sourceTree = "<group>"; };
|
||||
@@ -1135,7 +1136,6 @@
|
||||
4C45FB1E178E09ED0010007D /* MacPassTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
4C8F0C721FCF1B7A00BE157F /* MPTestPickcharsParser.m */,
|
||||
4CCFA12C1BF0CC7A0078E0A1 /* Databases */,
|
||||
4C10207E1B750E2F00BFCD59 /* MPTestAutotype.m */,
|
||||
4C8DEAA11C314D2C00D24C32 /* MPTestAutotypeDelay.m */,
|
||||
@@ -1143,6 +1143,7 @@
|
||||
4C45FB2F178E0CE20010007D /* MPTestDocument.m */,
|
||||
4C6BC65F1A36717E00BDDF3D /* MPDatabaseSearch.m */,
|
||||
4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */,
|
||||
4C8F0C721FCF1B7A00BE157F /* MPTestPickcharsParser.m */,
|
||||
4C45FB1F178E09ED0010007D /* Supporting Files */,
|
||||
);
|
||||
path = MacPassTests;
|
||||
@@ -1418,6 +1419,7 @@
|
||||
4C1F7FA01E3A12E600D6A40E /* MPModifiedKey.h */,
|
||||
4C1F7FA11E3A12E600D6A40E /* MPModifiedKey.m */,
|
||||
4C8F0C6F1FCEF91400BE157F /* MPPickcharsParser.h */,
|
||||
4C088C401FD9A42800F92502 /* MPPickcharsParser_Private.h */,
|
||||
4C8F0C701FCEF91400BE157F /* MPPickcharsParser.m */,
|
||||
);
|
||||
name = Autotype;
|
||||
|
||||
@@ -7,18 +7,49 @@
|
||||
//
|
||||
|
||||
#import "MPPickcharsParser.h"
|
||||
#import "MPPickcharsParser_Private.h"
|
||||
|
||||
#import "NSString+MPComposedCharacterAdditions.h"
|
||||
|
||||
#import <KeePassKit/KeePassKit.h>
|
||||
|
||||
@interface MPPickcharsParser ()
|
||||
typedef NS_ENUM(NSInteger, MPPickCharOffsetType) {
|
||||
MPPickCharOffsetTypeNone,
|
||||
MPPickCharOffsetTypeCharacter,
|
||||
MPPickCharOffsetTypeNumber,
|
||||
};
|
||||
|
||||
@property NSUInteger pickCount; // count to pick
|
||||
@property NSUInteger checkboxOffset;
|
||||
@property BOOL convertToDownArrows;
|
||||
@property BOOL hideCharacters;
|
||||
@property (copy) NSString *checkboxFormat;
|
||||
struct MPPickCharOffset {
|
||||
MPPickCharOffsetType type;
|
||||
NSUInteger offset;
|
||||
};
|
||||
typedef struct MPPickCharOffset MPPickCharOffset;
|
||||
|
||||
@end
|
||||
MPPickCharOffset MPMakePickCharCharacterOffset(NSUInteger offset) {
|
||||
MPPickCharOffset offsetStruct = {MPPickCharOffsetTypeCharacter, offset};
|
||||
return offsetStruct;
|
||||
}
|
||||
MPPickCharOffset MPMakePickCharNumberOffset(NSUInteger offset) {
|
||||
MPPickCharOffset offsetStruct = {MPPickCharOffsetTypeNumber, offset};
|
||||
return offsetStruct;
|
||||
}
|
||||
|
||||
MPPickCharOffset MPMakeInvalidPickCharOffset(void) {
|
||||
MPPickCharOffset offset = {MPPickCharOffsetTypeNone,0};
|
||||
return offset;
|
||||
}
|
||||
|
||||
BOOL MPIsValidPickCharOffset(MPPickCharOffset offset) {
|
||||
return (offset.type != MPPickCharOffsetTypeNone);
|
||||
}
|
||||
|
||||
NSInteger numberOffset(MPPickCharOffset offset) {
|
||||
return (offset.type == MPPickCharOffsetTypeNumber ? offset.offset : 0);
|
||||
}
|
||||
|
||||
NSInteger characterOffset(MPPickCharOffset offset) {
|
||||
return (offset.type == MPPickCharOffsetTypeCharacter ? offset.offset : 0);
|
||||
}
|
||||
|
||||
@implementation MPPickcharsParser
|
||||
|
||||
@@ -43,12 +74,50 @@
|
||||
if(!self.convertToDownArrows) {
|
||||
return string;
|
||||
}
|
||||
for(NSString *character in string.composedCharacters) {
|
||||
|
||||
NSMutableString *mutableString = [[NSMutableString alloc] init];
|
||||
BOOL isFirst = NO;
|
||||
for(NSString *substring in string.composedCharacters) {
|
||||
if(substring.length != 1) {
|
||||
NSLog(@"Pickchars: Unsupported character %@ for conversion to down arrows, skipping!", substring);
|
||||
continue;
|
||||
}
|
||||
return nil;
|
||||
MPPickCharOffset offset = MPMakeInvalidPickCharOffset();
|
||||
unichar character = [substring characterAtIndex:0];
|
||||
if(character >= '0' && character <= '9') {
|
||||
offset = MPMakePickCharNumberOffset(character - '0');
|
||||
}
|
||||
else if(character >= 'a' && character <= 'z') {
|
||||
offset = MPMakePickCharCharacterOffset(character - 'a');
|
||||
}
|
||||
else if(character >= 'A' && character <= 'Z') {
|
||||
offset = MPMakePickCharCharacterOffset(character - 'A');
|
||||
}
|
||||
[self _appendKeyCommandsForOffset:offset toString:mutableString];
|
||||
}
|
||||
return [mutableString copy];
|
||||
}
|
||||
|
||||
- (void)_appendKeyCommandsForOffset:(MPPickCharOffset)offset toString:(NSMutableString *)string {
|
||||
if(!MPIsValidPickCharOffset(offset)) {
|
||||
return;
|
||||
}
|
||||
NSUInteger actualOffset = self.checkboxOffset;
|
||||
switch(offset.type) {
|
||||
case MPPickCharOffsetTypeNumber:
|
||||
actualOffset += offset.offset;
|
||||
break;
|
||||
case MPPickCharOffsetTypeCharacter:
|
||||
actualOffset += offset.offset;
|
||||
break;
|
||||
case MPPickCharOffsetTypeNone:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* todo respect format definition */
|
||||
while (actualOffset--) {
|
||||
[string appendString:kKPKAutotypeDown];
|
||||
}
|
||||
}
|
||||
/*
|
||||
{PICKCHAR:Field:Options}
|
||||
|
||||
|
||||
19
MacPass/MPPickcharsParser_Private.h
Normal file
19
MacPass/MPPickcharsParser_Private.h
Normal file
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// MPPickcharsParser_Private.h
|
||||
// MacPass
|
||||
//
|
||||
// Created by Michael Starke on 07.12.17.
|
||||
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
|
||||
//
|
||||
|
||||
#import "MPPickcharsParser.h"
|
||||
|
||||
@interface MPPickcharsParser ()
|
||||
|
||||
@property NSUInteger pickCount; // count to pick
|
||||
@property NSUInteger checkboxOffset;
|
||||
@property BOOL convertToDownArrows;
|
||||
@property BOOL hideCharacters;
|
||||
@property (copy) NSString *checkboxFormat;
|
||||
|
||||
@end
|
||||
@@ -7,7 +7,9 @@
|
||||
//
|
||||
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#import "MPPickcharsParser.h"
|
||||
#import "MPPickcharsParser_Private.h"
|
||||
|
||||
@interface MPTestPickcharsParser : XCTestCase
|
||||
|
||||
@@ -34,4 +36,22 @@
|
||||
XCTAssertEqualObjects(@"0A", parser.checkboxFormat);
|
||||
}
|
||||
|
||||
- (void)testConvertToDownArrows {
|
||||
MPPickcharsParser *parser = [[MPPickcharsParser alloc] init];
|
||||
parser.convertToDownArrows = YES;
|
||||
NSString *result = [parser processPickedString:@"105"]; // 1 + 0 + 5 = 6
|
||||
XCTAssertEqualObjects(result, @"{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}");
|
||||
result = [parser processPickedString:@"ccb"]; // 2 + 2 + 1 = 5
|
||||
XCTAssertEqualObjects(result, @"{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}");
|
||||
result = [parser processPickedString:@"CCB"]; // 2 + 2 + 1 = 5
|
||||
XCTAssertEqualObjects(result, @"{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}");
|
||||
parser.checkboxOffset = 2;
|
||||
result = [parser processPickedString:@"105"]; // 1 + 0 + 5 + (3 * 2) = 6 + 6 = 12
|
||||
XCTAssertEqualObjects(result, @"{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}");
|
||||
result = [parser processPickedString:@"ccb"]; // 2 + 2 + 1 + (2 * 2) = 5 + 6 = 12
|
||||
XCTAssertEqualObjects(result, @"{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user