-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSenTestLog.m
90 lines (79 loc) · 3.46 KB
/
SenTestLog.m
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
/*$Id: SenTestLog.m,v 1.10 2005/04/02 03:18:21 phink Exp $*/
// Copyright (c) 1997-2005, Sen:te (Sente SA). All rights reserved.
//
// Use of this source code is governed by the following license:
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// (1) Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// (2) Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL Sente SA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Note: this license is equivalent to the FreeBSD license.
//
// This notice may not be removed from this file.
#import "SenTestLog.h"
#import "SenTestSuite.h"
#import "SenTestCase.h"
#import "SenTestRun.h"
#import "NSException_SenTestFailure.h"
#import "SenTestingUtilities.h"
@implementation SenTestLog
static void testlog (NSString *message)
{
NSString *line = [NSString stringWithFormat:@"%@\n", message];
[(NSFileHandle *)[NSFileHandle fileHandleWithStandardError] writeData:[line dataUsingEncoding:NSUTF8StringEncoding]];
}
#ifdef GNU_RUNTIME
// unlike the NeXT runtime, the GNU runtime doesn't call super automatically
+ (void) initialize
{
[super initialize];
}
#endif
+ (void) testCaseDidStop:(NSNotification *) aNotification
{
SenTestRun *run = [aNotification run];
testlog ([NSString stringWithFormat:@"Test Case '%@' %s (%.3f seconds).", [run test], ([run hasSucceeded] ? "passed" : "failed"), [run totalDuration]]);
}
+ (void) testSuiteDidStart:(NSNotification *) aNotification
{
SenTestRun *run = [aNotification run];
testlog ([NSString stringWithFormat:@"Test Suite '%@' started at %@", [run test], [run startDate]]);
}
+ (void) testSuiteDidStop:(NSNotification *) aNotification
{
SenTestRun *run = [aNotification run];
testlog ([NSString stringWithFormat:@"Test Suite '%@' finished at %@.\nPassed %d test%s, with %d failure%s (%d unexpected) in %.3f (%.3f) seconds\n",
[run test],
[run stopDate],
[run testCaseCount], ([run testCaseCount] != 1 ? "s" : ""),
[run totalFailureCount], ([run totalFailureCount] != 1 ? "s" : ""),
[run unexpectedExceptionCount],
[run testDuration],
[run totalDuration]]);
}
+ (void) testCaseDidFail:(NSNotification *) aNotification
{
NSException *exception = [aNotification exception];
testlog ([NSString stringWithFormat:@"%@:%@: error: %@ : %@",
[exception filePathInProject],
[exception lineNumber],
[aNotification test],
[exception reason]]);
}
@end