16
16
17
17
#import < Matter/Matter.h>
18
18
19
- #import " MTRTestCase.h"
20
19
#import " MTRTestServerAppRunner.h"
21
20
22
21
static unsigned sAppRunnerIndex = 1 ;
29
28
static const uint16_t kBasePort = 5542 - kMinDiscriminator ;
30
29
#endif // HAVE_NSTASK
31
30
32
- @implementation MTRTestServerAppRunner {
33
- unsigned _uniqueIndex;
34
- #if HAVE_NSTASK
35
- NSTask * _appTask;
36
- #endif
37
- }
31
+ @implementation MTRTestCase (ServerAppRunner)
38
32
39
- - (instancetype )initInternalWithAppName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload
33
+ #if HAVE_NSTASK
34
+ + (NSTask *)doStartAppWithName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload
40
35
{
41
- #if !HAVE_NSTASK
42
- XCTFail (" Unable to start server app when we do not have NSTask" );
43
- return nil ;
44
- #else // HAVE_NSTASK
45
- if (!(self = [super init ])) {
46
- return nil ;
47
- }
48
-
49
- _uniqueIndex = sAppRunnerIndex ++;
36
+ __auto_type uniqueIndex = sAppRunnerIndex ++;
50
37
51
38
NSError * error;
52
39
__auto_type * parsedPayload = [MTRSetupPayload setupPayloadWithOnboardingPayload: payload error: &error];
@@ -61,7 +48,7 @@ - (instancetype)initInternalWithAppName:(NSString *)name arguments:(NSArray<NSSt
61
48
NSNumber * passcode = parsedPayload.setupPasscode ;
62
49
63
50
__auto_type * executable = [NSString stringWithFormat: @" out/debug/%@ -app/chip-%@ -app" , name, name];
64
- _appTask = [MTRTestCase createTaskForPath: executable];
51
+ __auto_type * appTask = [self createTaskForPath: executable];
65
52
66
53
__auto_type * forcedArguments = @[
67
54
// Make sure we only advertise on the local interface.
@@ -74,55 +61,50 @@ - (instancetype)initInternalWithAppName:(NSString *)name arguments:(NSArray<NSSt
74
61
@" --passcode" ,
75
62
[NSString stringWithFormat: @" %llu " , passcode.unsignedLongLongValue],
76
63
@" --KVS" ,
77
- [NSString stringWithFormat: @" /tmp/chip-%@ -kvs%u " , name, _uniqueIndex ],
64
+ [NSString stringWithFormat: @" /tmp/chip-%@ -kvs%u " , name, uniqueIndex ],
78
65
@" --product-id" ,
79
66
[NSString stringWithFormat: @" %u " , parsedPayload.productID.unsignedShortValue],
80
67
];
81
68
82
69
__auto_type * allArguments = [forcedArguments arrayByAddingObjectsFromArray: arguments];
83
- [_appTask setArguments: allArguments];
70
+ [appTask setArguments: allArguments];
84
71
85
- NSString * outFile = [NSString stringWithFormat: @" /tmp/darwin/framework-tests/%@ -app-%u .log" , name, _uniqueIndex ];
86
- NSString * errorFile = [NSString stringWithFormat: @" /tmp/darwin/framework-tests/%@ -app-err-%u .log" , name, _uniqueIndex ];
72
+ NSString * outFile = [NSString stringWithFormat: @" /tmp/darwin/framework-tests/%@ -app-%u .log" , name, uniqueIndex ];
73
+ NSString * errorFile = [NSString stringWithFormat: @" /tmp/darwin/framework-tests/%@ -app-err-%u .log" , name, uniqueIndex ];
87
74
88
75
// Make sure the files exist.
89
76
[[NSFileManager defaultManager ] createFileAtPath: outFile contents: nil attributes: nil ];
90
77
[[NSFileManager defaultManager ] createFileAtPath: errorFile contents: nil attributes: nil ];
91
78
92
- _appTask .standardOutput = [NSFileHandle fileHandleForWritingAtPath: outFile];
93
- _appTask .standardError = [NSFileHandle fileHandleForWritingAtPath: errorFile];
79
+ appTask .standardOutput = [NSFileHandle fileHandleForWritingAtPath: outFile];
80
+ appTask .standardError = [NSFileHandle fileHandleForWritingAtPath: errorFile];
94
81
95
- NSLog (@" Started chip-%@ -app (%@ ) with arguments %@ stdout=%@ and stderr=%@ " , name, _appTask , allArguments, outFile, errorFile);
82
+ NSLog (@" Started chip-%@ -app (%@ ) with arguments %@ stdout=%@ and stderr=%@ " , name, appTask , allArguments, outFile, errorFile);
96
83
97
- return self;
98
- #endif // HAVE_NSTASK
84
+ return appTask;
99
85
}
86
+ #endif // HAVE_NSTASK
100
87
101
- - (instancetype ) initWithAppName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload testcase : (MTRTestCase *) testcase
88
+ - (BOOL ) startAppWithName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload
102
89
{
103
- if (!(self = [ self initInternalWithAppName: name arguments: arguments payload: payload])) {
104
- return nil ;
105
- }
106
-
107
- [testcase launchTask: _appTask ];
108
-
109
- return self;
90
+ # if !HAVE_NSTASK
91
+ XCTFail ( " Unable to start server app when we do not have NSTask " ) ;
92
+ return NO ;
93
+ # else
94
+ [self launchTask: [ self .class doStartAppWithName: name arguments: arguments payload: payload] ];
95
+ return YES ;
96
+ # endif // HAVE_NSTASK
110
97
}
111
98
112
- - ( instancetype ) initCrossTestWithAppName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload testsuite : ( Class ) testsuite
99
+ + ( BOOL ) startAppWithName : (NSString *)name arguments : (NSArray <NSString *> *)arguments payload : (NSString *)payload
113
100
{
114
- if (![testsuite isSubclassOfClass: MTRTestCase.class]) {
115
- NSLog (@" %@ is not a subclass of MTRTestCase" , testsuite);
116
- return nil ;
117
- }
118
-
119
- if (!(self = [self initInternalWithAppName: name arguments: arguments payload: payload])) {
120
- return nil ;
121
- }
122
-
123
- [MTRTestCase launchCrossTestTask: _appTask];
124
-
125
- return self;
101
+ #if !HAVE_NSTASK
102
+ XCTFail (" Unable to start server app when we do not have NSTask" );
103
+ return NO ;
104
+ #else
105
+ [self launchTask: [self doStartAppWithName: name arguments: arguments payload: payload]];
106
+ return YES ;
107
+ #endif // HAVE_NSTASK
126
108
}
127
109
128
110
+ (unsigned )nextUniqueIndex
0 commit comments