appium-mac2-driver 4.1.1 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/WebDriverAgentMac/IntegrationTests/AMFindElementTests.m +165 -2
  3. package/WebDriverAgentMac/IntegrationTests/AMIntegrationTestCase.h +11 -0
  4. package/WebDriverAgentMac/IntegrationTests/AMIntegrationTestCase.m +33 -0
  5. package/WebDriverAgentMac/IntegrationTests/AMW3CActionsTests.m +7 -9
  6. package/WebDriverAgentMac/WebDriverAgent/Base.lproj/Main.storyboard +16 -1
  7. package/WebDriverAgentMac/WebDriverAgent/WebViewController.h +21 -0
  8. package/WebDriverAgentMac/WebDriverAgent/WebViewController.m +49 -0
  9. package/WebDriverAgentMac/WebDriverAgentLib/Categories/NSPredicate+FBFormat.m +80 -0
  10. package/WebDriverAgentMac/WebDriverAgentLib/Categories/XCUIElement+AMAttributes.h +29 -1
  11. package/WebDriverAgentMac/WebDriverAgentLib/Categories/XCUIElement+AMAttributes.m +66 -15
  12. package/WebDriverAgentMac/WebDriverAgentLib/Routing/AMHTTPServer.h +84 -0
  13. package/WebDriverAgentMac/WebDriverAgentLib/Routing/AMHTTPServer.m +493 -0
  14. package/WebDriverAgentMac/WebDriverAgentLib/Routing/AMTCPSocket.h +109 -0
  15. package/WebDriverAgentMac/WebDriverAgentLib/Routing/AMTCPSocket.m +235 -0
  16. package/WebDriverAgentMac/WebDriverAgentLib/Routing/FBWebServer.h +1 -1
  17. package/WebDriverAgentMac/WebDriverAgentLib/Routing/FBWebServer.m +9 -21
  18. package/WebDriverAgentMac/WebDriverAgentLib/Routing/RouteRequest.h +36 -0
  19. package/WebDriverAgentMac/WebDriverAgentLib/Routing/RouteRequest.m +33 -0
  20. package/WebDriverAgentMac/WebDriverAgentLib/Routing/RouteResponse.h +37 -0
  21. package/WebDriverAgentMac/WebDriverAgentLib/Routing/RouteResponse.m +62 -0
  22. package/WebDriverAgentMac/WebDriverAgentLib/Utilities/AMSnapshotUtils.h +22 -0
  23. package/WebDriverAgentMac/WebDriverAgentLib/Utilities/AMSnapshotUtils.m +5 -11
  24. package/WebDriverAgentMac/WebDriverAgentLib/Utilities/FBElementUtils.m +7 -1
  25. package/WebDriverAgentMac/WebDriverAgentMac.xcodeproj/project.pbxproj +46 -180
  26. package/npm-shrinkwrap.json +75 -146
  27. package/package.json +2 -1
  28. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.h +0 -1226
  29. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.m +0 -8513
  30. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.h +0 -1036
  31. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m +0 -5632
  32. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.h +0 -12
  33. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.m +0 -88
  34. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.h +0 -56
  35. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.m +0 -106
  36. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.h +0 -107
  37. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.m +0 -2238
  38. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPLogging.h +0 -122
  39. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.h +0 -48
  40. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.m +0 -114
  41. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPResponse.h +0 -149
  42. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.h +0 -200
  43. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.m +0 -720
  44. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.h +0 -13
  45. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.m +0 -83
  46. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.h +0 -9
  47. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.m +0 -40
  48. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.h +0 -13
  49. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.m +0 -84
  50. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.h +0 -18
  51. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.m +0 -11
  52. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.h +0 -16
  53. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.m +0 -50
  54. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.h +0 -20
  55. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.m +0 -66
  56. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.h +0 -5
  57. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.m +0 -142
  58. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h +0 -55
  59. package/WebDriverAgentMac/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.m +0 -288
@@ -1,288 +0,0 @@
1
- #import "RoutingHTTPServer.h"
2
- #import "RoutingConnection.h"
3
- #import "Route.h"
4
-
5
- #pragma clang diagnostic ignored "-Wdirect-ivar-access"
6
- #pragma clang diagnostic ignored "-Widiomatic-parentheses"
7
-
8
- @implementation RoutingHTTPServer {
9
- NSMutableDictionary *routes;
10
- NSMutableDictionary *defaultHeaders;
11
- NSMutableDictionary *mimeTypes;
12
- dispatch_queue_t routeQueue;
13
- }
14
-
15
- @synthesize defaultHeaders;
16
-
17
- - (id)init {
18
- if (self = [super init]) {
19
- connectionClass = [RoutingConnection self];
20
- routes = [[NSMutableDictionary alloc] init];
21
- defaultHeaders = [[NSMutableDictionary alloc] init];
22
- [self setupMIMETypes];
23
- }
24
- return self;
25
- }
26
-
27
- #if !OS_OBJECT_USE_OBJC_RETAIN_RELEASE
28
- - (void)dealloc {
29
- if (routeQueue)
30
- dispatch_release(routeQueue);
31
- }
32
- #endif
33
-
34
- - (void)setDefaultHeaders:(NSDictionary *)headers {
35
- if (headers) {
36
- defaultHeaders = [headers mutableCopy];
37
- } else {
38
- defaultHeaders = [[NSMutableDictionary alloc] init];
39
- }
40
- }
41
-
42
- - (void)setDefaultHeader:(NSString *)field value:(NSString *)value {
43
- [defaultHeaders setObject:value forKey:field];
44
- }
45
-
46
- - (dispatch_queue_t)routeQueue {
47
- return routeQueue;
48
- }
49
-
50
- - (void)setRouteQueue:(dispatch_queue_t)queue {
51
- #if !OS_OBJECT_USE_OBJC_RETAIN_RELEASE
52
- if (queue)
53
- dispatch_retain(queue);
54
-
55
- if (routeQueue)
56
- dispatch_release(routeQueue);
57
- #endif
58
-
59
- routeQueue = queue;
60
- }
61
-
62
- - (NSDictionary *)mimeTypes {
63
- return mimeTypes;
64
- }
65
-
66
- - (void)setMIMETypes:(NSDictionary *)types {
67
- NSMutableDictionary *newTypes;
68
- if (types) {
69
- newTypes = [types mutableCopy];
70
- } else {
71
- newTypes = [[NSMutableDictionary alloc] init];
72
- }
73
-
74
- mimeTypes = newTypes;
75
- }
76
-
77
- - (void)setMIMEType:(NSString *)theType forExtension:(NSString *)ext {
78
- [mimeTypes setObject:theType forKey:ext];
79
- }
80
-
81
- - (NSString *)mimeTypeForPath:(NSString *)path {
82
- NSString *ext = [[path pathExtension] lowercaseString];
83
- if (!ext || [ext length] < 1)
84
- return nil;
85
-
86
- return [mimeTypes objectForKey:ext];
87
- }
88
-
89
- - (void)get:(NSString *)path withBlock:(RequestHandler)block {
90
- [self handleMethod:@"GET" withPath:path block:block];
91
- }
92
-
93
- - (void)post:(NSString *)path withBlock:(RequestHandler)block {
94
- [self handleMethod:@"POST" withPath:path block:block];
95
- }
96
-
97
- - (void)put:(NSString *)path withBlock:(RequestHandler)block {
98
- [self handleMethod:@"PUT" withPath:path block:block];
99
- }
100
-
101
- - (void)delete:(NSString *)path withBlock:(RequestHandler)block {
102
- [self handleMethod:@"DELETE" withPath:path block:block];
103
- }
104
-
105
- - (void)handleMethod:(NSString *)method withPath:(NSString *)path block:(RequestHandler)block {
106
- Route *route = [self routeWithPath:path];
107
- route.handler = block;
108
-
109
- [self addRoute:route forMethod:method];
110
- }
111
-
112
- - (void)handleMethod:(NSString *)method withPath:(NSString *)path target:(id)target selector:(SEL)selector {
113
- Route *route = [self routeWithPath:path];
114
- route.target = target;
115
- route.selector = selector;
116
-
117
- [self addRoute:route forMethod:method];
118
- }
119
-
120
- - (void)addRoute:(Route *)route forMethod:(NSString *)method {
121
- method = [method uppercaseString];
122
- NSMutableArray *methodRoutes = [routes objectForKey:method];
123
- if (methodRoutes == nil) {
124
- methodRoutes = [NSMutableArray array];
125
- [routes setObject:methodRoutes forKey:method];
126
- }
127
-
128
- [methodRoutes addObject:route];
129
-
130
- // Define a HEAD route for all GET routes
131
- if ([method isEqualToString:@"GET"]) {
132
- [self addRoute:route forMethod:@"HEAD"];
133
- }
134
- }
135
-
136
- - (Route *)routeWithPath:(NSString *)path {
137
- Route *route = [[Route alloc] init];
138
- NSMutableArray *keys = [NSMutableArray array];
139
-
140
- if ([path length] > 2 && [path characterAtIndex:0] == '{') {
141
- // This is a custom regular expression, just remove the {}
142
- path = [path substringWithRange:NSMakeRange(1, [path length] - 2)];
143
- } else {
144
- NSRegularExpression *regex = nil;
145
-
146
- // Escape regex characters
147
- regex = [NSRegularExpression regularExpressionWithPattern:@"[.+()]" options:0 error:nil];
148
- path = [regex stringByReplacingMatchesInString:path options:0 range:NSMakeRange(0, path.length) withTemplate:@"\\\\$0"];
149
-
150
- // Parse any :parameters and * in the path
151
- regex = [NSRegularExpression regularExpressionWithPattern:@"(:(\\w+)|\\*)"
152
- options:0
153
- error:nil];
154
- NSMutableString *regexPath = [NSMutableString stringWithString:path];
155
- __block NSInteger diff = 0;
156
- [regex enumerateMatchesInString:path options:0 range:NSMakeRange(0, path.length)
157
- usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
158
- NSRange replacementRange = NSMakeRange(diff + result.range.location, result.range.length);
159
- NSString *replacementString;
160
-
161
- NSString *capturedString = [path substringWithRange:result.range];
162
- if ([capturedString isEqualToString:@"*"]) {
163
- [keys addObject:@"wildcards"];
164
- replacementString = @"(.*?)";
165
- } else {
166
- NSString *keyString = [path substringWithRange:[result rangeAtIndex:2]];
167
- [keys addObject:keyString];
168
- replacementString = @"([^/]+)";
169
- }
170
-
171
- [regexPath replaceCharactersInRange:replacementRange withString:replacementString];
172
- diff += replacementString.length - result.range.length;
173
- }];
174
-
175
- path = [NSString stringWithFormat:@"^%@$", regexPath];
176
- }
177
-
178
- route.regex = [NSRegularExpression regularExpressionWithPattern:path options:NSRegularExpressionCaseInsensitive error:nil];
179
- if ([keys count] > 0) {
180
- route.keys = keys;
181
- }
182
-
183
- return route;
184
- }
185
-
186
- - (BOOL)supportsMethod:(NSString *)method {
187
- return ([routes objectForKey:method] != nil);
188
- }
189
-
190
- - (void)handleRoute:(Route *)route withRequest:(RouteRequest *)request response:(RouteResponse *)response {
191
- if (route.handler) {
192
- route.handler(request, response);
193
- } else {
194
- #pragma clang diagnostic push
195
- #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
196
- [route.target performSelector:route.selector withObject:request withObject:response];
197
- #pragma clang diagnostic pop
198
- }
199
- }
200
-
201
- - (RouteResponse *)routeMethod:(NSString *)method withPath:(NSString *)path parameters:(NSDictionary *)params request:(HTTPMessage *)httpMessage connection:(HTTPConnection *)connection {
202
- NSMutableArray *methodRoutes = [routes objectForKey:method];
203
- if (methodRoutes == nil)
204
- return nil;
205
-
206
- for (Route *route in methodRoutes) {
207
- NSTextCheckingResult *result = [route.regex firstMatchInString:path options:0 range:NSMakeRange(0, path.length)];
208
- if (!result)
209
- continue;
210
-
211
- // The first range is all of the text matched by the regex.
212
- NSUInteger captureCount = [result numberOfRanges];
213
-
214
- if (route.keys) {
215
- // Add the route's parameters to the parameter dictionary, accounting for
216
- // the first range containing the matched text.
217
- if (captureCount == [route.keys count] + 1) {
218
- NSMutableDictionary *newParams = [params mutableCopy];
219
- NSUInteger index = 1;
220
- BOOL firstWildcard = YES;
221
- for (NSString *key in route.keys) {
222
- NSString *capture = [path substringWithRange:[result rangeAtIndex:index]];
223
- if ([key isEqualToString:@"wildcards"]) {
224
- NSMutableArray *wildcards = [newParams objectForKey:key];
225
- if (firstWildcard) {
226
- // Create a new array and replace any existing object with the same key
227
- wildcards = [NSMutableArray array];
228
- [newParams setObject:wildcards forKey:key];
229
- firstWildcard = NO;
230
- }
231
- [wildcards addObject:capture];
232
- } else {
233
- [newParams setObject:capture forKey:key];
234
- }
235
- index++;
236
- }
237
- params = newParams;
238
- }
239
- } else if (captureCount > 1) {
240
- // For custom regular expressions place the anonymous captures in the captures parameter
241
- NSMutableDictionary *newParams = [params mutableCopy];
242
- NSMutableArray *captures = [NSMutableArray array];
243
- for (NSUInteger i = 1; i < captureCount; i++) {
244
- [captures addObject:[path substringWithRange:[result rangeAtIndex:i]]];
245
- }
246
- [newParams setObject:captures forKey:@"captures"];
247
- params = newParams;
248
- }
249
-
250
- RouteRequest *request = [[RouteRequest alloc] initWithHTTPMessage:httpMessage parameters:params];
251
- RouteResponse *response = [[RouteResponse alloc] initWithConnection:connection];
252
- if (!routeQueue) {
253
- [self handleRoute:route withRequest:request response:response];
254
- } else {
255
- // Process the route on the specified queue
256
- dispatch_sync(routeQueue, ^{
257
- @autoreleasepool {
258
- [self handleRoute:route withRequest:request response:response];
259
- }
260
- });
261
- }
262
- return response;
263
- }
264
-
265
- return nil;
266
- }
267
-
268
- - (void)setupMIMETypes {
269
- mimeTypes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
270
- @"application/x-javascript", @"js",
271
- @"image/gif", @"gif",
272
- @"image/jpeg", @"jpg",
273
- @"image/jpeg", @"jpeg",
274
- @"image/png", @"png",
275
- @"image/svg+xml", @"svg",
276
- @"image/tiff", @"tif",
277
- @"image/tiff", @"tiff",
278
- @"image/x-icon", @"ico",
279
- @"image/x-ms-bmp", @"bmp",
280
- @"text/css", @"css",
281
- @"text/html", @"html",
282
- @"text/html", @"htm",
283
- @"text/plain", @"txt",
284
- @"text/xml", @"xml",
285
- nil];
286
- }
287
-
288
- @end