xcpretty 0.1.12 → 0.2.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.
- checksums.yaml +4 -4
- data/.hound.yml +2 -10
- data/.rubocop.yml +239 -0
- data/.travis.yml +1 -8
- data/CHANGELOG.md +35 -0
- data/Gemfile +1 -0
- data/README.md +23 -76
- data/Rakefile +10 -8
- data/bin/xcpretty +14 -14
- data/features/simple_format.feature +39 -17
- data/features/steps/formatting_steps.rb +33 -4
- data/features/steps/html_steps.rb +1 -0
- data/features/steps/json_steps.rb +2 -1
- data/features/steps/junit_steps.rb +4 -3
- data/features/steps/report_steps.rb +1 -0
- data/features/support/env.rb +4 -3
- data/features/test_format.feature +4 -4
- data/lib/xcpretty/ansi.rb +14 -13
- data/lib/xcpretty/formatters/formatter.rb +24 -8
- data/lib/xcpretty/formatters/knock.rb +2 -1
- data/lib/xcpretty/formatters/rspec.rb +1 -0
- data/lib/xcpretty/formatters/simple.rb +18 -3
- data/lib/xcpretty/formatters/tap.rb +3 -2
- data/lib/xcpretty/parser.rb +38 -15
- data/lib/xcpretty/printer.rb +1 -0
- data/lib/xcpretty/reporters/html.rb +7 -5
- data/lib/xcpretty/reporters/json_compilation_database.rb +6 -10
- data/lib/xcpretty/reporters/junit.rb +6 -3
- data/lib/xcpretty/snippet.rb +0 -2
- data/lib/xcpretty/syntax.rb +38 -31
- data/lib/xcpretty/term.rb +14 -0
- data/lib/xcpretty/version.rb +2 -1
- data/lib/xcpretty.rb +5 -6
- data/spec/fixtures/constants.rb +15 -2
- data/spec/fixtures/custom_formatter.rb +2 -1
- data/spec/spec_helper.rb +2 -1
- data/spec/support/matchers/colors.rb +1 -0
- data/spec/xcpretty/ansi_spec.rb +1 -0
- data/spec/xcpretty/formatters/formatter_spec.rb +27 -16
- data/spec/xcpretty/formatters/rspec_spec.rb +1 -0
- data/spec/xcpretty/formatters/simple_spec.rb +22 -3
- data/spec/xcpretty/parser_spec.rb +39 -10
- data/spec/xcpretty/printer_spec.rb +15 -13
- data/spec/xcpretty/syntax_spec.rb +24 -48
- data/spec/xcpretty/term_spec.rb +26 -0
- data/xcpretty.gemspec +15 -11
- metadata +42 -14
- data/vendor/json_pure/COPYING +0 -57
- data/vendor/json_pure/LICENSE +0 -340
- data/vendor/json_pure/generator.rb +0 -443
- data/vendor/json_pure/parser.rb +0 -364
@@ -2,19 +2,29 @@ Feature: Showing build output in simple format
|
|
2
2
|
|
3
3
|
Scenario: Showing file compilation
|
4
4
|
Given I have a file to compile
|
5
|
-
When I pipe to xcpretty with "--simple"
|
5
|
+
When I pipe to xcpretty with "--simple --no-color"
|
6
6
|
Then I should see a successful compilation message
|
7
7
|
|
8
8
|
Scenario: Showing xib compilation
|
9
9
|
Given I have a xib to compile
|
10
|
+
When I pipe to xcpretty with "--simple --no-color"
|
11
|
+
Then I should see a successful compilation message
|
12
|
+
|
13
|
+
Scenario: Showing storyboard compilation
|
14
|
+
Given I have a storyboard to compile
|
10
15
|
When I pipe to xcpretty with "--simple"
|
11
16
|
Then I should see a successful compilation message
|
12
17
|
|
13
18
|
Scenario: Showing precompilation
|
14
19
|
Given I have a precompiled header
|
15
|
-
When I pipe to xcpretty with "--simple"
|
20
|
+
When I pipe to xcpretty with "--simple --no-color"
|
16
21
|
Then I should see a successful precompilation message
|
17
22
|
|
23
|
+
Scenario: Showing phase success
|
24
|
+
Given I have completed a build
|
25
|
+
When I pipe to xcpretty with "--simple"
|
26
|
+
Then I should see a "build" completion message
|
27
|
+
|
18
28
|
Scenario: Showing file compilation with color
|
19
29
|
Given I have a file to compile
|
20
30
|
When I pipe to xcpretty with "--simple --color"
|
@@ -25,6 +35,11 @@ Feature: Showing build output in simple format
|
|
25
35
|
When I pipe to xcpretty with "--simple --color"
|
26
36
|
Then I should see a yellow completion icon
|
27
37
|
|
38
|
+
Scenario: Showing storyboard compilation with color
|
39
|
+
Given I have a storyboard to compile
|
40
|
+
When I pipe to xcpretty with "--simple --color"
|
41
|
+
Then I should see a yellow completion icon
|
42
|
+
|
28
43
|
Scenario: Showing precompilation
|
29
44
|
Given I have a precompiled header
|
30
45
|
When I pipe to xcpretty with "--simple --color"
|
@@ -32,22 +47,22 @@ Feature: Showing build output in simple format
|
|
32
47
|
|
33
48
|
Scenario: Showing analyze
|
34
49
|
Given I have a file to analyze
|
35
|
-
When I pipe to xcpretty with "--simple"
|
50
|
+
When I pipe to xcpretty with "--simple --no-color"
|
36
51
|
Then I should see a successful analyze message
|
37
52
|
|
38
53
|
Scenario: Showing shallow analyze
|
39
54
|
Given I have a file to shallow analyze
|
40
|
-
When I pipe to xcpretty with "--simple"
|
55
|
+
When I pipe to xcpretty with "--simple --no-color"
|
41
56
|
Then I should see a successful analyze message
|
42
57
|
|
43
58
|
Scenario: Showing tiff file validation
|
44
59
|
Given I have a tiff file to validate
|
45
|
-
When I pipe to xcpretty with "--simple"
|
60
|
+
When I pipe to xcpretty with "--simple --no-color"
|
46
61
|
Then I should see a successful tiff validation message
|
47
62
|
|
48
63
|
Scenario: Showing touch file
|
49
64
|
Given I have a file to touch
|
50
|
-
When I pipe to xcpretty with "--simple"
|
65
|
+
When I pipe to xcpretty with "--simple --no-color"
|
51
66
|
Then I should see a successful touch message
|
52
67
|
|
53
68
|
Scenario: Showing analyze with color
|
@@ -72,29 +87,29 @@ Feature: Showing build output in simple format
|
|
72
87
|
|
73
88
|
Scenario: Showing the start of a test run
|
74
89
|
Given the tests have started running
|
75
|
-
When I pipe to xcpretty with "--simple"
|
90
|
+
When I pipe to xcpretty with "--simple --no-color"
|
76
91
|
Then I should see that test suite has started
|
77
92
|
|
78
93
|
Scenario: Showing the start of a test suite
|
79
94
|
Given I start a test suite
|
80
|
-
When I pipe to xcpretty with "--simple"
|
95
|
+
When I pipe to xcpretty with "--simple --no-color"
|
81
96
|
Then I should see the name of suite only
|
82
97
|
|
83
98
|
Scenario: Showing the end of a test suite
|
84
99
|
Given the test suite has finished
|
85
|
-
When I pipe to xcpretty with "--simple"
|
100
|
+
When I pipe to xcpretty with "--simple --no-color"
|
86
101
|
Then I should see that the test suite finished
|
87
102
|
|
88
103
|
Scenario: Showing failed test output
|
89
104
|
Given I have a failing test in my suite
|
90
105
|
And the test suite has finished
|
91
|
-
When I pipe to xcpretty with "--simple"
|
106
|
+
When I pipe to xcpretty with "--simple --no-color"
|
92
107
|
Then I should see the name of a failed test
|
93
108
|
And I should see the path of a failed test
|
94
109
|
|
95
110
|
Scenario: Showing successful test output
|
96
111
|
Given I have a passing test in my suite
|
97
|
-
When I pipe to xcpretty with "--simple"
|
112
|
+
When I pipe to xcpretty with "--simple --no-color"
|
98
113
|
Then I should see the name of a passing test
|
99
114
|
And I should not see the name of the test group
|
100
115
|
And I should not see the path of a passing test
|
@@ -111,12 +126,12 @@ Feature: Showing build output in simple format
|
|
111
126
|
|
112
127
|
Scenario: Showing pending test output
|
113
128
|
Given I have a pending test in my suite
|
114
|
-
When I pipe to xcpretty with "--simple"
|
129
|
+
When I pipe to xcpretty with "--simple --no-color"
|
115
130
|
Then I should see the name of a pending test
|
116
131
|
|
117
132
|
Scenario: Showing measuring test output
|
118
133
|
Given I have a measuring test in my suite
|
119
|
-
When I pipe to xcpretty with "--simple"
|
134
|
+
When I pipe to xcpretty with "--simple --no-color"
|
120
135
|
Then I should see the name of a measuring test
|
121
136
|
|
122
137
|
Scenario: Showing failed test output with color
|
@@ -139,28 +154,35 @@ Feature: Showing build output in simple format
|
|
139
154
|
|
140
155
|
Scenario: Showing code signing
|
141
156
|
Given I have a file to code sign
|
142
|
-
When I pipe to xcpretty with "--simple"
|
157
|
+
When I pipe to xcpretty with "--simple --no-color"
|
143
158
|
Then I should see a successful code signing message
|
144
159
|
|
145
160
|
Scenario: Showing code signing a framework
|
146
161
|
Given I have a framework to code sign
|
147
|
-
When I pipe to xcpretty with "--simple"
|
162
|
+
When I pipe to xcpretty with "--simple --no-color"
|
148
163
|
Then I should see a successful code signing message
|
149
164
|
|
150
165
|
Scenario: Showing preprocess
|
151
166
|
Given I have a file to preprocess
|
152
|
-
When I pipe to xcpretty with "--simple"
|
167
|
+
When I pipe to xcpretty with "--simple --no-color"
|
153
168
|
Then I should see a successful preprocessing message
|
154
169
|
|
155
170
|
Scenario: Showing a PBXCp copy
|
156
171
|
Given I have a file to copy with PBXCp
|
157
|
-
When I pipe to xcpretty with "--simple"
|
172
|
+
When I pipe to xcpretty with "--simple --no-color"
|
158
173
|
Then I should see a successful copying message
|
159
174
|
|
160
175
|
Scenario: Build fails when Pod install hasn't been run
|
161
176
|
Given podfile.lock wasn't in sync
|
162
177
|
When I pipe to xcpretty with "--simple --color"
|
163
178
|
Then I should see a red error message
|
179
|
+
And I should see that sandbox is not in sync with Podfile.lock
|
180
|
+
|
181
|
+
Scenario: Compilation fails because missing files in the project
|
182
|
+
Given there was a missing file
|
183
|
+
When I pipe to xcpretty with "--simple --color"
|
184
|
+
Then I should see a red error message
|
185
|
+
And I should see which file is missing
|
164
186
|
|
165
187
|
Scenario: Compilation fails because of syntax errors
|
166
188
|
Given there was a syntax error
|
@@ -7,6 +7,10 @@ Given(/^I have a xib to compile$/) do
|
|
7
7
|
add_run_input SAMPLE_COMPILE_XIB
|
8
8
|
end
|
9
9
|
|
10
|
+
Given(/^I have a storyboard to compile$/) do
|
11
|
+
add_run_input SAMPLE_COMPILE_STORYBOARD
|
12
|
+
end
|
13
|
+
|
10
14
|
Given(/^I have a precompiled header$/) do
|
11
15
|
add_run_input SAMPLE_PRECOMPILE
|
12
16
|
end
|
@@ -76,6 +80,10 @@ Given(/^there was a syntax error$/) do
|
|
76
80
|
add_run_input SAMPLE_COMPILE_ERROR
|
77
81
|
end
|
78
82
|
|
83
|
+
Given(/^there was a missing file$/) do
|
84
|
+
add_run_input SAMPLE_FILE_MISSING_ERROR
|
85
|
+
end
|
86
|
+
|
79
87
|
Given(/^there were warnings in the code$/) do
|
80
88
|
add_run_input SAMPLE_FORMAT_WARNING
|
81
89
|
end
|
@@ -108,12 +116,24 @@ Given(/^I have an unrelated image in the output folder/) do
|
|
108
116
|
copy_file_to_screenshot_dir(SAMPLE_UNRELATED_IMAGE_FILE)
|
109
117
|
end
|
110
118
|
|
119
|
+
Given(/^I have completed a build$/) do
|
120
|
+
add_run_input SAMPLE_BUILD_SUCCEEDED
|
121
|
+
end
|
122
|
+
|
123
|
+
Given(/^I have completed a clean$/) do
|
124
|
+
add_run_input SAMPLE_CLEAN_SUCCEEDED
|
125
|
+
end
|
126
|
+
|
127
|
+
Then(/^I should see a "(\w+)" completion message$/) do |phase|
|
128
|
+
run_output.should start_with("▸ #{phase.capitalize} Succeeded")
|
129
|
+
end
|
130
|
+
|
111
131
|
Then(/^I should see text beginning with "(.*?)"$/) do |text|
|
112
|
-
run_output.lines.to_a.detect {|line| line.start_with? text }.should_not be_nil
|
132
|
+
run_output.lines.to_a.detect { |line| line.start_with? text }.should_not be_nil
|
113
133
|
end
|
114
134
|
|
115
135
|
Then(/^I should see text containing "(.*?)" and beginning with "(.*?)"$/) do |inner, start|
|
116
|
-
run_output.lines.to_a.detect {|line| line.start_with?(start) && line.include?(inner)}.should_not be_nil
|
136
|
+
run_output.lines.to_a.detect { |line| line.start_with?(start) && line.include?(inner) }.should_not be_nil
|
117
137
|
end
|
118
138
|
|
119
139
|
Then(/^I should (green|red) text beginning with "(.*?)"$/) do |color, text|
|
@@ -251,7 +271,15 @@ Then(/^I should not see the name of the test group$/) do
|
|
251
271
|
end
|
252
272
|
|
253
273
|
Then(/^I should see a red error message$/) do
|
254
|
-
run_output.should include(red("
|
274
|
+
run_output.should include(red("❌ error: ")[0..-5]) # trim \e[0m
|
275
|
+
end
|
276
|
+
|
277
|
+
Then(/^I should see that sandbox is not in sync with Podfile.lock$/) do
|
278
|
+
run_output.should include("The sandbox is not in sync with the Podfile.lock")
|
279
|
+
end
|
280
|
+
|
281
|
+
Then(/^I should see which file is missing$/) do
|
282
|
+
run_output.should include(SAMPLE_FILE_MISSING_ERROR.split('directory: ')[1].delete("'"))
|
255
283
|
end
|
256
284
|
|
257
285
|
Then(/^I should see a yellow warning message$/) do
|
@@ -272,7 +300,7 @@ Then(/^I should see a cyan cursor$/) do
|
|
272
300
|
end
|
273
301
|
|
274
302
|
Then(/^I should see the undefined symbold message$/) do
|
275
|
-
run_output.should include(red("
|
303
|
+
run_output.should include(red("❌ Undefined symbols for architecture x86_64"))
|
276
304
|
end
|
277
305
|
|
278
306
|
Then(/^I should see the symbol and reference that caused failure$/) do
|
@@ -299,3 +327,4 @@ end
|
|
299
327
|
Then(/^I should see text matching "(.*?)"$/) do |text|
|
300
328
|
run_output.lines.to_a.last.strip.should == text
|
301
329
|
end
|
330
|
+
|
@@ -31,6 +31,7 @@ Then(/^the JSON compilation database should contain an entry with a directory$/)
|
|
31
31
|
end
|
32
32
|
|
33
33
|
Then(/^the JSON compilation database should be complete$/) do
|
34
|
-
entries = json_db.select {|entry| entry['command'] && entry['file'] && entry['directory']}
|
34
|
+
entries = json_db.select { |entry| entry['command'] && entry['file'] && entry['directory'] }
|
35
35
|
entries.length.should == JSON_DB_FIXTURE_COMMAND_COUNT
|
36
36
|
end
|
37
|
+
|
@@ -13,7 +13,7 @@ end
|
|
13
13
|
|
14
14
|
Then(/^I should see a pending test node in my report$/) do
|
15
15
|
junit_report_root.elements.to_a.detect do |node|
|
16
|
-
node.elements.to_a.detect {|child| child.name == 'skipped'}
|
16
|
+
node.elements.to_a.detect { |child| child.name == 'skipped' }
|
17
17
|
end.should_not be_nil
|
18
18
|
end
|
19
19
|
|
@@ -23,16 +23,17 @@ end
|
|
23
23
|
|
24
24
|
Then(/^I should see (\d+) tests in my report$/) do |test_count|
|
25
25
|
junit_report_root.attributes["tests"].should == test_count
|
26
|
-
junit_report_root.elements.to_a.
|
26
|
+
junit_report_root.elements.to_a.size.should == test_count.to_i
|
27
27
|
end
|
28
28
|
|
29
29
|
Then(/^I should see (\d+) test suites$/) do |count|
|
30
30
|
suites = junit_report.root.elements.to_a
|
31
31
|
suites.size.should == count.to_i
|
32
|
-
suites.
|
32
|
+
suites.count { |s| s.name == 'testsuite' }.should == count.to_i
|
33
33
|
end
|
34
34
|
|
35
35
|
Then(/^I should have a test report at "(.*?)"$/) do |path|
|
36
36
|
doc = REXML::Document.new(File.open(path, 'r').read)
|
37
37
|
doc.root.should_not be_nil
|
38
38
|
end
|
39
|
+
|
data/features/support/env.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../..', __FILE__)
|
2
2
|
|
3
3
|
require 'tempfile'
|
4
4
|
require 'spec/fixtures/constants'
|
@@ -20,7 +20,7 @@ end
|
|
20
20
|
|
21
21
|
include XCPretty::ANSI
|
22
22
|
|
23
|
-
TEST_RUN_START_MATCHER
|
23
|
+
TEST_RUN_START_MATCHER = /Test Suite .+ started/
|
24
24
|
TEST_SUITE_COMPLETION_MATCHER = /Executed \d+ tests, with \d+ failures \(\d+ unexpected\) in \d+\.\d+ \(\d+\.\d+\) seconds/
|
25
25
|
TEST_SUITE_START_MATCHER = /[\w]*(Spec|Tests)$/
|
26
26
|
TEST_PATH_MATCHER = %r{[\w/\-\s]+:\d+}
|
@@ -53,7 +53,7 @@ def run_output
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def html_report
|
56
|
-
@html_report ||= REXML::Document.new(File.open(XCPretty::HTML::FILEPATH, 'r').read.sub("<!DOCTYPE html>",""))
|
56
|
+
@html_report ||= REXML::Document.new(File.open(XCPretty::HTML::FILEPATH, 'r').read.sub("<!DOCTYPE html>", ""))
|
57
57
|
end
|
58
58
|
|
59
59
|
def html_report_body
|
@@ -114,3 +114,4 @@ After do
|
|
114
114
|
FileUtils.rm_rf(XCPretty::JSONCompilationDatabase::FILE_PATH)
|
115
115
|
File.delete(@screenshot_file_path) if @screenshot_file_path
|
116
116
|
end
|
117
|
+
|
@@ -2,22 +2,22 @@ Feature: Showing RSpec-style test output
|
|
2
2
|
|
3
3
|
Scenario: Showing failed tests
|
4
4
|
Given I have a failing test in my suite
|
5
|
-
When I pipe to xcpretty with "--test"
|
5
|
+
When I pipe to xcpretty with "--test --no-color"
|
6
6
|
Then I should see a failed test icon
|
7
7
|
|
8
8
|
Scenario: Showing passing tests
|
9
9
|
Given I have a passing test in my suite
|
10
|
-
When I pipe to xcpretty with "--test"
|
10
|
+
When I pipe to xcpretty with "--test --no-color"
|
11
11
|
Then I should see a passing test icon in ASCII
|
12
12
|
|
13
13
|
Scenario: Showing pending tests
|
14
14
|
Given I have a pending test in my suite
|
15
|
-
When I pipe to xcpretty with "--test"
|
15
|
+
When I pipe to xcpretty with "--test --no-color"
|
16
16
|
Then I should see a pending test icon in ASCII
|
17
17
|
|
18
18
|
Scenario: Showing measuring tests
|
19
19
|
Given I have a measuring test in my suite
|
20
|
-
When I pipe to xcpretty with "--test"
|
20
|
+
When I pipe to xcpretty with "--test --no-color"
|
21
21
|
Then I should see a measuring test icon in ASCII
|
22
22
|
|
23
23
|
Scenario: Showing some tests failed with color
|
data/lib/xcpretty/ansi.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
module XCPretty
|
2
2
|
module ANSI
|
3
|
-
|
3
|
+
|
4
4
|
attr_accessor :colorize
|
5
5
|
|
6
6
|
FORMATTED_MATCHER = %r{\e\[(\d+)[;]?(\d+)?m(.*)\e\[0m}
|
7
7
|
|
8
8
|
EFFECT = {
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
9
|
+
reset: '0',
|
10
|
+
bold: '1',
|
11
|
+
underline: '4'
|
12
12
|
}
|
13
13
|
|
14
14
|
COLORS = {
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
15
|
+
black: '30',
|
16
|
+
red: '31',
|
17
|
+
green: '32',
|
18
|
+
yellow: '33',
|
19
|
+
blue: '34',
|
20
|
+
cyan: '36',
|
21
|
+
white: '37',
|
22
|
+
plain: '39'
|
23
23
|
}
|
24
24
|
|
25
25
|
def colorize?
|
@@ -63,9 +63,10 @@ module XCPretty
|
|
63
63
|
|
64
64
|
def ansi_parse(text, color, effect=nil)
|
65
65
|
return text unless colorize?
|
66
|
-
colors_code = COLORS[color]
|
66
|
+
colors_code = COLORS[color] || ''
|
67
67
|
effect_code = EFFECT[effect] ? ';' + EFFECT[effect] : ''
|
68
68
|
"\e[#{colors_code}#{effect_code}m#{text}\e[#{EFFECT[:reset]}m"
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
+
|
@@ -18,6 +18,7 @@ module XCPretty
|
|
18
18
|
def format_clean_remove; EMPTY; end
|
19
19
|
def format_compile(file_name, file_path); EMPTY; end
|
20
20
|
def format_compile_command(compiler_command, file_path); EMPTY; end
|
21
|
+
def format_compile_storyboard(file_name, file_path); EMPTY; end
|
21
22
|
def format_compile_xib(file_name, file_path); EMPTY; end
|
22
23
|
def format_copy_header_file(source, target); EMPTY; end
|
23
24
|
def format_copy_plist_file(source, target); EMPTY; end
|
@@ -32,6 +33,7 @@ module XCPretty
|
|
32
33
|
def format_failing_test(suite, test, time, file_path); EMPTY; end
|
33
34
|
def format_process_pch(file); EMPTY; end
|
34
35
|
def format_process_pch_command(file_path); EMPTY; end
|
36
|
+
def format_phase_success(phase_name); EMPTY; end
|
35
37
|
def format_phase_script_execution(script_name); EMPTY; end
|
36
38
|
def format_process_info_plist(file_name, file_path); EMPTY; end
|
37
39
|
def format_codesign(file); EMPTY; end
|
@@ -51,6 +53,7 @@ module XCPretty
|
|
51
53
|
def format_compile_error(file_name, file_path, reason,
|
52
54
|
line, cursor); EMPTY; end
|
53
55
|
def format_error(message); EMPTY; end
|
56
|
+
def format_file_missing_error(error, file_path); EMPTY; end
|
54
57
|
def format_undefined_symbols(message, symbol, reference); EMPTY; end
|
55
58
|
def format_duplicate_symbols(message, file_paths); EMPTY; end
|
56
59
|
def format_warning(message); message; end
|
@@ -91,13 +94,17 @@ module XCPretty
|
|
91
94
|
# Will be printed by default. Override with '' if you don't want summary
|
92
95
|
def format_test_summary(executed_message, failures_per_suite)
|
93
96
|
failures = format_failures(failures_per_suite)
|
94
|
-
|
97
|
+
if failures.empty?
|
98
|
+
final_message = green(executed_message)
|
99
|
+
else
|
100
|
+
final_message = red(executed_message)
|
101
|
+
end
|
95
102
|
|
96
103
|
text = [failures, final_message].join("\n\n\n").strip
|
97
104
|
"\n\n#{text}"
|
98
105
|
end
|
99
106
|
|
100
|
-
ERROR = '
|
107
|
+
ERROR = '❌ '
|
101
108
|
ASCII_ERROR = '[x]'
|
102
109
|
|
103
110
|
WARNING = '⚠️ '
|
@@ -108,23 +115,31 @@ module XCPretty
|
|
108
115
|
end
|
109
116
|
|
110
117
|
def format_compile_error(file, file_path, reason, line, cursor)
|
111
|
-
"\n#{red(error_symbol + " ")}#{file_path}: #{red(reason)}\n\n"
|
118
|
+
"\n#{red(error_symbol + " ")}#{file_path}: #{red(reason)}\n\n" \
|
112
119
|
"#{line}\n#{cyan(cursor)}\n\n"
|
113
120
|
end
|
114
121
|
|
122
|
+
def format_file_missing_error(reason, file_path)
|
123
|
+
"\n#{red(error_symbol + " " + reason)} #{file_path}\n\n"
|
124
|
+
end
|
125
|
+
|
115
126
|
def format_compile_warning(file, file_path, reason, line, cursor)
|
116
|
-
"\n#{yellow(warning_symbol + ' ')}#{file_path}: #{yellow(reason)}\n\n"
|
127
|
+
"\n#{yellow(warning_symbol + ' ')}#{file_path}: #{yellow(reason)}\n\n" \
|
117
128
|
"#{line}\n#{cyan(cursor)}\n\n"
|
118
129
|
end
|
119
130
|
|
131
|
+
def format_ld_warning(reason)
|
132
|
+
"#{yellow(warning_symbol + ' ' + reason)}"
|
133
|
+
end
|
134
|
+
|
120
135
|
def format_undefined_symbols(message, symbol, reference)
|
121
|
-
"\n#{red(error_symbol + " " + message)}\n"
|
122
|
-
"> Symbol: #{symbol}\n"
|
136
|
+
"\n#{red(error_symbol + " " + message)}\n" \
|
137
|
+
"> Symbol: #{symbol}\n" \
|
123
138
|
"> Referenced from: #{reference}\n\n"
|
124
139
|
end
|
125
140
|
|
126
141
|
def format_duplicate_symbols(message, file_paths)
|
127
|
-
"\n#{red(error_symbol + " " + message)}\n"
|
142
|
+
"\n#{red(error_symbol + " " + message)}\n" \
|
128
143
|
"> #{file_paths.map { |path| path.split('/').last }.join("\n> ")}\n"
|
129
144
|
end
|
130
145
|
|
@@ -142,7 +157,7 @@ module XCPretty
|
|
142
157
|
end
|
143
158
|
|
144
159
|
def format_failure(f)
|
145
|
-
" #{f[:test_case]}, #{red(f[:reason])}\n #{cyan(f[:file_path])}\n"
|
160
|
+
" #{f[:test_case]}, #{red(f[:reason])}\n #{cyan(f[:file_path])}\n" \
|
146
161
|
" ```\n" +
|
147
162
|
Syntax.highlight(Snippet.from_filepath(f[:file_path])) +
|
148
163
|
" ```"
|
@@ -158,3 +173,4 @@ module XCPretty
|
|
158
173
|
|
159
174
|
end
|
160
175
|
end
|
176
|
+
|
@@ -8,11 +8,11 @@ module XCPretty
|
|
8
8
|
PASS = "✓"
|
9
9
|
FAIL = "✗"
|
10
10
|
PENDING = "⧖"
|
11
|
+
COMPLETION = "▸"
|
11
12
|
MEASURE = '◷'
|
12
13
|
|
13
14
|
ASCII_PASS = "."
|
14
15
|
ASCII_FAIL = "x"
|
15
|
-
COMPLETION = "▸"
|
16
16
|
ASCII_PENDING = "P"
|
17
17
|
ASCII_COMPLETION = ">"
|
18
18
|
ASCII_MEASURE = 'T'
|
@@ -43,6 +43,10 @@ module XCPretty
|
|
43
43
|
format("Compiling", file_name)
|
44
44
|
end
|
45
45
|
|
46
|
+
def format_compile_storyboard(file_name, file_path)
|
47
|
+
format("Compiling", file_name)
|
48
|
+
end
|
49
|
+
|
46
50
|
def format_copy_header_file(source, target)
|
47
51
|
format("Copying", File.basename(source))
|
48
52
|
end
|
@@ -76,7 +80,8 @@ module XCPretty
|
|
76
80
|
end
|
77
81
|
|
78
82
|
def format_passing_test(suite, test_case, time)
|
79
|
-
INDENT + format_test("#{test_case} (#{colored_time(time)} seconds)",
|
83
|
+
INDENT + format_test("#{test_case} (#{colored_time(time)} seconds)",
|
84
|
+
:pass)
|
80
85
|
end
|
81
86
|
|
82
87
|
def format_pending_test(suite, test_case)
|
@@ -89,6 +94,10 @@ module XCPretty
|
|
89
94
|
)
|
90
95
|
end
|
91
96
|
|
97
|
+
def format_phase_success(phase_name)
|
98
|
+
format(phase_name.capitalize, "Succeeded")
|
99
|
+
end
|
100
|
+
|
92
101
|
def format_phase_script_execution(script_name)
|
93
102
|
format("Running script", "'#{script_name}'")
|
94
103
|
end
|
@@ -133,6 +142,10 @@ module XCPretty
|
|
133
142
|
INDENT + yellow(message)
|
134
143
|
end
|
135
144
|
|
145
|
+
def format_check_dependencies
|
146
|
+
format('Check Dependencies')
|
147
|
+
end
|
148
|
+
|
136
149
|
private
|
137
150
|
|
138
151
|
def heading(prefix, text, description)
|
@@ -140,7 +153,8 @@ module XCPretty
|
|
140
153
|
end
|
141
154
|
|
142
155
|
def format(command, argument_text="", success=true)
|
143
|
-
|
156
|
+
symbol = status_symbol(success ? :completion : :fail)
|
157
|
+
[symbol, white(command), argument_text].join(" ").strip
|
144
158
|
end
|
145
159
|
|
146
160
|
def format_test(test_case, status)
|
@@ -179,3 +193,4 @@ module XCPretty
|
|
179
193
|
|
180
194
|
end
|
181
195
|
end
|
196
|
+
|