this repo has no description
at fixPythonPipStalling 218 lines 6.6 kB view raw
1/* 2 * Copyright (c) 2016 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#import "SCTest.h" 25#import "SCTestUtils.h" 26 27@interface SCTestUnitTest : SCTest 28@end 29 30@implementation SCTestUnitTest 31 32+ (NSString *)command 33{ 34 return @"unit_test"; 35} 36 37+ (NSString *)commandDescription 38{ 39 return @"Runs the unit test for all commands"; 40} 41 42- (void)listTests 43{ 44 NSMutableDictionary *testDictionary; 45 NSMutableArray *testsArray; 46 NSString *thisClass; 47 NSArray<NSString *> *testClasses; 48 NSData *data; 49 NSString *jsonString; 50 51 testDictionary = [[NSMutableDictionary alloc] init]; 52 [testDictionary setObject:@"SystemConfiguration Unit Tests" forKey:@"Name"]; 53 [testDictionary setObject:@"These tests exercise 'configd' and the 'SystemConfiguration' framework" forKey:@"Description"]; 54 55 testsArray = [[NSMutableArray alloc] init]; 56 thisClass = NSStringFromClass([self class]); 57 testClasses = getTestClasses(); 58 for (NSString *className in testClasses) { 59 Class testClass; 60 NSMutableDictionary *subTest; 61 NSArray *list; 62 NSMutableArray *subTestArray; 63 64 if ([className isEqualToString:thisClass] ) { 65 continue; 66 } 67 68 testClass = NSClassFromString(className); 69 list = getUnitTestListForClass(testClass); 70 71 subTest = [[NSMutableDictionary alloc] init]; 72 [subTest setObject:@NO forKey:@"RequiresTCPDUMP"]; 73 [subTest setObject:@YES forKey:@"RequiresNetwork"]; 74 [subTest setObject:@NO forKey:@"RequiresRoot"]; 75 [subTest setObject:@NO forKey:@"RequiresPowermetrics"]; 76 [subTest setObject:[testClass command] forKey:@"Name"]; 77 [subTest setObject:[testClass commandDescription] forKey:@"Description"]; 78 subTestArray = [[NSMutableArray alloc] init]; 79 for (NSString *unitTest in list) { 80 NSDictionary *testDict = @{@"Command":@[@"/usr/local/bin/sctest", 81 @"unit_test", 82 @"-test_method", 83 unitTest], 84 @"Name":[unitTest stringByReplacingOccurrencesOfString:@"unitTest" withString:@""], 85 @"Description":@"Unit test" 86 }; 87 [subTestArray addObject:testDict]; 88 } 89 [subTest setObject:subTestArray forKey:@"SubTests"]; 90 [testsArray addObject:subTest]; 91 } 92 [testDictionary setObject:testsArray forKey:@"Tests"]; 93 data = [NSJSONSerialization dataWithJSONObject:testDictionary 94 options:NSJSONWritingPrettyPrinted 95 error:nil]; 96 jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 97 //SCTestLog("%@", jsonString); 98 SCPrint(TRUE, stderr, CFSTR("%@"), jsonString); 99} 100 101- (void)start 102{ 103 NSArray<NSString *> *testClasses; 104 NSString *thisClass = NSStringFromClass([self class]);; 105 testClasses = getTestClasses(); 106 BOOL errorOccured = NO; 107 108 if (self.options[kSCTestUnitTestListTests]) { 109 [self listTests]; 110 } else if (self.options[kSCTestUnitTestTestMethodList]) { 111 SCTestLog("List of unit tests:"); 112 for (NSString *className in testClasses) { 113 Class testClass; 114 NSArray *list; 115 116 if ([className isEqualToString:thisClass] ) { 117 continue; 118 } 119 120 testClass = NSClassFromString(className); 121 if (self.options[kSCTestUnitTestCommand] != nil) { 122 if (![self.options[kSCTestUnitTestCommand] isEqualToString:[testClass command]]) { 123 // Run unit test only for a specific command 124 continue; 125 } 126 } 127 128 SCTestLog("\n======= '%@' unit tests =======", [testClass command]); 129 list = getUnitTestListForClass(testClass); 130 for (NSString *unitTest in list) { 131 SCTestLog("%@", unitTest); 132 } 133 } 134 135 SCTestLog("\nEach of the unit tests can be run with the 'test_method' option\n"); 136 } else if (self.options[kSCTestUnitTestTestMethod]) { 137 for (NSString *className in testClasses) { 138 Class testClass; 139 NSArray *list; 140 141 if ([className isEqualToString:thisClass] ) { 142 continue; 143 } 144 145 testClass = NSClassFromString(className); 146 if (self.options[kSCTestUnitTestCommand] != nil) { 147 if (![self.options[kSCTestUnitTestCommand] isEqualToString:[testClass command]]) { 148 // Run unit test only for a specific command 149 continue; 150 } 151 } 152 153 list = getUnitTestListForClass(testClass); 154 for (NSString *unitTest in list) { 155 if ([unitTest isEqualToString:self.options[kSCTestUnitTestTestMethod]]) { 156 id obj = [(SCTest *)[testClass alloc] initWithOptions:self.options]; 157 158 SCTestLog("Running unit test %@ ...", unitTest); 159 160 SEL methodSelector = NSSelectorFromString(unitTest); 161 Boolean retVal = false; 162 if ([obj respondsToSelector:methodSelector]) { 163 NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[obj methodSignatureForSelector:methodSelector]]; 164 invocation.target = obj; 165 invocation.selector = methodSelector; 166 [invocation invoke]; 167 [invocation getReturnValue:&retVal]; 168 } 169 170 if (!retVal) { 171 SCTestLog("FAILED"); 172 errorOccured = YES; 173 } else { 174 SCTestLog("PASSED"); 175 } 176 break; 177 } 178 } 179 } 180 } else { 181 // This command runs unit tests for all commands. 182 for (NSString *className in testClasses) { 183 Class testClass; 184 id obj; 185 186 if ([className isEqualToString:thisClass] ) { 187 continue; 188 } 189 190 testClass = NSClassFromString(className); 191 if (self.options[kSCTestUnitTestCommand] != nil) { 192 if (![self.options[kSCTestUnitTestCommand] isEqualToString:[testClass command]]) { 193 // Run unit test only for a specific command 194 continue; 195 } 196 } 197 198 obj = [(SCTest *)[testClass alloc] initWithOptions:self.options]; 199 if ([obj respondsToSelector:@selector(unitTest)]) { 200 SCTestLog("\n*** Running unit test for \"%@\" command ***\n", [testClass command]); 201 BOOL passed = [obj unitTest]; 202 if (!passed) { 203 SCTestLog("FAILED"); 204 errorOccured = YES; 205 } 206 } 207 } 208 } 209 210 [self cleanupAndExitWithErrorCode:errorOccured]; 211} 212 213- (void)cleanupAndExitWithErrorCode:(int)error 214{ 215 [super cleanupAndExitWithErrorCode:error]; 216} 217 218@end