This repository was archived by the owner on Oct 31, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathReporter.m
More file actions
121 lines (100 loc) · 3.79 KB
/
Reporter.m
File metadata and controls
121 lines (100 loc) · 3.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//
// Copyright 2004-present Facebook. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "Reporter.h"
#import <objc/runtime.h>
#import "ReporterEvents.h"
#import "TaskUtil.h"
@implementation Reporter
+ (void)readFromInput:(NSFileHandle *)inputHandle
andOutputTo:(NSFileHandle *)outputHandle
{
Reporter *reporter = [[[self class] alloc] init];
reporter->_outputHandle = outputHandle;
[reporter willBeginReporting];
int fildes[1] = {inputHandle.fileDescriptor};
ReadOutputsAndFeedOuputLinesToBlockOnQueue(fildes, 1, ^(int fd, NSString *line){
if (line.length == 0) {
return;
}
@autoreleasepool {
NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:[line dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&error];
NSCAssert(dict != nil, @"Failed to decode JSON '%@' with error: %@", line, [error localizedFailureReason]);
[reporter handleEvent:dict];
}
}, NULL, NULL, YES);
[reporter didFinishReporting];
}
- (void)willBeginReporting
{
// Subclass should implement.
}
- (void)didFinishReporting
{
// Subclass should implement.
}
- (void)parseAndHandleEvent:(NSString *)line
{
NSError *error = nil;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:[line dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:&error];
if (dict != nil) {
[self handleEvent:dict];
}
}
- (void)handleEvent:(NSDictionary *)eventDict
{
NSAssert(([eventDict count] > 0), @"Event was empty.");
NSString *event = eventDict[kReporter_Event_Key];
NSAssert(event != nil && [event length] > 0, @"Event name was empty for event: %@", eventDict);
NSMutableString *selectorName = [NSMutableString string];
int i = 0;
for (NSString *part in [event componentsSeparatedByString:@"-"]) {
if (i++ == 0) {
[selectorName appendString:[part lowercaseString]];
} else {
[selectorName appendString:[[part lowercaseString] capitalizedString]];
}
}
[selectorName appendString:@":"];
SEL sel = sel_registerName([selectorName UTF8String]);
if ([self respondsToSelector:sel]) {
((void (*)(id, SEL, NSDictionary *))[self methodForSelector:sel])(self, sel, eventDict);
}
}
- (void)beginAction:(NSDictionary *)event {}
- (void)endAction:(NSDictionary *)event {}
- (void)beginBuildTarget:(NSDictionary *)event {}
- (void)endBuildTarget:(NSDictionary *)event {}
- (void)beginBuildCommand:(NSDictionary *)event {}
- (void)endBuildCommand:(NSDictionary *)event {}
- (void)beginXcodebuild:(NSDictionary *)event {}
- (void)endXcodebuild:(NSDictionary *)event {}
- (void)beginOcunit:(NSDictionary *)event {}
- (void)endOcunit:(NSDictionary *)event {}
- (void)beginTestSuite:(NSDictionary *)event {}
- (void)endTestSuite:(NSDictionary *)event {}
- (void)beginTest:(NSDictionary *)event {}
- (void)endTest:(NSDictionary *)event {}
- (void)testOutput:(NSDictionary *)event {}
- (void)simulatorOutput:(NSDictionary *)event {}
- (void)beginStatus:(NSDictionary *)event {}
- (void)endStatus:(NSDictionary *)event {}
- (void)analyzerResult:(NSDictionary *)event {}
@end