Skip to content

Commit

Permalink
feat: Add support of W3C key actions (#309)
Browse files Browse the repository at this point in the history
  • Loading branch information
mykola-mokhnach committed Jul 18, 2024
1 parent f783922 commit f83ff9f
Show file tree
Hide file tree
Showing 3 changed files with 518 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,20 +34,22 @@ NSString *_Nullable FBRequireValue(NSDictionary<NSString *, id> *actionItem, NSE
NSNumber *_Nullable FBOptDuration(NSDictionary<NSString *, id> *actionItem, NSNumber *_Nullable defaultValue, NSError **error);

/**
* Checks whether the given key action value is a W3C meta modifier
* Maps W3C meta modifier to XCTest compatible-one
* See https://w3c.github.io/webdriver/#actions
*
* @param value key action value
* @returns YES if the value is a meta modifier
* @returns the mapped modifier value or nil
*/
BOOL FBIsMetaModifier(NSString *value);
NSNumber *_Nullable AMToMetaModifier(NSString *value);

/**
* Maps W3C meta modifier to XCTest compatible-one
* Maps W3C special key to XCTest compatible-one
* See https://w3c.github.io/webdriver/#actions
*
* @param value key action value
* @param reverse whether to reverse the modifier value, so it cancels the previusly set one
* @returns the mapped modifier value or 0 in case of failure
* @returns the mapped modifier value or nil
*/
NSUInteger FBToMetaModifier(NSString *value, BOOL reverse);
NSString *_Nullable AMToSpecialKey(NSString *value);

/**
* Maps W3C button code to a XCTest compatible-one
Expand Down
154 changes: 134 additions & 20 deletions WebDriverAgentMac/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,39 +64,153 @@ BOOL FBIsMetaModifier(NSString *value)
|| charCode == 0xE008;
}

NSUInteger FBToMetaModifier(NSString *value, BOOL reverse)
NSNumber* AMToMetaModifier(NSString *value)
{
if (!FBIsMetaModifier(value)) {
return 0;
if (0 == value.length) {
return nil;
}

unichar charCode = [value characterAtIndex:0];
NSUInteger result = 0;
switch (charCode) {
case 0xE000:
result = XCUIKeyModifierNone;
break;
return @(XCUIKeyModifierNone);
case 0xE03D:
result = XCUIKeyModifierCommand;
break;
return @(XCUIKeyModifierCommand);
case 0xE009:
result = XCUIKeyModifierControl;
break;
return @(XCUIKeyModifierControl);
case 0xE00A:
result = XCUIKeyModifierOption;
break;
return @(XCUIKeyModifierOption);
case 0xE008:
result = XCUIKeyModifierShift;
break;
return @(XCUIKeyModifierShift);
default:
[FBLogger logFmt:@"Skipping the unsupported meta modifier with code %@", @(charCode)];
result = 0;
break;
return nil;
}
}

NSString* AMToSpecialKey(NSString *value)
{
if (0 == [value length]) {
return nil;
}
if (reverse) {
result = ~result;

unichar charCode = [value characterAtIndex:0];
switch (charCode) {
case 0xE000:
return @"";
case 0xE002:
return XCUIKeyboardKeyHelp;
case 0xE003:
return XCUIKeyboardKeyDelete;
case 0xE004:
return XCUIKeyboardKeyTab;
case 0xE005:
return XCUIKeyboardKeyClear;
case 0xE006:
return XCUIKeyboardKeyReturn;
case 0xE007:
return XCUIKeyboardKeyEnter;
case 0xE00C:
return XCUIKeyboardKeyEscape;
case 0xE00D:
return @" ";
case 0xE00E:
case 0xE054:
return XCUIKeyboardKeyPageUp;
case 0xE00F:
case 0xE055:
return XCUIKeyboardKeyPageDown;
case 0xE010:
case 0xE056:
return XCUIKeyboardKeyEnd;
case 0xE011:
case 0xE057:
return XCUIKeyboardKeyHome;
case 0xE012:
case 0xE058:
return XCUIKeyboardKeyLeftArrow;
case 0xE013:
case 0xE059:
return XCUIKeyboardKeyUpArrow;
case 0xE014:
case 0xE05A:
return XCUIKeyboardKeyRightArrow;
case 0xE015:
case 0xE05B:
return XCUIKeyboardKeyDownArrow;
case 0xE017:
case 0xE05D:
return XCUIKeyboardKeyForwardDelete;
case 0xE018:
return @";";
case 0xE019:
return @"=";
case 0xE01A:
return @"0";
case 0xE01B:
return @"1";
case 0xE01C:
return @"2";
case 0xE01D:
return @"3";
case 0xE01E:
return @"4";
case 0xE01F:
return @"5";
case 0xE020:
return @"6";
case 0xE021:
return @"7";
case 0xE022:
return @"8";
case 0xE023:
return @"9";
case 0xE024:
return @"*";
case 0xE025:
return @"+";
case 0xE026:
return @",";
case 0xE027:
return @"-";
case 0xE028:
return @".";
case 0xE029:
return @"/";
case 0xE031:
return XCUIKeyboardKeyF1;
case 0xE032:
return XCUIKeyboardKeyF2;
case 0xE033:
return XCUIKeyboardKeyF3;
case 0xE034:
return XCUIKeyboardKeyF4;
case 0xE035:
return XCUIKeyboardKeyF5;
case 0xE036:
return XCUIKeyboardKeyF6;
case 0xE037:
return XCUIKeyboardKeyF7;
case 0xE038:
return XCUIKeyboardKeyF8;
case 0xE039:
return XCUIKeyboardKeyF9;
case 0xE03A:
return XCUIKeyboardKeyF10;
case 0xE03B:
return XCUIKeyboardKeyF11;
case 0xE03C:
return XCUIKeyboardKeyF12;
case 0xE050:
return XCUIKeyboardKeyShift;
case 0xE051:
return XCUIKeyboardKeyControl;
case 0xE052:
return XCUIKeyboardKeyOption;
case 0xE053:
return XCUIKeyboardKeyCommand;
default:
return charCode >= 0xE000 && charCode <= 0xE05D ? @"" : nil;
}
return result;
}

NSUInteger AMToXCTestButtonCode(NSUInteger w3cButtonCode)
Expand Down
Loading

0 comments on commit f83ff9f

Please sign in to comment.