iut 0.1.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 (73) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +1 -0
  4. data/bin/iut +2 -0
  5. data/iut.gemspec +24 -0
  6. data/lib/iut.rb +17 -0
  7. data/lib/iut/generator.rb +28 -0
  8. data/lib/iut/version.rb +4 -0
  9. data/template/project/iUnitTest/iUnitTest.xcodeproj/project.pbxproj +480 -0
  10. data/template/project/iUnitTest/iUnitTest/Classes/.do_not_remove_this_directory +0 -0
  11. data/template/project/iUnitTest/iUnitTest/Tests/.do_not_remove_this_directory +0 -0
  12. data/template/project/iUnitTest/iUnitTest/en.lproj/InfoPlist.strings +2 -0
  13. data/template/project/iUnitTest/iUnitTest/iUnitTest-Info.plist +44 -0
  14. data/template/project/iUnitTest/iUnitTest/iUnitTest-Prefix.pch +14 -0
  15. data/template/project/iUnitTest/iUnitTest/iunittest/Default.png +0 -0
  16. data/template/project/iUnitTest/iUnitTest/iunittest/IUTAppDelegate.h +20 -0
  17. data/template/project/iUnitTest/iUnitTest/iunittest/IUTAppDelegate.m +38 -0
  18. data/template/project/iUnitTest/iUnitTest/iunittest/IUTDetailView.xib +184 -0
  19. data/template/project/iUnitTest/iUnitTest/iunittest/IUTMainWindow.xib +732 -0
  20. data/template/project/iUnitTest/iUnitTest/iunittest/IUTTestView.xib +432 -0
  21. data/template/project/iUnitTest/iUnitTest/iunittest/Settings.bundle/Japanese.lproj/Root.strings +0 -0
  22. data/template/project/iUnitTest/iUnitTest/iunittest/Settings.bundle/Root.plist +39 -0
  23. data/template/project/iUnitTest/iUnitTest/iunittest/Settings.bundle/en.lproj/Root.strings +0 -0
  24. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/AppAgent.h +33 -0
  25. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/AppAgent.m +135 -0
  26. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/AppAgentHelper.h +63 -0
  27. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UINavigationBarBasedTest.h +25 -0
  28. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UINavigationBarBasedTest.m +49 -0
  29. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITabBarAndNavigationBarBasedTest.h +23 -0
  30. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITabBarAndNavigationBarBasedTest.m +42 -0
  31. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITabBarBasedTest.h +25 -0
  32. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITabBarBasedTest.m +50 -0
  33. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITableViewBasedTest.h +23 -0
  34. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITableViewBasedTest.m +57 -0
  35. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITableViewControllerTest.h +22 -0
  36. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UITableViewControllerTest.m +44 -0
  37. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UIViewBasedTest.h +21 -0
  38. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UIViewBasedTest.m +52 -0
  39. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UIViewControllerTest.h +63 -0
  40. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/ControllerTest/UIViewControllerTest.m +162 -0
  41. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/GTMSenTestCase.h +17 -0
  42. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/GTMSenTestCase.m +15 -0
  43. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTAssertion.h +135 -0
  44. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTAssertion.m +216 -0
  45. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTAssertionInfo.h +60 -0
  46. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTAssertionInfo.m +104 -0
  47. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTDetailViewController.h +24 -0
  48. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTDetailViewController.m +81 -0
  49. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTLog.h +14 -0
  50. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTPreference.h +34 -0
  51. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTPreference.m +125 -0
  52. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTResultTableViewCell.h +27 -0
  53. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTResultTableViewCell.m +83 -0
  54. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTResultTableViewController.h +26 -0
  55. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTResultTableViewController.m +193 -0
  56. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTest.h +74 -0
  57. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTest.m +127 -0
  58. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTestRunner.h +66 -0
  59. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTestRunner.m +449 -0
  60. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTestRunnerViewController.h +59 -0
  61. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/IUTTestRunnerViewController.m +163 -0
  62. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/NSExceptionExtension.h +21 -0
  63. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/NSExceptionExtension.m +52 -0
  64. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/SenTestAssertion.h +82 -0
  65. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/SourceCodeOpener.h +65 -0
  66. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/SourceCodeOpener.m +176 -0
  67. data/template/project/iUnitTest/iUnitTest/iunittest/UnitTest/UITableViewControllerTestHelper.h +35 -0
  68. data/template/project/iUnitTest/iUnitTest/iunittest/isd_logo_60x40.png +0 -0
  69. data/template/project/iUnitTest/iUnitTest/iunittest/isd_logo_60x40_w.png +0 -0
  70. data/template/project/iUnitTest/iUnitTest/iunittest/iunittest_icon.png +0 -0
  71. data/template/project/iUnitTest/iUnitTest/main.m +18 -0
  72. data/template/project/iUnitTest/script/sync_source.rb +27 -0
  73. metadata +119 -0
@@ -0,0 +1,26 @@
1
+ //
2
+ // IUTResultTableViewController.h
3
+ // iUnitTest
4
+ //
5
+ // Created by Katsuyoshi Ito on 09/01/17.
6
+ // Copyright 2009 ITO SOFT DESIGN Inc. All rights reserved.
7
+ //
8
+
9
+ #import <UIKit/UIKit.h>
10
+ #import "IUTTestRunner.h"
11
+ #import "IUTDetailViewController.h"
12
+
13
+
14
+ @interface IUTResultTableViewController : UITableViewController {
15
+ IUTTestRunner *runner;
16
+
17
+ IUTDetailViewController *detailViewController;
18
+ UINavigationController *navigationController;
19
+ }
20
+
21
+ @property (retain) IUTTestRunner *runner;
22
+ @property (retain, readonly) IUTDetailViewController *detailViewController;
23
+
24
+ @property (retain) UINavigationController *navigationController;
25
+
26
+ @end
@@ -0,0 +1,193 @@
1
+ //
2
+ // IUTResultTableViewController.m
3
+ // iUnitTest
4
+ //
5
+ // Created by Katsuyoshi Ito on 09/01/17.
6
+ // Copyright 2009 ITO SOFT DESIGN Inc. All rights reserved.
7
+ //
8
+
9
+ #import "IUTResultTableViewController.h"
10
+ #import "IUTAssertion.h"
11
+ #import "IUTResultTableViewCell.h"
12
+ #import "IUTTestRunnerViewController.h"
13
+ #import "SourceCodeOpener.h"
14
+ #import "NSExceptionExtension.h"
15
+
16
+
17
+ @implementation IUTResultTableViewController
18
+
19
+ @synthesize runner, navigationController;
20
+
21
+ /*
22
+ - (id)initWithStyle:(UITableViewStyle)style {
23
+ // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
24
+ if (self = [super initWithStyle:style]) {
25
+ }
26
+ return self;
27
+ }
28
+ */
29
+
30
+ - (void)viewDidLoad {
31
+ [super viewDidLoad];
32
+ self.tableView.rowHeight = 100;
33
+ }
34
+
35
+ /*
36
+ - (void)viewWillAppear:(BOOL)animated {
37
+ [super viewWillAppear:animated];
38
+ }
39
+ */
40
+ /*
41
+ - (void)viewDidAppear:(BOOL)animated {
42
+ [super viewDidAppear:animated];
43
+ }
44
+ */
45
+ /*
46
+ - (void)viewWillDisappear:(BOOL)animated {
47
+ [super viewWillDisappear:animated];
48
+ }
49
+ */
50
+ /*
51
+ - (void)viewDidDisappear:(BOOL)animated {
52
+ [super viewDidDisappear:animated];
53
+ }
54
+ */
55
+
56
+ /*
57
+ // Override to allow orientations other than the default portrait orientation.
58
+ - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
59
+ // Return YES for supported orientations
60
+ return (interfaceOrientation == UIInterfaceOrientationPortrait);
61
+ }
62
+ */
63
+
64
+ - (void)didReceiveMemoryWarning {
65
+ [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
66
+ // Release anything that's not essential, such as cached data
67
+ }
68
+
69
+ #pragma mark Table view methods
70
+
71
+ - (NSArray *)resultsForSection:(NSInteger)section
72
+ {
73
+ return (section == 0) ? self.runner.fails : self.runner.errors;
74
+ }
75
+
76
+ - (NSException *)resultForIndexPath:(NSIndexPath *)indexPath
77
+ {
78
+ return [[self resultsForSection:indexPath.section] objectAtIndex:indexPath.row];
79
+ }
80
+
81
+ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
82
+ return 2;
83
+ }
84
+
85
+ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
86
+ {
87
+ int count = [[self resultsForSection:section] count];
88
+ if (section == 0) {
89
+ return [NSString stringWithFormat:(count <= 1) ? @"%d failure" : @"%d failures", count];
90
+ } else {
91
+ return [NSString stringWithFormat:(count <= 1) ? @"%d error" : @"%d errors", count];
92
+ }
93
+ }
94
+
95
+ // Customize the number of rows in the table view.
96
+ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
97
+ NSArray *results = [self resultsForSection:section];
98
+ return [results count];
99
+ }
100
+
101
+ // Customize the appearance of table view cells.
102
+ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
103
+
104
+ static NSString *CellIdentifier = @"Cell";
105
+
106
+ IUTResultTableViewCell *cell = (IUTResultTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
107
+ if (cell == nil) {
108
+ cell = [[[IUTResultTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
109
+ }
110
+
111
+ cell.exception = [self resultForIndexPath:indexPath];
112
+ cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
113
+
114
+ return cell;
115
+ }
116
+
117
+ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
118
+ #if TARGET_IPHONE_SIMULATOR
119
+ IUTAssertionInfo *info = [self resultForIndexPath:indexPath].assertionInfo;
120
+ if (info) {
121
+ [[SourceCodeOpener sourceCodeOpener] open:info];
122
+ }
123
+ #endif
124
+
125
+ [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
126
+ }
127
+
128
+ - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
129
+ {
130
+ self.detailViewController.exception = [[self resultsForSection:indexPath.section] objectAtIndex:indexPath.row];
131
+ [self.navigationController pushViewController:self.detailViewController animated:YES];
132
+ }
133
+
134
+ /*
135
+ // Override to support conditional editing of the table view.
136
+ - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
137
+ // Return NO if you do not want the specified item to be editable.
138
+ return YES;
139
+ }
140
+ */
141
+
142
+
143
+ /*
144
+ // Override to support editing the table view.
145
+ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
146
+
147
+ if (editingStyle == UITableViewCellEditingStyleDelete) {
148
+ // Delete the row from the data source
149
+ [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
150
+ }
151
+ else if (editingStyle == UITableViewCellEditingStyleInsert) {
152
+ // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
153
+ }
154
+ }
155
+ */
156
+
157
+
158
+ /*
159
+ // Override to support rearranging the table view.
160
+ - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
161
+ }
162
+ */
163
+
164
+
165
+ /*
166
+ // Override to support conditional rearranging of the table view.
167
+ - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
168
+ // Return NO if you do not want the item to be re-orderable.
169
+ return YES;
170
+ }
171
+ */
172
+
173
+
174
+ - (void)dealloc {
175
+ [runner release];
176
+ [navigationController release];
177
+ [detailViewController release];
178
+ [super dealloc];
179
+ }
180
+
181
+
182
+
183
+ - (IUTDetailViewController *)detailViewController
184
+ {
185
+ if (detailViewController == nil) {
186
+ detailViewController = [[IUTDetailViewController alloc] initWithNibName:@"IUTDetailView" bundle:nil];
187
+ }
188
+ return detailViewController;
189
+ }
190
+
191
+
192
+ @end
193
+
@@ -0,0 +1,74 @@
1
+ //
2
+ // iUnitTest.h
3
+ // iUnitTest
4
+ //
5
+ // Created by Katsuyoshi Ito on 09/01/16.
6
+ // Copyright 2009 ITO SOFT DESIGN Inc. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "IUTAssertion.h"
11
+
12
+
13
+ @interface IUTTest : IUTAssertion {
14
+ NSMutableArray *tests;
15
+
16
+ NSTimeInterval testAfterDelay;
17
+
18
+ SEL nextSetUpSequence;
19
+ NSTimeInterval nextSetUpSequenceAfterDelay;
20
+
21
+ SEL nextTest;
22
+ NSTimeInterval nextTestAfterDelay;
23
+ }
24
+
25
+ @property (retain, readonly) NSMutableArray *tests;
26
+
27
+ /** This properties were deprecated in iPhone OS 3.0. didSetUp method should return delay time. */
28
+ @property NSTimeInterval testAfterDelay __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_2,__IPHONE_3_0);
29
+
30
+ @property SEL nextSetUpSequence;
31
+ @property NSTimeInterval nextSetUpSequenceAfterDelay;
32
+
33
+ @property SEL nextTest;
34
+ @property NSTimeInterval nextTestAfterDelay;
35
+
36
+ /**
37
+ * Returns a Boolean value that indicates whether to collect tests in super class.
38
+ * default is NO.
39
+ * @return YES if collect tests in super class, otherwise NO.
40
+ */
41
+ + (BOOL)doesCollectTestsInSuper;
42
+
43
+ /**
44
+ * Returns a Boolean value that indicates whether to test even sucessed in RunFailuresOnly setting.
45
+ * default is NO.
46
+ * @return YES if force tests in this class, otherwise NO.
47
+ */
48
+ + (BOOL)forceTestsAnyway;
49
+
50
+
51
+ - (NSNumber *)willSetUp;
52
+ - (void)setUp;
53
+ - (NSNumber *)didSetUp;
54
+
55
+ - (NSNumber *)willTearDown;
56
+ - (void)tearDown;
57
+ - (NSNumber *)didTearDown;
58
+
59
+
60
+ // for delayd sequeces or tests
61
+ /**
62
+ * When you call this method in -willSetUp or -setUp or -didSetUp, specified selector will be called after -didSetUp.
63
+ * If your tests need same sequences, it's helpful.
64
+ * @see PerformSetUpSequenceTest.m
65
+ */
66
+ - (void)performSetUpSequence:(SEL)selector afterDelay:(NSTimeInterval)delay;
67
+
68
+ /**
69
+ * When you call this method in test methods, specified selector will be called as next delayed test.
70
+ * @see PerformTestTest.m
71
+ */
72
+ - (void)performTest:(SEL)selector afterDelay:(NSTimeInterval)delay;
73
+
74
+ @end
@@ -0,0 +1,127 @@
1
+ //
2
+ // iUnitTest.m
3
+ // iUnitTest
4
+ //
5
+ // Created by Katsuyoshi Ito on 09/01/16.
6
+ // Copyright 2009 ITO SOFT DESIGN Inc. All rights reserved.
7
+ //
8
+
9
+ #import "IUTTest.h"
10
+ #import "/usr/include/objc/objc-class.h"
11
+
12
+
13
+ @interface IUTTest(_private)
14
+ - (void)collectTestsForClass:(Class)klass;
15
+ - (void)collectTests;
16
+ @end
17
+
18
+ @implementation IUTTest
19
+
20
+ @synthesize tests, testAfterDelay;
21
+ @synthesize nextSetUpSequence, nextSetUpSequenceAfterDelay;
22
+ @synthesize nextTest, nextTestAfterDelay;
23
+
24
+
25
+ + (BOOL)doesCollectTestsInSuper
26
+ {
27
+ return NO;
28
+ }
29
+
30
+ + (BOOL)forceTestsAnyway
31
+ {
32
+ return NO;
33
+ }
34
+
35
+ - (id)init
36
+ {
37
+ self = [super init];
38
+ if (self) {
39
+ tests = [NSMutableArray new];
40
+ [self collectTests];
41
+ }
42
+ return self;
43
+ }
44
+
45
+ - (void)dealloc
46
+ {
47
+ [tests release];
48
+ [super dealloc];
49
+ }
50
+
51
+ - (void)collectTestsForClass:(Class)klass
52
+ {
53
+ unsigned int count;
54
+ NSRange range = NSMakeRange(0, [@"test" length]);
55
+ Method *methods = class_copyMethodList(klass, &count);
56
+ Method *methodPtr = methods;
57
+ for (int i = 0; i < count; i++, methodPtr++) {
58
+ Method aMethod = *methodPtr;
59
+ NSString *selectorName = NSStringFromSelector(method_getName(aMethod));
60
+ if ([selectorName compare:@"test" options:NSCaseInsensitiveSearch range:range] == 0) {
61
+ // if already has selectorName, it will be overrided. Then ignore this methods.
62
+ if (![tests containsObject:selectorName]) {
63
+ [tests addObject:selectorName];
64
+ }
65
+ }
66
+ }
67
+ free(methods);
68
+ }
69
+
70
+ - (void)collectTests
71
+ {
72
+ Class rootClass = [IUTTest class];
73
+ Class klass = [self class];
74
+
75
+ [self collectTestsForClass:klass];
76
+
77
+ while((klass != rootClass) && [klass doesCollectTestsInSuper]) {
78
+ klass = [klass superclass];
79
+ [self collectTestsForClass:klass];
80
+ }
81
+ }
82
+
83
+
84
+ - (NSNumber *)willSetUp
85
+ {
86
+ return [NSNumber numberWithDouble:0.0];
87
+ }
88
+
89
+ - (void)setUp
90
+ {
91
+ }
92
+
93
+ - (NSNumber *)didSetUp
94
+ {
95
+ return [NSNumber numberWithDouble:testAfterDelay];
96
+ }
97
+
98
+
99
+ - (NSNumber *)willTearDown
100
+ {
101
+ return [NSNumber numberWithDouble:0.0];
102
+ }
103
+
104
+ - (void)tearDown
105
+ {
106
+ }
107
+
108
+ - (NSNumber *)didTearDown
109
+ {
110
+ return [NSNumber numberWithDouble:0.0];
111
+ }
112
+
113
+
114
+ - (void)performSetUpSequence:(SEL)selector afterDelay:(NSTimeInterval)delay
115
+ {
116
+ self.nextSetUpSequence = selector;
117
+ self.nextSetUpSequenceAfterDelay = delay;
118
+ }
119
+
120
+ - (void)performTest:(SEL)selector afterDelay:(NSTimeInterval)delay
121
+ {
122
+ self.nextTest = selector;
123
+ self.nextTestAfterDelay = delay;
124
+ }
125
+
126
+
127
+ @end
@@ -0,0 +1,66 @@
1
+ //
2
+ // IUTTestRunner.h
3
+ // iUnitTest
4
+ //
5
+ // Created by Katsuyoshi Ito on 09/01/16.
6
+ // Copyright 2009 ITO SOFT DESIGN Inc. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+
11
+
12
+ @interface IUTTestRunner : NSObject {
13
+
14
+ NSMutableArray *sites;
15
+
16
+ NSMutableArray *tests;
17
+ NSMutableArray *passes;
18
+ NSMutableArray *fails;
19
+ NSMutableArray *errors;
20
+
21
+ NSException *exception;
22
+
23
+ BOOL stopRequest;
24
+
25
+ NSTimeInterval delay;
26
+ }
27
+
28
+ @property (retain, readonly) NSMutableArray *sites;
29
+
30
+ @property (retain, readonly) NSMutableArray *tests;
31
+ @property (retain, readonly) NSMutableArray *passes;
32
+ @property (retain, readonly) NSMutableArray *fails;
33
+ @property (retain, readonly) NSMutableArray *errors;
34
+
35
+ @property (readonly) int badgeNumber;
36
+
37
+ @property (retain) NSException *exception;
38
+
39
+ @property (assign, readonly) NSString *result;
40
+
41
+ @property (readonly) int assertedCount;
42
+
43
+ @property (readonly) BOOL isPassed;
44
+ @property (readonly) BOOL hasErrors;
45
+ @property (readonly) BOOL hasFailures;
46
+
47
+ @property (assign, readonly) UIColor *successColor;
48
+ @property (assign, readonly) UIColor *failureColor;
49
+ @property (assign, readonly) UIColor *failureColor2;
50
+ @property (assign, readonly) UIColor *errorColor;
51
+ @property (assign, readonly) UIColor *idleColor;
52
+ @property (assign, readonly) UIColor *backgroundColor;
53
+
54
+
55
+ + (UIColor *)successColor;
56
+ + (UIColor *)failureColor;
57
+ + (UIColor *)failureColor2;
58
+ + (UIColor *)errorColor;
59
+ + (UIColor *)idleColor;
60
+
61
+
62
+ - (void)run:(id)sender;
63
+ - (void)stop:(id)sender;
64
+
65
+
66
+ @end