learn-xcpretty 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.kick +17 -0
  4. data/.travis.yml +18 -0
  5. data/CHANGELOG.md +152 -0
  6. data/CONTRIBUTING.md +60 -0
  7. data/Gemfile +8 -0
  8. data/LICENSE.txt +61 -0
  9. data/README.md +143 -0
  10. data/Rakefile +24 -0
  11. data/assets/report.html.erb +155 -0
  12. data/bin/learn-xcpretty +80 -0
  13. data/features/custom_formatter.feature +15 -0
  14. data/features/fixtures/xcodebuild.log +5963 -0
  15. data/features/html_report.feature +40 -0
  16. data/features/json_compilation_database_report.feature +21 -0
  17. data/features/junit_report.feature +44 -0
  18. data/features/knock_format.feature +11 -0
  19. data/features/simple_format.feature +172 -0
  20. data/features/steps/formatting_steps.rb +268 -0
  21. data/features/steps/html_steps.rb +23 -0
  22. data/features/steps/json_steps.rb +37 -0
  23. data/features/steps/junit_steps.rb +38 -0
  24. data/features/steps/report_steps.rb +21 -0
  25. data/features/steps/xcpretty_steps.rb +31 -0
  26. data/features/support/env.rb +108 -0
  27. data/features/tap_format.feature +31 -0
  28. data/features/test_format.feature +39 -0
  29. data/features/xcpretty.feature +14 -0
  30. data/learn-xcpretty.gemspec +37 -0
  31. data/lib/xcpretty/ansi.rb +71 -0
  32. data/lib/xcpretty/formatters/formatter.rb +134 -0
  33. data/lib/xcpretty/formatters/knock.rb +34 -0
  34. data/lib/xcpretty/formatters/rspec.rb +27 -0
  35. data/lib/xcpretty/formatters/simple.rb +155 -0
  36. data/lib/xcpretty/formatters/tap.rb +39 -0
  37. data/lib/xcpretty/parser.rb +421 -0
  38. data/lib/xcpretty/printer.rb +20 -0
  39. data/lib/xcpretty/reporters/html.rb +73 -0
  40. data/lib/xcpretty/reporters/json_compilation_database.rb +58 -0
  41. data/lib/xcpretty/reporters/junit.rb +99 -0
  42. data/lib/xcpretty/reporters/learn.rb +154 -0
  43. data/lib/xcpretty/snippet.rb +34 -0
  44. data/lib/xcpretty/syntax.rb +20 -0
  45. data/lib/xcpretty/version.rb +3 -0
  46. data/lib/xcpretty.rb +39 -0
  47. data/spec/fixtures/NSStringTests.m +64 -0
  48. data/spec/fixtures/constants.rb +546 -0
  49. data/spec/fixtures/custom_formatter.rb +17 -0
  50. data/spec/fixtures/oneliner.m +1 -0
  51. data/spec/fixtures/raw_kiwi_compilation_fail.txt +24 -0
  52. data/spec/fixtures/raw_kiwi_fail.txt +1896 -0
  53. data/spec/fixtures/raw_specta_fail.txt +3110 -0
  54. data/spec/spec_helper.rb +6 -0
  55. data/spec/support/matchers/colors.rb +20 -0
  56. data/spec/xcpretty/ansi_spec.rb +46 -0
  57. data/spec/xcpretty/formatters/formatter_spec.rb +113 -0
  58. data/spec/xcpretty/formatters/rspec_spec.rb +55 -0
  59. data/spec/xcpretty/formatters/simple_spec.rb +129 -0
  60. data/spec/xcpretty/parser_spec.rb +421 -0
  61. data/spec/xcpretty/printer_spec.rb +53 -0
  62. data/spec/xcpretty/snippet_spec.rb +39 -0
  63. data/spec/xcpretty/syntax_spec.rb +35 -0
  64. data/vendor/json_pure/COPYING +57 -0
  65. data/vendor/json_pure/LICENSE +340 -0
  66. data/vendor/json_pure/generator.rb +443 -0
  67. data/vendor/json_pure/parser.rb +364 -0
  68. metadata +261 -0
@@ -0,0 +1,40 @@
1
+ Feature: Creating a HTML test report
2
+
3
+ Background:
4
+ Given the tests have started running
5
+
6
+ Scenario: Showing a test suite
7
+ Given I have a passing test in my suite
8
+ When I pipe to xcpretty with "--report html"
9
+ Then I should see a test suite section in HTML
10
+
11
+ Scenario: Showing failed tests
12
+ Given I have a failing test in my suite
13
+ When I pipe to xcpretty with "--report html"
14
+ Then I should see a failed test in HTML
15
+ And the failure counter should show 1 test
16
+
17
+ Scenario: Showing passing tests
18
+ Given I have a passing test in my suite
19
+ When I pipe to xcpretty with "--report html"
20
+ Then I should see a passing test in HTML
21
+
22
+ Scenario: Counting tests
23
+ Given I have a passing test in my suite
24
+ And I have a failing test in my suite
25
+ And the test suite has finished
26
+ When I pipe to xcpretty with "--report html"
27
+ Then I should see 2 tests in HTML
28
+
29
+ Scenario: Having many test classes
30
+ Given I have tests in my suite from 2 classes
31
+ When I pipe to xcpretty with "--report html"
32
+ Then I should see 2 test suite sections in HTML
33
+
34
+ Scenario: Writing to a custom file path
35
+ When I pipe to xcpretty with "--report html" and specify a custom path
36
+ Then I should have a test report in a custom path
37
+
38
+ Scenario: Writing to multiple custom file paths
39
+ When I pipe to xcpretty with two custom "html" report paths
40
+ Then I should have test reports in two custom paths
@@ -0,0 +1,21 @@
1
+ Feature: Create a JSON compilation database
2
+
3
+ Scenario: Showing file compilation
4
+ Given I have a file to compile
5
+ When I pipe to xcpretty with "--report json-compilation-database" and specify a custom path
6
+ Then the JSON compilation database should contain an entry with a command
7
+ Then the JSON compilation database should contain an entry with a directory
8
+ Then the JSON compilation database should contain an entry with a file
9
+
10
+ Scenario: Handling a complete xcodebuild session
11
+ Given some big input
12
+ When I pipe to xcpretty with "--report json-compilation-database" and specify a custom path
13
+ Then the JSON compilation database should be complete
14
+
15
+ Scenario: Writing to a custom file path
16
+ When I pipe to xcpretty with "--report json-compilation-database" and specify a custom path
17
+ Then I should have a JSON compilation database in a custom path
18
+
19
+ Scenario: Writing to multiple custom file paths
20
+ When I pipe to xcpretty with two custom "json-compilation-database" report paths
21
+ Then I should have JSON compilation databases in two custom paths
@@ -0,0 +1,44 @@
1
+ Feature: Creating a JUnit test report
2
+
3
+ Background:
4
+ Given the tests have started running
5
+
6
+ Scenario: Showing a test suite
7
+ Given I have a passing test in my suite
8
+ When I pipe to xcpretty with "--report junit"
9
+ Then I should see a test suite node
10
+
11
+ Scenario: Showing pending test output
12
+ Given I have a pending test in my suite
13
+ When I pipe to xcpretty with "--report junit"
14
+ Then I should see a pending test node in my report
15
+
16
+ Scenario: Showing failed tests
17
+ Given I have a failing test in my suite
18
+ When I pipe to xcpretty with "--report junit"
19
+ Then I should see a failed test node in my report
20
+
21
+ Scenario: Showing passing tests
22
+ Given I have a passing test in my suite
23
+ When I pipe to xcpretty with "--report junit"
24
+ Then I should see a passing test node in my report
25
+
26
+ Scenario: Counting tests
27
+ Given I have a passing test in my suite
28
+ And I have a failing test in my suite
29
+ And the test suite has finished
30
+ When I pipe to xcpretty with "--report junit"
31
+ Then I should see 2 tests in my report
32
+
33
+ Scenario: Having many test classes
34
+ Given I have tests in my suite from 2 classes
35
+ When I pipe to xcpretty with "--report junit"
36
+ Then I should see 2 test suites
37
+
38
+ Scenario: Writing to a custom file path
39
+ When I pipe to xcpretty with "--report junit" and specify a custom path
40
+ Then I should have a test report in a custom path
41
+
42
+ Scenario: Writing to multiple custom file paths
43
+ When I pipe to xcpretty with two custom "junit" report paths
44
+ Then I should have test reports in two custom paths
@@ -0,0 +1,11 @@
1
+ Feature: Showing Knock-style test output
2
+
3
+ Scenario: Showing failed tests
4
+ Given I have a failing test in my suite
5
+ When I pipe to xcpretty with "--knock"
6
+ Then I should see text beginning with "not ok"
7
+
8
+ Scenario: Showing passing tests
9
+ Given I have a passing test in my suite
10
+ When I pipe to xcpretty with "--knock"
11
+ Then I should see text beginning with "ok"
@@ -0,0 +1,172 @@
1
+ Feature: Showing build output in simple format
2
+
3
+ Scenario: Showing file compilation
4
+ Given I have a file to compile
5
+ When I pipe to xcpretty with "--simple"
6
+ Then I should see a successful compilation message
7
+
8
+ Scenario: Showing xib compilation
9
+ Given I have a xib to compile
10
+ When I pipe to xcpretty with "--simple"
11
+ Then I should see a successful compilation message
12
+
13
+ Scenario: Showing precompilation
14
+ Given I have a precompiled header
15
+ When I pipe to xcpretty with "--simple"
16
+ Then I should see a successful precompilation message
17
+
18
+ Scenario: Showing file compilation with color
19
+ Given I have a file to compile
20
+ When I pipe to xcpretty with "--simple --color"
21
+ Then I should see a yellow completion icon
22
+
23
+ Scenario: Showing xib compilation with color
24
+ Given I have a xib to compile
25
+ When I pipe to xcpretty with "--simple --color"
26
+ Then I should see a yellow completion icon
27
+
28
+ Scenario: Showing precompilation
29
+ Given I have a precompiled header
30
+ When I pipe to xcpretty with "--simple --color"
31
+ Then I should see a yellow completion icon
32
+
33
+ Scenario: Showing analyze
34
+ Given I have a file to analyze
35
+ When I pipe to xcpretty with "--simple"
36
+ Then I should see a successful analyze message
37
+
38
+ Scenario: Showing shallow analyze
39
+ Given I have a file to shallow analyze
40
+ When I pipe to xcpretty with "--simple"
41
+ Then I should see a successful analyze message
42
+
43
+ Scenario: Showing tiff file validation
44
+ Given I have a tiff file to validate
45
+ When I pipe to xcpretty with "--simple"
46
+ Then I should see a successful tiff validation message
47
+
48
+ Scenario: Showing touch file
49
+ Given I have a file to touch
50
+ When I pipe to xcpretty with "--simple"
51
+ Then I should see a successful touch message
52
+
53
+ Scenario: Showing analyze with color
54
+ Given I have a file to analyze
55
+ When I pipe to xcpretty with "--simple --color"
56
+ Then I should see a yellow completion icon
57
+
58
+ Scenario: Showing shallow analyze with color
59
+ Given I have a file to shallow analyze
60
+ When I pipe to xcpretty with "--simple --color"
61
+ Then I should see a yellow completion icon
62
+
63
+ Scenario: Showing tiff file validation with color
64
+ Given I have a tiff file to validate
65
+ When I pipe to xcpretty with "--simple --color"
66
+ Then I should see a yellow completion icon
67
+
68
+ Scenario: Showing touch file with color
69
+ Given I have a file to touch
70
+ When I pipe to xcpretty with "--simple --color"
71
+ Then I should see a yellow completion icon
72
+
73
+ Scenario: Showing the start of a test run
74
+ Given the tests have started running
75
+ When I pipe to xcpretty with "--simple"
76
+ Then I should see that test suite has started
77
+
78
+ Scenario: Showing the start of a test suite
79
+ Given I start a test suite
80
+ When I pipe to xcpretty with "--simple"
81
+ Then I should see the name of suite only
82
+
83
+ Scenario: Showing the end of a test suite
84
+ Given the test suite has finished
85
+ When I pipe to xcpretty with "--simple"
86
+ Then I should see that the test suite finished
87
+
88
+ Scenario: Showing failed test output
89
+ Given I have a failing test in my suite
90
+ And the test suite has finished
91
+ When I pipe to xcpretty with "--simple"
92
+ Then I should see the name of a failed test
93
+ And I should see the path of a failed test
94
+
95
+ Scenario: Showing successful test output
96
+ Given I have a passing test in my suite
97
+ When I pipe to xcpretty with "--simple"
98
+ Then I should see the name of a passing test
99
+ And I should not see the name of the test group
100
+ And I should not see the path of a passing test
101
+
102
+ Scenario: Colorizing slow-ish tests in yellow
103
+ Given I have a slow-ish test in my suite
104
+ When I pipe to xcpretty with "--simple --color"
105
+ Then I should see the test time in yellow
106
+
107
+ Scenario: Colorizing slow tests in red
108
+ Given I have a slow test in my suite
109
+ When I pipe to xcpretty with "--simple --color"
110
+ Then I should see the test time in red
111
+
112
+ Scenario: Showing pending test output
113
+ Given I have a pending test in my suite
114
+ When I pipe to xcpretty with "--simple"
115
+ Then I should see the name of a pending test
116
+
117
+ Scenario: Showing failed test output with color
118
+ Given I have a failing test in my suite
119
+ And the test suite has finished
120
+ When I pipe to xcpretty with "--simple --color"
121
+ Then I should see a red failed test mark
122
+ And the final execution message should be red
123
+
124
+ Scenario: Showing successful test output with color
125
+ Given I have a passing test in my suite
126
+ And the test suite has finished
127
+ When I pipe to xcpretty with "--simple --color"
128
+ Then I should see a green passing test mark
129
+
130
+ Scenario: Running tests without UTF-8 support
131
+ Given I have a passing test in my suite
132
+ And I pipe to xcpretty with "--no-utf --color"
133
+ Then I should see a non-utf prefixed output
134
+
135
+ Scenario: Showing code signing
136
+ Given I have a file to code sign
137
+ When I pipe to xcpretty with "--simple"
138
+ Then I should see a successful code signing message
139
+
140
+ Scenario: Showing code signing a framework
141
+ Given I have a framework to code sign
142
+ When I pipe to xcpretty with "--simple"
143
+ Then I should see a successful code signing message
144
+
145
+ Scenario: Showing preprocess
146
+ Given I have a file to preprocess
147
+ When I pipe to xcpretty with "--simple"
148
+ Then I should see a successful preprocessing message
149
+
150
+ Scenario: Showing a PBXCp copy
151
+ Given I have a file to copy with PBXCp
152
+ When I pipe to xcpretty with "--simple"
153
+ Then I should see a successful copying message
154
+
155
+ Scenario: Build fails when Pod install hasn't been run
156
+ Given podfile.lock wasn't in sync
157
+ When I pipe to xcpretty with "--simple --color"
158
+ Then I should see a red error message
159
+
160
+ Scenario: Compilation fails because of syntax errors
161
+ Given there was a syntax error
162
+ When I pipe to xcpretty with "--simple --color"
163
+ Then I should see a red compilation error
164
+ And I should see a failed line
165
+ And I should see a cyan cursor
166
+
167
+ Scenario: Linker fails with undefined symbols
168
+ Given the linker has failed with undefined symbols
169
+ When I pipe to xcpretty with "--simple --color"
170
+ Then I should see the undefined symbold message
171
+ And I should see the symbol and reference that caused failure
172
+
@@ -0,0 +1,268 @@
1
+ # encoding: utf-8
2
+ Given(/^I have a file to compile$/) do
3
+ add_run_input SAMPLE_COMPILE
4
+ end
5
+
6
+ Given(/^I have a xib to compile$/) do
7
+ add_run_input SAMPLE_COMPILE_XIB
8
+ end
9
+
10
+ Given(/^I have a precompiled header$/) do
11
+ add_run_input SAMPLE_PRECOMPILE
12
+ end
13
+
14
+ Given(/^I have a file to analyze$/) do
15
+ add_run_input SAMPLE_ANALYZE
16
+ end
17
+
18
+ Given(/^I have a file to shallow analyze$/) do
19
+ add_run_input SAMPLE_ANALYZE_SHALLOW
20
+ end
21
+
22
+ Given(/^I have a failing test in my suite$/) do
23
+ add_run_input SAMPLE_OLD_SPECTA_FAILURE
24
+ end
25
+
26
+ Given(/^all of my tests will pass in my suite$/) do
27
+ 3.times { add_run_input SAMPLE_OCUNIT_TEST }
28
+ end
29
+
30
+ Given(/^I have a passing test in my suite$/) do
31
+ add_run_input SAMPLE_OCUNIT_TEST
32
+ end
33
+
34
+ Given(/^I have a slow\-ish test in my suite$/) do
35
+ add_run_input SAMPLE_SLOWISH_TEST
36
+ end
37
+
38
+ Given(/^I have a slow test in my suite$/) do
39
+ add_run_input SAMPLE_SLOW_TEST
40
+ end
41
+
42
+ Given(/^the tests have started running$/) do
43
+ add_run_input SAMPLE_OCUNIT_TEST_RUN_BEGINNING
44
+ end
45
+
46
+ Given(/^I start a test suite$/) do
47
+ add_run_input SAMPLE_OCUNIT_SUITE_BEGINNING
48
+ end
49
+
50
+ Given(/^the test suite has finished$/) do
51
+ add_run_input SAMPLE_OCUNIT_SUITE_COMPLETION
52
+ add_run_input SAMPLE_EXECUTED_TESTS
53
+ end
54
+
55
+ Given(/^I have a file to code sign$/) do
56
+ add_run_input SAMPLE_CODESIGN
57
+ end
58
+
59
+ Given(/^I have a framework to code sign$/) do
60
+ add_run_input SAMPLE_CODESIGN_FRAMEWORK
61
+ end
62
+
63
+ Given(/^I have a file to preprocess$/) do
64
+ add_run_input SAMPLE_PREPROCESS
65
+ end
66
+
67
+ Given(/^I have a file to copy with PBXCp/) do
68
+ add_run_input SAMPLE_PBXCP
69
+ end
70
+
71
+ Given(/^podfile.lock wasn't in sync$/) do
72
+ add_run_input SAMPLE_PODS_ERROR
73
+ end
74
+
75
+ Given(/^there was a syntax error$/) do
76
+ add_run_input SAMPLE_COMPILE_ERROR
77
+ end
78
+
79
+ Given(/^the linker has failed with undefined symbols$/) do
80
+ add_run_input SAMPLE_UNDEFINED_SYMBOLS
81
+ end
82
+
83
+ Given(/^I have a pending test in my suite$/) do
84
+ add_run_input SAMPLE_PENDING_KIWI_TEST
85
+ end
86
+
87
+ Given(/^I have a tiff file to validate$/) do
88
+ add_run_input SAMPLE_TIFFUTIL
89
+ end
90
+
91
+ Given(/^I have a file to touch$/) do
92
+ add_run_input SAMPLE_TOUCH
93
+ end
94
+
95
+ Then(/^I should see text beginning with "(.*?)"$/) do |text|
96
+ run_output.lines.to_a.detect {|line| line.start_with? text }.should_not be_nil
97
+ end
98
+
99
+ Then(/^I should see text containing "(.*?)" and beginning with "(.*?)"$/) do |inner, start|
100
+ run_output.lines.to_a.detect {|line| line.start_with?(start) && line.include?(inner)}.should_not be_nil
101
+ end
102
+
103
+ Then(/^I should (green|red) text beginning with "(.*?)"$/) do |color, text|
104
+ run_output.should start_with(send(color.to_sym, text))
105
+ end
106
+
107
+ Then(/^I should see a successful tiff validation message$/) do
108
+ run_output.should start_with("â–¸ Validating")
109
+ end
110
+
111
+ Then(/^I should see a successful touch message$/) do
112
+ run_output.should start_with("â–¸ Touching")
113
+ end
114
+
115
+ When(/^I pipe to xcpretty with "(.*?)"$/) do |flags|
116
+ run_xcpretty(flags)
117
+ end
118
+
119
+ When(/^I pipe to xcpretty with a custom formatter$/) do
120
+ formatter_path = File.expand_path('../../../spec/fixtures/custom_formatter.rb', __FILE__)
121
+ run_xcpretty("-f #{formatter_path}")
122
+ end
123
+
124
+ Then(/^I should see a custom compilation message$/) do
125
+ run_output.should start_with("😎 Compilation party time")
126
+ end
127
+
128
+ Then(/^I should see a successful compilation message$/) do
129
+ run_output.should start_with("â–¸ Compiling")
130
+ end
131
+
132
+ Then(/^I should see a successful precompilation message$/) do
133
+ run_output.should start_with("â–¸ Precompiling")
134
+ end
135
+
136
+ Then(/^I should see a successful analyze message$/) do
137
+ run_output.should start_with("â–¸ Analyzing")
138
+ end
139
+
140
+ Then(/^I should see a successful code signing message$/) do
141
+ run_output.should start_with("â–¸ Signing")
142
+ end
143
+
144
+ Then(/^I should see a successful preprocessing message$/) do
145
+ run_output.should start_with("â–¸ Preprocessing")
146
+ end
147
+
148
+ Then(/^I should see a successful copying message$/) do
149
+ run_output.should start_with("â–¸ Copying")
150
+ end
151
+
152
+ Then(/^I should see a yellow completion icon$/) do
153
+ run_output.should start_with(yellow("â–¸"))
154
+ end
155
+
156
+ Then(/^I should see a failed test icon$/) do
157
+ run_output.should start_with("F")
158
+ end
159
+
160
+ Then(/^I should see a passing test icon in ASCII$/) do
161
+ run_output.should start_with(".")
162
+ end
163
+
164
+ Then(/^I should see a red failed test icon$/) do
165
+ run_output.should include(red("F"))
166
+ end
167
+
168
+ Then(/^I should see a pending test icon in ASCII$/) do
169
+ run_output.should start_with("P")
170
+ end
171
+
172
+ Then(/^I should see a yellow pending test icon$/) do
173
+ run_output.should start_with(yellow("P"))
174
+ end
175
+
176
+ Then(/^the final execution message should be (red|green)$/) do |color|
177
+ last_line = run_output.lines.to_a.last
178
+ last_line.should be_colored(color.to_sym)
179
+ end
180
+
181
+ Then(/^I should see a green passing test icon$/) do
182
+ run_output.should include(green("."))
183
+ end
184
+
185
+ Then(/^I should see the name of a failed test$/) do
186
+ run_output.should =~ FAILING_TEST_NAME_MATCHER
187
+ end
188
+
189
+ Then(/^I should see the path of a failed test$/) do
190
+ run_output.should =~ TEST_PATH_MATCHER
191
+ end
192
+
193
+ Then(/^I should see the name of a passing test$/) do
194
+ run_output.should =~ PASSING_TEST_NAME_MATCHER
195
+ end
196
+
197
+ Then(/^I should not see the path of a passing test$/) do
198
+ run_output.should_not =~ TEST_PATH_MATCHER
199
+ end
200
+
201
+ Then(/^I should see that test suite has started$/) do
202
+ run_output.should =~ TEST_RUN_START_MATCHER
203
+ end
204
+
205
+ Then(/^I should see the name of suite only$/) do
206
+ run_output.should =~ TEST_SUITE_START_MATCHER
207
+ end
208
+
209
+ Then(/^I should see that the test suite finished$/) do
210
+ run_output.strip.should =~ TEST_SUITE_COMPLETION_MATCHER
211
+ end
212
+
213
+ Then(/^I should see a red failed test mark$/) do
214
+ run_output.should include(red("✗"))
215
+ end
216
+
217
+ Then(/^I should see a green passing test mark$/) do
218
+ run_output.should include(green("✓"))
219
+ end
220
+
221
+ Then(/^I should see a non-utf prefixed output$/) do
222
+ run_output.should start_with(" " + green("."))
223
+ end
224
+
225
+ Then(/^I should not see the name of the test group$/) do
226
+ run_output.should_not include("RACTupleSpec")
227
+ end
228
+
229
+ Then(/^I should see a red error message$/) do
230
+ run_output.should include(red("⌦ " + SAMPLE_PODS_ERROR.gsub('error: ', '')))
231
+ end
232
+
233
+ Then(/^I should see a red compilation error$/) do
234
+ run_output.should include(red("expected identifier"))
235
+ end
236
+
237
+ Then(/^I should see a failed line$/) do
238
+ run_output.should include("[[thread.lastMessage should] equal:thread.];")
239
+ end
240
+
241
+ Then(/^I should see a cyan cursor$/) do
242
+ run_output.should include(cyan(" ^"))
243
+ end
244
+
245
+ Then(/^I should see the undefined symbold message$/) do
246
+ run_output.should include(red("⌦ Undefined symbols for architecture x86_64"))
247
+ end
248
+
249
+ Then(/^I should see the symbol and reference that caused failure$/) do
250
+ run_output.should include("_OBJC_CLASS_$_CABasicAnimation")
251
+ run_output.should include("objc-class-ref in ATZRadialProgressControl.o")
252
+ end
253
+
254
+ Then(/^I should see the name of a pending test$/) do
255
+ run_output.should =~ PENDING_TEST_NAME_MATCHER
256
+ end
257
+
258
+ Then(/^I should see the test time in yellow$/) do
259
+ run_output.should include("#{yellow("0.026")}")
260
+ end
261
+
262
+ Then(/^I should see the test time in red$/) do
263
+ run_output.should include("#{red("0.101")}")
264
+ end
265
+
266
+ Then(/^I should see text matching "(.*?)"$/) do |text|
267
+ run_output.lines.to_a.last.strip.should == text
268
+ end