| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /**
- * Copyright (c) 2015-present, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
- #import "FBElementTypeTransformer.h"
- #import "FBExceptions.h"
- @implementation FBElementTypeTransformer
- static NSDictionary *ElementTypeToStringMapping;
- static NSDictionary *StringToElementTypeMapping;
- static NSString const *FB_ELEMENT_TYPE_PREFIX = @"XCUIElementType";
- + (void)createMapping
- {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- ElementTypeToStringMapping =
- @{
- @0 : @"XCUIElementTypeAny",
- @1 : @"XCUIElementTypeOther",
- @2 : @"XCUIElementTypeApplication",
- @3 : @"XCUIElementTypeGroup",
- @4 : @"XCUIElementTypeWindow",
- @5 : @"XCUIElementTypeSheet",
- @6 : @"XCUIElementTypeDrawer",
- @7 : @"XCUIElementTypeAlert",
- @8 : @"XCUIElementTypeDialog",
- @9 : @"XCUIElementTypeButton",
- @10 : @"XCUIElementTypeRadioButton",
- @11 : @"XCUIElementTypeRadioGroup",
- @12 : @"XCUIElementTypeCheckBox",
- @13 : @"XCUIElementTypeDisclosureTriangle",
- @14 : @"XCUIElementTypePopUpButton",
- @15 : @"XCUIElementTypeComboBox",
- @16 : @"XCUIElementTypeMenuButton",
- @17 : @"XCUIElementTypeToolbarButton",
- @18 : @"XCUIElementTypePopover",
- @19 : @"XCUIElementTypeKeyboard",
- @20 : @"XCUIElementTypeKey",
- @21 : @"XCUIElementTypeNavigationBar",
- @22 : @"XCUIElementTypeTabBar",
- @23 : @"XCUIElementTypeTabGroup",
- @24 : @"XCUIElementTypeToolbar",
- @25 : @"XCUIElementTypeStatusBar",
- @26 : @"XCUIElementTypeTable",
- @27 : @"XCUIElementTypeTableRow",
- @28 : @"XCUIElementTypeTableColumn",
- @29 : @"XCUIElementTypeOutline",
- @30 : @"XCUIElementTypeOutlineRow",
- @31 : @"XCUIElementTypeBrowser",
- @32 : @"XCUIElementTypeCollectionView",
- @33 : @"XCUIElementTypeSlider",
- @34 : @"XCUIElementTypePageIndicator",
- @35 : @"XCUIElementTypeProgressIndicator",
- @36 : @"XCUIElementTypeActivityIndicator",
- @37 : @"XCUIElementTypeSegmentedControl",
- @38 : @"XCUIElementTypePicker",
- @39 : @"XCUIElementTypePickerWheel",
- @40 : @"XCUIElementTypeSwitch",
- @41 : @"XCUIElementTypeToggle",
- @42 : @"XCUIElementTypeLink",
- @43 : @"XCUIElementTypeImage",
- @44 : @"XCUIElementTypeIcon",
- @45 : @"XCUIElementTypeSearchField",
- @46 : @"XCUIElementTypeScrollView",
- @47 : @"XCUIElementTypeScrollBar",
- @48 : @"XCUIElementTypeStaticText",
- @49 : @"XCUIElementTypeTextField",
- @50 : @"XCUIElementTypeSecureTextField",
- @51 : @"XCUIElementTypeDatePicker",
- @52 : @"XCUIElementTypeTextView",
- @53 : @"XCUIElementTypeMenu",
- @54 : @"XCUIElementTypeMenuItem",
- @55 : @"XCUIElementTypeMenuBar",
- @56 : @"XCUIElementTypeMenuBarItem",
- @57 : @"XCUIElementTypeMap",
- @58 : @"XCUIElementTypeWebView",
- @59 : @"XCUIElementTypeIncrementArrow",
- @60 : @"XCUIElementTypeDecrementArrow",
- @61 : @"XCUIElementTypeTimeline",
- @62 : @"XCUIElementTypeRatingIndicator",
- @63 : @"XCUIElementTypeValueIndicator",
- @64 : @"XCUIElementTypeSplitGroup",
- @65 : @"XCUIElementTypeSplitter",
- @66 : @"XCUIElementTypeRelevanceIndicator",
- @67 : @"XCUIElementTypeColorWell",
- @68 : @"XCUIElementTypeHelpTag",
- @69 : @"XCUIElementTypeMatte",
- @70 : @"XCUIElementTypeDockItem",
- @71 : @"XCUIElementTypeRuler",
- @72 : @"XCUIElementTypeRulerMarker",
- @73 : @"XCUIElementTypeGrid",
- @74 : @"XCUIElementTypeLevelIndicator",
- @75 : @"XCUIElementTypeCell",
- @76 : @"XCUIElementTypeLayoutArea",
- @77 : @"XCUIElementTypeLayoutItem",
- @78 : @"XCUIElementTypeHandle",
- @79 : @"XCUIElementTypeStepper",
- @80 : @"XCUIElementTypeTab",
- @81 : @"XCUIElementTypeTouchBar",
- @82 : @"XCUIElementTypeStatusItem",
- // !!! This mapping should be updated if there are changes after each new XCTest release
- };
- NSMutableDictionary *swappedMapping = [NSMutableDictionary dictionary];
- [ElementTypeToStringMapping enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
- swappedMapping[obj] = key;
- }];
- StringToElementTypeMapping = swappedMapping.copy;
- });
- }
- + (XCUIElementType)elementTypeWithTypeName:(NSString *)typeName
- {
- [self createMapping];
- NSNumber *type = StringToElementTypeMapping[typeName];
- if (nil == type) {
- if ([typeName hasPrefix:(NSString *)FB_ELEMENT_TYPE_PREFIX] && typeName.length > FB_ELEMENT_TYPE_PREFIX.length) {
- // Consider the element type is something new and has to be added into ElementTypeToStringMapping
- return XCUIElementTypeOther;
- }
- NSString *reason = [NSString stringWithFormat:@"Invalid argument for class used '%@'. Did you mean %@%@?", typeName, FB_ELEMENT_TYPE_PREFIX, typeName];
- @throw [NSException exceptionWithName:FBInvalidArgumentException reason:reason userInfo:@{}];
- }
- return (XCUIElementType) type.unsignedIntegerValue;
- }
- + (NSString *)stringWithElementType:(XCUIElementType)type
- {
- [self createMapping];
- NSString *typeName = ElementTypeToStringMapping[@(type)];
- return nil == typeName
- // Consider the type name is something new and has to be added into ElementTypeToStringMapping
- ? [NSString stringWithFormat:@"%@Other", FB_ELEMENT_TYPE_PREFIX]
- : typeName;
- }
- + (NSString *)shortStringWithElementType:(XCUIElementType)type
- {
- return [[self stringWithElementType:type] stringByReplacingOccurrencesOfString:(NSString *)FB_ELEMENT_TYPE_PREFIX withString:@""];
- }
- @end
|