xcpretty 0.0.3 → 0.0.4
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/CHANGELOG.md +18 -0
- data/README.md +16 -1
- data/bin/xcpretty +4 -0
- data/features/simple_format.feature +60 -54
- data/features/steps/formatting_steps.rb +23 -13
- data/features/support/env.rb +15 -11
- data/features/test_format.feature +22 -22
- data/lib/xcpretty/ansi.rb +70 -0
- data/lib/xcpretty/printer.rb +61 -45
- data/lib/xcpretty/printers/rspec.rb +2 -2
- data/lib/xcpretty/printers/simple.rb +28 -11
- data/lib/xcpretty/version.rb +1 -1
- data/spec/fixtures/constants.rb +10 -2
- data/spec/spec_helper.rb +6 -0
- data/spec/support/matchers/colors.rb +18 -0
- data/spec/xcpretty/ansi_spec.rb +46 -0
- data/spec/xcpretty/printer_spec.rb +88 -0
- data/spec/xcpretty/printers/printer_spec.rb +50 -10
- data/spec/xcpretty/printers/rspec_spec.rb +21 -5
- data/spec/xcpretty/printers/simple_spec.rb +26 -17
- data/xcpretty.gemspec +0 -2
- metadata +12 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31863314278364422289e7c4779a6683d041dd24
|
4
|
+
data.tar.gz: f6aa3f0ec6ec0b35d5b68eda5e0b3fd4b7471a3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 758a1e2ece5183a65bd5e5a2760f64fcb9c740db4ee15d00ada137d9a5660b68e095512ff5e1eaf2f3999fbc5ed2891c4c7a97cea2b096dacd82e0666846fbb2
|
7
|
+
data.tar.gz: 948b4c6b735cc76abed63d14657af2e28e9137445d1c9071a8884048e8ddbb59a7bf7ddbea871349ea214e8b87a51b2552113b794f2cc70175e4a91f8f12f91f
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -39,7 +39,22 @@ At this point, `xcodebuild` has got improved a lot, and it's ready to be used di
|
|
39
39
|
|
40
40
|
There are many usages of this tool. Let me give you some ideas:
|
41
41
|
- Xcode's test tools are close to useless. Failures in a sidebar, non-dettachable console,... You can use `xcpretty` to build your next Xcode test runner plugin
|
42
|
-
- Run tests each time you hit save.
|
42
|
+
- Run tests each time you hit save. Here's an example of doing so:
|
43
|
+
|
44
|
+
``` ruby
|
45
|
+
require 'listen'
|
46
|
+
ignored = [/.git/, /xcuserdata/, /\.txt$/, /test-reports/]
|
47
|
+
build_task = "xcodebuild -workspace Myapp.xcworkspace -scheme MyApp -sdk iphonesimulator -destination 'name=iPhone Retina (4-inch 64-bit)'"
|
48
|
+
|
49
|
+
listener = Listen.to(Dir.pwd, ignore: ignored) do |modified, added, removed|
|
50
|
+
system 'killall "iPhone Simulator"'
|
51
|
+
system "#{build_task} test | xcpretty -tc"
|
52
|
+
end
|
53
|
+
|
54
|
+
listener.start
|
55
|
+
sleep
|
56
|
+
```
|
57
|
+
Just add this to your Rakefile, or in a ruby script. Make sure you `gem install listen`.
|
43
58
|
- Mine Bitcoins. You can't with this tool, but you'll be so productive that you can earn all the money and buy them!!!1!
|
44
59
|
|
45
60
|
## Roadmap
|
data/bin/xcpretty
CHANGED
@@ -22,10 +22,14 @@ OptionParser.new do |opts|
|
|
22
22
|
opts.on('-c', '--color', 'Use colorized output') do
|
23
23
|
@colorize = true
|
24
24
|
end
|
25
|
+
opts.on('--no-utf', 'Disable unicode characters in output') do
|
26
|
+
@unicode = false
|
27
|
+
end
|
25
28
|
opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
|
26
29
|
opts.on_tail("-v", "--version", "Show version") { puts XCPretty::VERSION; exit }
|
27
30
|
opts.parse!
|
28
31
|
printer.colorize = @colorize
|
32
|
+
printer.use_unicode = @unicode || true
|
29
33
|
end
|
30
34
|
|
31
35
|
ARGF.each_line do |line|
|
@@ -1,56 +1,62 @@
|
|
1
1
|
Feature: Showing build output in simple format
|
2
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 precompilation
|
9
|
-
Given I have a precompiled header
|
10
|
-
When I pipe to xcpretty with "--simple"
|
11
|
-
Then I should see a successful precompilation message
|
12
|
-
|
13
|
-
Scenario: Showing file compilation with color
|
14
|
-
Given I have a file to compile
|
15
|
-
When I pipe to xcpretty with "--simple --color"
|
16
|
-
Then I should see a
|
17
|
-
|
18
|
-
Scenario: Showing precompilation
|
19
|
-
Given I have a precompiled header
|
20
|
-
When I pipe to xcpretty with "--simple --color"
|
21
|
-
Then I should see a
|
22
|
-
|
23
|
-
Scenario: Showing the start of a test
|
24
|
-
Given
|
25
|
-
When I pipe to xcpretty with "--simple"
|
26
|
-
Then I should see that
|
27
|
-
|
28
|
-
Scenario: Showing the
|
29
|
-
Given I
|
30
|
-
When I pipe to xcpretty with "--simple"
|
31
|
-
Then I should see
|
32
|
-
|
33
|
-
Scenario: Showing
|
34
|
-
Given I
|
35
|
-
When I pipe to xcpretty with "--simple"
|
36
|
-
Then I should see the
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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 precompilation
|
9
|
+
Given I have a precompiled header
|
10
|
+
When I pipe to xcpretty with "--simple"
|
11
|
+
Then I should see a successful precompilation message
|
12
|
+
|
13
|
+
Scenario: Showing file compilation with color
|
14
|
+
Given I have a file to compile
|
15
|
+
When I pipe to xcpretty with "--simple --color"
|
16
|
+
Then I should see a yellow completion icon
|
17
|
+
|
18
|
+
Scenario: Showing precompilation
|
19
|
+
Given I have a precompiled header
|
20
|
+
When I pipe to xcpretty with "--simple --color"
|
21
|
+
Then I should see a yellow completion icon
|
22
|
+
|
23
|
+
Scenario: Showing the start of a test run
|
24
|
+
Given the tests have started running
|
25
|
+
When I pipe to xcpretty with "--simple"
|
26
|
+
Then I should see that test suite has started
|
27
|
+
|
28
|
+
Scenario: Showing the start of a test suite
|
29
|
+
Given I start a test suite
|
30
|
+
When I pipe to xcpretty with "--simple"
|
31
|
+
Then I should see the name of suite only
|
32
|
+
|
33
|
+
Scenario: Showing the end of a test suite
|
34
|
+
Given I finish a test suite
|
35
|
+
When I pipe to xcpretty with "--simple"
|
36
|
+
Then I should see that the test suite finished
|
37
|
+
|
38
|
+
Scenario: Showing failed test output
|
39
|
+
Given I have a failing test in my suite
|
40
|
+
When I pipe to xcpretty with "--simple"
|
41
|
+
Then I should see the name of a failed test
|
42
|
+
And I should see the path of a failed test
|
43
|
+
|
44
|
+
Scenario: Showing successful test output
|
45
|
+
Given I have a passing test in my suite
|
46
|
+
When I pipe to xcpretty with "--simple"
|
47
|
+
Then I should see the name of a passing test
|
48
|
+
And I should not see the name of the test group
|
49
|
+
And I should not see the path of a passing test
|
50
|
+
|
51
|
+
Scenario: Showing failed test output with color
|
52
|
+
Given I have a failing test in my suite
|
53
|
+
And I finish a test suite
|
54
|
+
When I pipe to xcpretty with "--simple --color"
|
55
|
+
Then I should see a red failed test mark
|
56
|
+
And the final execution message should be red
|
57
|
+
|
58
|
+
Scenario: Showing successful test output with color
|
59
|
+
Given I have a passing test in my suite
|
60
|
+
And I finish a test suite
|
61
|
+
When I pipe to xcpretty with "--simple --color"
|
62
|
+
Then I should see a green passing test mark
|
@@ -19,6 +19,10 @@ Given(/^I have a passing test in my suite$/) do
|
|
19
19
|
add_run_input SAMPLE_OCUNIT_TEST
|
20
20
|
end
|
21
21
|
|
22
|
+
Given(/^the tests have started running$/) do
|
23
|
+
add_run_input SAMPLE_OCUNIT_TEST_RUN_BEGINNING
|
24
|
+
end
|
25
|
+
|
22
26
|
Given(/^I start a test suite$/) do
|
23
27
|
add_run_input SAMPLE_OCUNIT_SUITE_BEGINNING
|
24
28
|
end
|
@@ -32,15 +36,15 @@ When(/^I pipe to xcpretty with "(.*?)"$/) do |flags|
|
|
32
36
|
end
|
33
37
|
|
34
38
|
Then(/^I should see a successful compilation message$/) do
|
35
|
-
run_output.should start_with("Compiling")
|
39
|
+
run_output.should start_with("▸ Compiling")
|
36
40
|
end
|
37
41
|
|
38
42
|
Then(/^I should see a successful precompilation message$/) do
|
39
|
-
run_output.should start_with("Precompiling")
|
43
|
+
run_output.should start_with("▸ Precompiling")
|
40
44
|
end
|
41
45
|
|
42
|
-
Then(/^I should see a
|
43
|
-
run_output.should start_with("
|
46
|
+
Then(/^I should see a yellow completion icon$/) do
|
47
|
+
run_output.should start_with(yellow("▸"))
|
44
48
|
end
|
45
49
|
|
46
50
|
Then(/^I should see a failed test icon$/) do
|
@@ -52,18 +56,16 @@ Then(/^I should see a passing test icon in ASCII$/) do
|
|
52
56
|
end
|
53
57
|
|
54
58
|
Then(/^I should see a red failed test icon$/) do
|
55
|
-
run_output.should include("
|
59
|
+
run_output.should include(red("F"))
|
56
60
|
end
|
57
61
|
|
58
62
|
Then(/^the final execution message should be (red|green)$/) do |color|
|
59
63
|
last_line = run_output.lines.to_a.last
|
60
|
-
|
61
|
-
last_line.should start_with(start_color)
|
62
|
-
last_line.strip.should end_with(COLOR_END)
|
64
|
+
last_line.should be_colored(color.to_sym)
|
63
65
|
end
|
64
66
|
|
65
67
|
Then(/^I should see a green passing test icon$/) do
|
66
|
-
run_output.should include("
|
68
|
+
run_output.should include(green("."))
|
67
69
|
end
|
68
70
|
|
69
71
|
Then(/^I should see the name of a failed test$/) do
|
@@ -82,8 +84,12 @@ Then(/^I should not see the path of a passing test$/) do
|
|
82
84
|
run_output.should_not =~ TEST_PATH_MATCHER
|
83
85
|
end
|
84
86
|
|
85
|
-
Then(/^I should see that
|
86
|
-
run_output.should =~
|
87
|
+
Then(/^I should see that test suite has started$/) do
|
88
|
+
run_output.should =~ TEST_RUN_START_MATCHER
|
89
|
+
end
|
90
|
+
|
91
|
+
Then(/^I should see the name of suite only$/) do
|
92
|
+
run_output.should =~ TEST_SUITE_START_MATCHER
|
87
93
|
end
|
88
94
|
|
89
95
|
Then(/^I should see that the test suite finished$/) do
|
@@ -91,9 +97,13 @@ Then(/^I should see that the test suite finished$/) do
|
|
91
97
|
end
|
92
98
|
|
93
99
|
Then(/^I should see a red failed test mark$/) do
|
94
|
-
run_output.should include("
|
100
|
+
run_output.should include(red("✗"))
|
95
101
|
end
|
96
102
|
|
97
103
|
Then(/^I should see a green passing test mark$/) do
|
98
|
-
run_output.should include("
|
104
|
+
run_output.should include(green("✓"))
|
105
|
+
end
|
106
|
+
|
107
|
+
Then(/^I should not see the name of the test group$/) do
|
108
|
+
run_output.should_not include(SAMPLE_TEST_GROUP_NAME)
|
99
109
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
$:.unshift File.expand_path('../../..', __FILE__)
|
2
2
|
|
3
3
|
require "tempfile"
|
4
|
-
require "spec/fixtures/constants
|
4
|
+
require "spec/fixtures/constants"
|
5
|
+
require "spec/support/matchers/colors"
|
6
|
+
require "lib/xcpretty/ansi"
|
5
7
|
|
8
|
+
include XCPretty::ANSI
|
9
|
+
|
10
|
+
TEST_RUN_START_MATCHER = /Test Suite .+ started/
|
6
11
|
TEST_SUITE_COMPLETION_MATCHER = /Executed \d+ tests, with \d+ failures \(\d+ unexpected\) in \d+\.\d+ \(\d+\.\d+\) seconds/
|
7
|
-
|
12
|
+
TEST_SUITE_START_MATCHER = /[\w]*(Spec|Tests)$/
|
8
13
|
TEST_PATH_MATCHER = %r{[\w/\-\s]+:\d+}
|
9
|
-
PASSING_TEST_NAME_MATCHER = %r{\w+\s\
|
10
|
-
FAILING_TEST_NAME_MATCHER = %r{\w
|
11
|
-
|
12
|
-
INPUT_FILE = "xcpretty_input"
|
13
|
-
RED_START = "\e[31m"
|
14
|
-
COLOR_END = "\e[0m"
|
15
|
-
GREEN_START = "\e[32;1m"
|
14
|
+
PASSING_TEST_NAME_MATCHER = %r{\w+\s\(\d+\.\d+\sseconds\)}
|
15
|
+
FAILING_TEST_NAME_MATCHER = %r{\w+, expected:}
|
16
16
|
|
17
17
|
def run_xcpretty flags
|
18
18
|
add_run_input SAMPLE_OCUNIT_SUITE_COMPLETION
|
19
19
|
add_run_input SAMPLE_EXECUTED_TESTS
|
20
|
-
input_file = Tempfile.new(
|
20
|
+
input_file = Tempfile.new("xcpretty_input")
|
21
21
|
File.open(input_file.path, 'w') do |file|
|
22
22
|
file.print run_input
|
23
23
|
end
|
@@ -37,7 +37,11 @@ def run_output
|
|
37
37
|
@output ||= ""
|
38
38
|
end
|
39
39
|
|
40
|
+
Before do
|
41
|
+
self.colorize = true
|
42
|
+
end
|
43
|
+
|
40
44
|
After do
|
41
45
|
@input = ""
|
42
46
|
@output = ""
|
43
|
-
end
|
47
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
1
|
Feature: Showing RSpec-style test output
|
2
2
|
|
3
|
-
Scenario: Showing failed tests
|
4
|
-
Given I have a failing test in my suite
|
5
|
-
When I pipe to xcpretty with "--test"
|
6
|
-
Then I should see a failed test icon
|
3
|
+
Scenario: Showing failed tests
|
4
|
+
Given I have a failing test in my suite
|
5
|
+
When I pipe to xcpretty with "--test"
|
6
|
+
Then I should see a failed test icon
|
7
7
|
|
8
|
-
Scenario: Showing passing tests
|
9
|
-
Given I have a passing test in my suite
|
10
|
-
When I pipe to xcpretty with "--test"
|
11
|
-
Then I should see a passing test icon in ASCII
|
8
|
+
Scenario: Showing passing tests
|
9
|
+
Given I have a passing test in my suite
|
10
|
+
When I pipe to xcpretty with "--test"
|
11
|
+
Then I should see a passing test icon in ASCII
|
12
12
|
|
13
|
-
Scenario: Showing some tests failed with color
|
14
|
-
Given I have a failing test in my suite
|
15
|
-
When I pipe to xcpretty with "--test --color"
|
16
|
-
Then I should see a red failed test icon
|
17
|
-
And I should see the path of a failed test
|
18
|
-
And the final execution message should be red
|
13
|
+
Scenario: Showing some tests failed with color
|
14
|
+
Given I have a failing test in my suite
|
15
|
+
When I pipe to xcpretty with "--test --color"
|
16
|
+
Then I should see a red failed test icon
|
17
|
+
And I should see the path of a failed test
|
18
|
+
And the final execution message should be red
|
19
19
|
|
20
|
-
Scenario: Showing passing tests with colorization
|
21
|
-
Given I have a passing test in my suite
|
22
|
-
When I pipe to xcpretty with "--test --color"
|
23
|
-
Then I should see a green passing test icon
|
20
|
+
Scenario: Showing passing tests with colorization
|
21
|
+
Given I have a passing test in my suite
|
22
|
+
When I pipe to xcpretty with "--test --color"
|
23
|
+
Then I should see a green passing test icon
|
24
24
|
|
25
|
-
Scenario: Showing that all tests passed with color
|
26
|
-
Given all of my tests will pass in my suite
|
27
|
-
When I pipe to xcpretty with "--test --color"
|
28
|
-
Then the final execution message should be green
|
25
|
+
Scenario: Showing that all tests passed with color
|
26
|
+
Given all of my tests will pass in my suite
|
27
|
+
When I pipe to xcpretty with "--test --color"
|
28
|
+
Then the final execution message should be green
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module XCPretty
|
2
|
+
module ANSI
|
3
|
+
attr_accessor :colorize
|
4
|
+
|
5
|
+
FORMATTED_MATCHER = %r{\e\[(\d+)[;]?(\d+)?m(.*)\e\[0m}
|
6
|
+
|
7
|
+
EFFECT = {
|
8
|
+
:reset => '0',
|
9
|
+
:bold => '1',
|
10
|
+
:underline => '4'
|
11
|
+
}
|
12
|
+
|
13
|
+
COLORS = {
|
14
|
+
:black => '30',
|
15
|
+
:red => '31',
|
16
|
+
:green => '32',
|
17
|
+
:yellow => '33',
|
18
|
+
:blue => '34',
|
19
|
+
:cyan => '36',
|
20
|
+
:white => '37',
|
21
|
+
:plain => '39'
|
22
|
+
}
|
23
|
+
|
24
|
+
def colorize?
|
25
|
+
!!@colorize
|
26
|
+
end
|
27
|
+
|
28
|
+
def white(text)
|
29
|
+
ansi_parse(text, :plain, :bold)
|
30
|
+
end
|
31
|
+
|
32
|
+
def red(text)
|
33
|
+
ansi_parse(text, :red)
|
34
|
+
end
|
35
|
+
|
36
|
+
def green(text)
|
37
|
+
ansi_parse(text, :green, :bold)
|
38
|
+
end
|
39
|
+
|
40
|
+
def cyan(text)
|
41
|
+
ansi_parse(text, :cyan)
|
42
|
+
end
|
43
|
+
|
44
|
+
def yellow(text)
|
45
|
+
ansi_parse(text, :yellow)
|
46
|
+
end
|
47
|
+
|
48
|
+
def applied_effects(text)
|
49
|
+
effects = []
|
50
|
+
if text =~ FORMATTED_MATCHER
|
51
|
+
colors = COLORS.invert[$1]
|
52
|
+
effect = EFFECT.invert[$2]
|
53
|
+
effects << colors if colors
|
54
|
+
effects << effect if effect
|
55
|
+
end
|
56
|
+
effects
|
57
|
+
end
|
58
|
+
|
59
|
+
def strip(text)
|
60
|
+
text =~ FORMATTED_MATCHER ? $3 : text
|
61
|
+
end
|
62
|
+
|
63
|
+
def ansi_parse(text, color, effect=nil)
|
64
|
+
return text unless colorize?
|
65
|
+
colors_code = COLORS[color] || ''
|
66
|
+
effect_code = EFFECT[effect] ? ';' + EFFECT[effect] : ''
|
67
|
+
"\e[#{colors_code}#{effect_code}m#{text}\e[#{EFFECT[:reset]}m"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/xcpretty/printer.rb
CHANGED
@@ -1,36 +1,48 @@
|
|
1
|
-
require "
|
1
|
+
require "xcpretty/ansi"
|
2
2
|
|
3
3
|
module XCPretty
|
4
4
|
|
5
5
|
module Printer
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
7
|
+
module Matchers
|
8
|
+
# @regex Captured groups
|
9
|
+
# $1 = suite
|
10
|
+
# $2 = time
|
11
|
+
TESTS_RUN_START_MATCHER = /Test Suite '(?:.*\/)?(.*[ox]ctest.*)' started at(.*)/
|
12
|
+
|
13
|
+
# @regex Captured groups
|
14
|
+
# $1 = suite
|
15
|
+
# $2 = time
|
16
|
+
TESTS_RUN_COMPLETION_MATCHER = /Test Suite '(?:.*\/)?(.*[ox]ctest.*)' finished at(.*)/
|
17
|
+
|
18
|
+
# @regex Captured groups
|
19
|
+
# $1 = test_case
|
20
|
+
# $2 = time
|
21
|
+
PASSING_TEST_MATCHER = /Test Case\s'-\[.*\s(.*)\]'\spassed\s\((\d*\.\d{3})\sseconds\)/
|
22
|
+
|
23
|
+
# @regex Captured groups
|
24
|
+
# $1 = file
|
25
|
+
# $2 = test_suite
|
26
|
+
# $3 = test_case
|
27
|
+
# $4 = reason
|
28
|
+
FAILING_TEST_MATCHER = /(.+:\d+):\serror:\s[\+\-]\[(.*)\s(.*)\]\s:(?:\s'.*'\s\[FAILED\],)?\s(.*)/
|
29
|
+
|
30
|
+
# @regex Captured groups
|
31
|
+
# $1 test suite name
|
32
|
+
TEST_SUITE_START_MATCHER = /Test Suite '(.*)' started at/
|
33
|
+
EXECUTED_MATCHER = /^Executed/
|
34
|
+
end
|
19
35
|
|
20
|
-
|
21
|
-
|
22
|
-
# $1 test suite name
|
23
|
-
TESTS_START_MATCHER = /Test Suite ('.*(\.(o|x)ctest(.*))?') started at/
|
24
|
-
EXECUTED_MATCHER = /^Executed/
|
36
|
+
include ANSI
|
37
|
+
include Matchers
|
25
38
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
:green => Paint.color(:green, :bright),
|
30
|
-
:link => Paint.color(:cyan),
|
31
|
-
}
|
39
|
+
def use_unicode=(bool)
|
40
|
+
@use_unicode = !!bool
|
41
|
+
end
|
32
42
|
|
33
|
-
|
43
|
+
def use_unicode?
|
44
|
+
!!@use_unicode
|
45
|
+
end
|
34
46
|
|
35
47
|
def pretty_print(text)
|
36
48
|
update_test_state(text)
|
@@ -42,10 +54,14 @@ module XCPretty
|
|
42
54
|
|
43
55
|
def update_test_state(text)
|
44
56
|
case text
|
45
|
-
when
|
46
|
-
|
47
|
-
|
57
|
+
when TESTS_RUN_START_MATCHER
|
58
|
+
@tests_done = false
|
59
|
+
@printed_summary = false
|
60
|
+
@failures = {}
|
61
|
+
when TESTS_RUN_COMPLETION_MATCHER
|
48
62
|
@tests_done = true
|
63
|
+
when FAILING_TEST_MATCHER
|
64
|
+
store_failure($1, $2, $3, $4)
|
49
65
|
end
|
50
66
|
end
|
51
67
|
|
@@ -75,34 +91,34 @@ module XCPretty
|
|
75
91
|
end
|
76
92
|
|
77
93
|
def test_summary(executed_message)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
"
|
82
|
-
|
94
|
+
formatted_suites = failures_per_suite.map do |suite, failures|
|
95
|
+
formatted_failures = failures.map do |f|
|
96
|
+
" #{f[:test_case]}, #{f[:reason]}\n #{f[:file]}"
|
97
|
+
end.join("\n\n")
|
98
|
+
|
99
|
+
"#{suite}\n#{formatted_failures}"
|
100
|
+
end
|
101
|
+
|
83
102
|
final_message = if colorize?
|
84
|
-
|
103
|
+
formatted_suites.any? ? red(executed_message) : green(executed_message)
|
85
104
|
else
|
86
105
|
executed_message
|
87
106
|
end
|
88
|
-
text = [
|
107
|
+
text = [formatted_suites, final_message].join("\n\n\n").strip
|
89
108
|
"\n\n#{text}"
|
90
109
|
end
|
91
110
|
|
92
|
-
def
|
93
|
-
@failures ||=
|
111
|
+
def failures_per_suite
|
112
|
+
@failures ||= {}
|
94
113
|
end
|
95
114
|
|
96
|
-
def store_failure(file, test_case,
|
97
|
-
|
98
|
-
|
115
|
+
def store_failure(file, test_suite, test_case, reason)
|
116
|
+
failures_per_suite[test_suite] ||= []
|
117
|
+
failures_per_suite[test_suite] << {
|
118
|
+
:file => cyan(file),
|
119
|
+
:reason => red(reason),
|
99
120
|
:test_case => test_case,
|
100
|
-
:failure_message => failure_message
|
101
121
|
}
|
102
122
|
end
|
103
|
-
|
104
|
-
def colorize?
|
105
|
-
!!@colorize
|
106
|
-
end
|
107
123
|
end
|
108
124
|
end
|
@@ -10,6 +10,10 @@ module XCPretty
|
|
10
10
|
|
11
11
|
PASS = "✓"
|
12
12
|
FAIL = "✗"
|
13
|
+
ASCII_PASS = "."
|
14
|
+
ASCII_FAIL = "x"
|
15
|
+
COMPLETION = "▸"
|
16
|
+
ASCII_COMPLETION = ">"
|
13
17
|
|
14
18
|
def pretty_format(text)
|
15
19
|
case text
|
@@ -42,8 +46,10 @@ module XCPretty
|
|
42
46
|
when PASSING_TEST_MATCHER
|
43
47
|
print_passing_test($1, $2)
|
44
48
|
when FAILING_TEST_MATCHER
|
45
|
-
print_failing_test($
|
46
|
-
when
|
49
|
+
print_failing_test($3, $4)
|
50
|
+
when TESTS_RUN_START_MATCHER
|
51
|
+
print_test_run_start($1)
|
52
|
+
when TEST_SUITE_START_MATCHER
|
47
53
|
print_suite_start($1)
|
48
54
|
else
|
49
55
|
""
|
@@ -55,11 +61,11 @@ module XCPretty
|
|
55
61
|
end
|
56
62
|
|
57
63
|
def print_failing_test(test_case, reason)
|
58
|
-
|
64
|
+
format_test("#{test_case}, #{reason}", false)
|
59
65
|
end
|
60
66
|
|
61
67
|
def print_passing_test(test_case, time)
|
62
|
-
|
68
|
+
format_test("#{test_case} (#{time} seconds)")
|
63
69
|
end
|
64
70
|
|
65
71
|
def print_linking(text)
|
@@ -108,8 +114,12 @@ module XCPretty
|
|
108
114
|
format("Generating DSYM file")
|
109
115
|
end
|
110
116
|
|
117
|
+
def print_test_run_start(name)
|
118
|
+
heading("Test Suite", name, "started")
|
119
|
+
end
|
120
|
+
|
111
121
|
def print_suite_start(name)
|
112
|
-
heading("
|
122
|
+
heading("", name, "")
|
113
123
|
end
|
114
124
|
|
115
125
|
def heading(prefix, text, description)
|
@@ -119,14 +129,21 @@ module XCPretty
|
|
119
129
|
|
120
130
|
def format(command, argument_text="", success=true)
|
121
131
|
command_text = colorize? ? white(command) : command
|
122
|
-
[status_symbol(success), command_text, argument_text].join(" ").strip
|
132
|
+
[status_symbol(success ? :completion : :fail), command_text, argument_text].join(" ").strip
|
133
|
+
end
|
134
|
+
|
135
|
+
def format_test(test_case, success=true)
|
136
|
+
[status_symbol(success ? :pass : :fail), test_case].join(" ").strip
|
123
137
|
end
|
124
138
|
|
125
|
-
def status_symbol(
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
139
|
+
def status_symbol(status)
|
140
|
+
case status
|
141
|
+
when :pass
|
142
|
+
green(use_unicode? ? PASS : ASCII_PASS)
|
143
|
+
when :fail
|
144
|
+
red(use_unicode? ? FAIL : ASCII_FAIL)
|
145
|
+
when :completion
|
146
|
+
yellow(use_unicode? ? COMPLETION : ASCII_COMPLETION)
|
130
147
|
else
|
131
148
|
""
|
132
149
|
end
|
data/lib/xcpretty/version.rb
CHANGED
data/spec/fixtures/constants.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
KIWI = 'kiwi'
|
3
3
|
OCUNIT = 'ocunit'
|
4
|
-
|
4
|
+
SAMPLE_TEST_GROUP_NAME = "RACTupleSpec"
|
5
|
+
SAMPLE_OCUNIT_TEST_RUN_BEGINNING = "Test Suite '/Users/musalj/Library/Developer/Xcode/DerivedData/ReactiveCocoa-eznxkbqvgfsnrvetemqloysuwagb/Build/Products/Test/ReactiveCocoaTests.octest(Tests)' started at 2013-12-10 07:04:33 +0000"
|
6
|
+
SAMPLE_KIWI_TEST_RUN_BEGINNING = "Test Suite 'ObjectiveRecordTests.xctest' started at 2013-12-10 06:15:39 +0000"
|
7
|
+
SAMPLE_OCUNIT_TEST_RUN_COMPLETION = "Test Suite '/Users/musalj/Library/Developer/Xcode/DerivedData/ReactiveCocoa-eznxkbqvgfsnrvetemqloysuwagb/Build/Products/Test/ReactiveCocoaTests.octest(Tests)' finished at 2013-12-10 07:03:03 +0000."
|
8
|
+
SAMPLE_KIWI_TEST_RUN_COMPLETION = "Test Suite 'ObjectiveRecordTests.xctest' finished at 2013-12-10 06:15:42 +0000."
|
9
|
+
|
10
|
+
SAMPLE_OCUNIT_SUITE_BEGINNING = "Test Suite 'RACKVOWrapperSpec' started at 2013-12-10 21:06:10 +0000"
|
5
11
|
SAMPLE_KIWI_SUITE_COMPLETION = "Test Suite 'All tests' finished at 2013-12-08 04:26:49 +0000."
|
6
12
|
SAMPLE_OCUNIT_SUITE_COMPLETION = "Test Suite '/Users/musalj/Library/Developer/Xcode/DerivedData/ReactiveCocoa-eznxkbqvgfsnrvetemqloysuwagb/Build/Products/Test/ReactiveCocoaTests.octest(Tests)' finished at 2013-12-08 22:09:37 +0000."
|
7
13
|
SAMPLE_XCTEST_SUITE_COMPLETION = "Test Suite 'ObjectiveSugarTests.xctest' finished at 2013-12-09 04:42:13 +0000."
|
14
|
+
|
8
15
|
SAMPLE_KIWI_FAILURE = "/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSNumberTests.m:49: error: -[NumberAdditions Iterators_TimesIteratesTheExactNumberOfTimes] : 'Iterators, times: iterates the exact number of times' [FAILED], expected subject to equal 4, got 5"
|
9
16
|
SAMPLE_SPECTA_FAILURE = "/Users/musalj/code/OSS/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoaTests/RACCommandSpec.m:458: error: -[RACCommandSpec enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES] : expected: 1, got: 0"
|
17
|
+
|
10
18
|
SAMPLE_BUILD = "=== BUILD TARGET The Spacer OF PROJECT Pods WITH THE DEFAULT CONFIGURATION Debug ==="
|
11
19
|
SAMPLE_CLEAN = "=== CLEAN TARGET Pods-ObjectiveSugar OF PROJECT Pods WITH CONFIGURATION Debug ==="
|
12
20
|
SAMPLE_ANOTHER_CLEAN = "=== CLEAN TARGET Pods OF PROJECT Pods WITH CONFIGURATION Debug ==="
|
@@ -16,7 +24,7 @@ Clean.Remove clean /Users/musalj/Library/Developer/Xcode/DerivedData/ObjectiveSu
|
|
16
24
|
builtin-rm -rf /Users/musalj/Library/Developer/Xcode/DerivedData/ObjectiveSugar-ayzdhqmmwtqgysdpznmovjlupqjy/Build/Intermediates/ObjectiveSugar.build/Debug-iphonesimulator/ObjectiveSugarTests.build
|
17
25
|
)
|
18
26
|
SAMPLE_EXECUTED_TESTS = "Executed 4 tests, with 0 failures (0 unexpected) in 0.003 (0.004) seconds"
|
19
|
-
SAMPLE_OCUNIT_TEST = "Test Case '-[
|
27
|
+
SAMPLE_OCUNIT_TEST = "Test Case '-[#{SAMPLE_TEST_GROUP_NAME} _tupleByAddingObject__should_add_a_non_nil_object]' passed (0.001 seconds)."
|
20
28
|
SAMPLE_COMPILE = %Q(
|
21
29
|
CompileC /Users/musalj/Library/Developer/Xcode/DerivedData/ObjectiveSugar-ayzdhqmmwtqgysdpznmovjlupqjy/Build/Intermediates/Pods.build/Debug-iphonesimulator/Pods-ObjectiveSugar.build/Objects-normal/i386/NSMutableArray+ObjectiveSugar.o /Users/musalj/code/OSS/ObjectiveSugar/Classes/NSMutableArray+ObjectiveSugar.m normal i386 objective-c com.apple.compilers.llvm.clang.1_0.compiler
|
22
30
|
cd /Users/musalj/code/OSS/ObjectiveSugar/Example/Pods
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
RSpec::Matchers.define :be_colored do |expected|
|
2
|
+
|
3
|
+
def effects_string(actual)
|
4
|
+
effects = applied_effects(actual).join(' and ')
|
5
|
+
effects.length > 0 ? effects : "unformatted"
|
6
|
+
end
|
7
|
+
|
8
|
+
match do |actual|
|
9
|
+
applied_effects(actual).include? expected.to_sym
|
10
|
+
end
|
11
|
+
|
12
|
+
failure_message_for_should do |actual|
|
13
|
+
"expected that '#{strip(actual)}' would be colored #{expected}, but was #{effects_string(actual)}"
|
14
|
+
end
|
15
|
+
failure_message_for_should_not do |actual|
|
16
|
+
"expected that #{strip(actual)} would not be colored #{expected}, but was #{effects_string(actual)}"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "xcpretty/ansi"
|
2
|
+
|
3
|
+
module XCPretty
|
4
|
+
describe ANSI do
|
5
|
+
include ANSI
|
6
|
+
|
7
|
+
before do
|
8
|
+
self.colorize = true
|
9
|
+
@text = "This is the PARTY"
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "color helpers" do
|
13
|
+
it "colors text red" do
|
14
|
+
red(@text).should == "\e[31m#{@text}\e[0m"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "formats text bold" do
|
18
|
+
white(@text).should == "\e[39;1m#{@text}\e[0m"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "colors text green" do
|
22
|
+
green(@text).should == "\e[32;1m#{@text}\e[0m"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "colors text cyan" do
|
26
|
+
cyan(@text).should == "\e[36m#{@text}\e[0m"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "custom color mixing" do
|
31
|
+
it "can mix random known colors" do
|
32
|
+
ansi_parse(@text, :yellow, :underline).should == "\e[33;4m#{@text}\e[0m"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "debug helpers" do
|
37
|
+
it "can remove formatting from text" do
|
38
|
+
strip("\e[33;4m#{@text}\e[0m").should == @text
|
39
|
+
end
|
40
|
+
|
41
|
+
it "can list known applied effects" do
|
42
|
+
applied_effects("\e[33;1m#{@text}\e[0m").should == [:yellow, :bold]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "xcpretty/printer"
|
3
|
+
|
4
|
+
module XCPretty
|
5
|
+
|
6
|
+
module Printer
|
7
|
+
|
8
|
+
describe Printer do
|
9
|
+
|
10
|
+
include Printer
|
11
|
+
|
12
|
+
def pretty_format(text)
|
13
|
+
""
|
14
|
+
end
|
15
|
+
|
16
|
+
def executed_tests_message
|
17
|
+
format_test_summary(SAMPLE_EXECUTED_TESTS)
|
18
|
+
end
|
19
|
+
|
20
|
+
def given_tests_are_done(reporter = SAMPLE_XCTEST_SUITE_COMPLETION)
|
21
|
+
pretty_print(reporter)
|
22
|
+
end
|
23
|
+
|
24
|
+
def given_kiwi_tests_are_done
|
25
|
+
pretty_print(SAMPLE_XCTEST_SUITE_COMPLETION)
|
26
|
+
pretty_print(SAMPLE_EXECUTED_TESTS)
|
27
|
+
pretty_print(SAMPLE_KIWI_SUITE_COMPLETION)
|
28
|
+
end
|
29
|
+
|
30
|
+
before(:each) do
|
31
|
+
STDOUT.stub(:print) { |text| text }
|
32
|
+
end
|
33
|
+
|
34
|
+
it "knows when the test suite is done for OCunit / Specta" do
|
35
|
+
executed_tests_message.should == ""
|
36
|
+
|
37
|
+
given_tests_are_done
|
38
|
+
executed_tests_message.should == "\n\n#{SAMPLE_EXECUTED_TESTS}"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "knows when the test suite is done for XCtest" do
|
42
|
+
executed_tests_message.should == ""
|
43
|
+
|
44
|
+
given_tests_are_done
|
45
|
+
executed_tests_message.should == "\n\n#{SAMPLE_EXECUTED_TESTS}"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "prints out Kiwi failures nicely" do
|
49
|
+
pretty_print(SAMPLE_KIWI_FAILURE)
|
50
|
+
pretty_print(SAMPLE_KIWI_FAILURE)
|
51
|
+
given_tests_are_done
|
52
|
+
executed_tests_message.should include(%Q(
|
53
|
+
NumberAdditions
|
54
|
+
Iterators_TimesIteratesTheExactNumberOfTimes, expected subject to equal 4, got 5
|
55
|
+
/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSNumberTests.m:49
|
56
|
+
|
57
|
+
Iterators_TimesIteratesTheExactNumberOfTimes, expected subject to equal 4, got 5
|
58
|
+
/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSNumberTests.m:49
|
59
|
+
|
60
|
+
|
61
|
+
#{SAMPLE_EXECUTED_TESTS}))
|
62
|
+
end
|
63
|
+
|
64
|
+
it "prints out specta failures nicely" do
|
65
|
+
pretty_print(SAMPLE_SPECTA_FAILURE)
|
66
|
+
pretty_print(SAMPLE_SPECTA_FAILURE)
|
67
|
+
given_tests_are_done
|
68
|
+
executed_tests_message.should include(%Q(
|
69
|
+
RACCommandSpec
|
70
|
+
enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES, expected: 1, got: 0
|
71
|
+
/Users/musalj/code/OSS/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoaTests/RACCommandSpec.m:458
|
72
|
+
|
73
|
+
enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES, expected: 1, got: 0
|
74
|
+
/Users/musalj/code/OSS/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoaTests/RACCommandSpec.m:458
|
75
|
+
|
76
|
+
|
77
|
+
#{SAMPLE_EXECUTED_TESTS}))
|
78
|
+
end
|
79
|
+
|
80
|
+
it "doesn't print executed message twice for Kiwi tests" do
|
81
|
+
Printer.instance_variable_set(:@printed_summary, false)
|
82
|
+
given_kiwi_tests_are_done
|
83
|
+
executed_tests_message.should == ""
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
+
require "spec_helper"
|
1
2
|
require "xcpretty/printer"
|
2
|
-
require "fixtures/constants"
|
3
3
|
|
4
4
|
module XCPretty
|
5
5
|
|
@@ -21,8 +21,12 @@ module XCPretty
|
|
21
21
|
pretty_print(reporter)
|
22
22
|
end
|
23
23
|
|
24
|
+
def given_tests_have_started(reporter = SAMPLE_OCUNIT_TEST_RUN_BEGINNING)
|
25
|
+
pretty_print(reporter)
|
26
|
+
end
|
27
|
+
|
24
28
|
def given_kiwi_tests_are_done
|
25
|
-
pretty_print(
|
29
|
+
pretty_print(SAMPLE_KIWI_TEST_RUN_COMPLETION)
|
26
30
|
pretty_print(SAMPLE_EXECUTED_TESTS)
|
27
31
|
pretty_print(SAMPLE_KIWI_SUITE_COMPLETION)
|
28
32
|
end
|
@@ -47,31 +51,67 @@ module XCPretty
|
|
47
51
|
|
48
52
|
it "prints out Kiwi failures nicely" do
|
49
53
|
pretty_print(SAMPLE_KIWI_FAILURE)
|
50
|
-
|
54
|
+
pretty_print(SAMPLE_KIWI_FAILURE)
|
55
|
+
given_tests_are_done(SAMPLE_KIWI_TEST_RUN_COMPLETION)
|
51
56
|
executed_tests_message.should include(%Q(
|
52
|
-
NumberAdditions
|
53
|
-
|
57
|
+
NumberAdditions
|
58
|
+
Iterators_TimesIteratesTheExactNumberOfTimes, expected subject to equal 4, got 5
|
59
|
+
/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSNumberTests.m:49
|
60
|
+
|
61
|
+
Iterators_TimesIteratesTheExactNumberOfTimes, expected subject to equal 4, got 5
|
62
|
+
/Users/musalj/code/OSS/ObjectiveSugar/Example/ObjectiveSugarTests/NSNumberTests.m:49
|
54
63
|
|
55
64
|
|
56
65
|
#{SAMPLE_EXECUTED_TESTS}))
|
57
66
|
end
|
58
67
|
|
59
68
|
it "prints out specta failures nicely" do
|
69
|
+
pretty_print(SAMPLE_SPECTA_FAILURE)
|
60
70
|
pretty_print(SAMPLE_SPECTA_FAILURE)
|
61
71
|
given_tests_are_done
|
62
72
|
executed_tests_message.should include(%Q(
|
63
|
-
RACCommandSpec
|
64
|
-
|
73
|
+
RACCommandSpec
|
74
|
+
enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES, expected: 1, got: 0
|
75
|
+
/Users/musalj/code/OSS/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoaTests/RACCommandSpec.m:458
|
76
|
+
|
77
|
+
enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES, expected: 1, got: 0
|
78
|
+
/Users/musalj/code/OSS/ReactiveCocoa/ReactiveCocoaFramework/ReactiveCocoaTests/RACCommandSpec.m:458
|
65
79
|
|
66
80
|
|
67
81
|
#{SAMPLE_EXECUTED_TESTS}))
|
68
82
|
end
|
69
83
|
|
70
84
|
it "doesn't print executed message twice for Kiwi tests" do
|
71
|
-
|
72
|
-
|
73
|
-
|
85
|
+
given_tests_have_started(SAMPLE_KIWI_TEST_RUN_BEGINNING)
|
86
|
+
given_tests_are_done(SAMPLE_KIWI_TEST_RUN_COMPLETION)
|
87
|
+
executed_tests_message.should == "\n\n#{SAMPLE_EXECUTED_TESTS}"
|
88
|
+
|
89
|
+
given_tests_are_done(SAMPLE_KIWI_SUITE_COMPLETION)
|
90
|
+
executed_tests_message.should == ""
|
91
|
+
end
|
92
|
+
|
93
|
+
it "prints OCunit / XCTest summary twice if tests executed twice" do
|
94
|
+
2.times do
|
95
|
+
given_tests_have_started
|
96
|
+
given_tests_are_done
|
97
|
+
executed_tests_message.should == "\n\n#{SAMPLE_EXECUTED_TESTS}"
|
98
|
+
|
99
|
+
given_tests_are_done(SAMPLE_XCTEST_SUITE_COMPLETION)
|
100
|
+
executed_tests_message.should == ""
|
101
|
+
end
|
74
102
|
end
|
103
|
+
|
104
|
+
it "prints Kiwi summary twice if tests executed twice" do
|
105
|
+
2.times do
|
106
|
+
given_tests_have_started(SAMPLE_KIWI_TEST_RUN_BEGINNING)
|
107
|
+
given_tests_are_done(SAMPLE_KIWI_TEST_RUN_COMPLETION)
|
108
|
+
executed_tests_message.should == "\n\n#{SAMPLE_EXECUTED_TESTS}"
|
109
|
+
|
110
|
+
given_tests_are_done(SAMPLE_KIWI_SUITE_COMPLETION)
|
111
|
+
executed_tests_message.should == ""
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
75
115
|
end
|
76
116
|
end
|
77
117
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
+
require "spec_helper"
|
1
2
|
require "xcpretty/printer"
|
2
3
|
require "xcpretty/printers/rspec"
|
3
|
-
require "fixtures/constants"
|
4
4
|
|
5
5
|
module XCPretty
|
6
6
|
|
@@ -13,12 +13,28 @@ module XCPretty
|
|
13
13
|
subject.pretty_print(SAMPLE_OCUNIT_TEST)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
context "without colors" do
|
17
|
+
|
18
|
+
it "prints green dots for passing tests" do
|
19
|
+
subject.pretty_format(SAMPLE_OCUNIT_TEST).should == "."
|
20
|
+
end
|
21
|
+
|
22
|
+
it "prints F for failing tests" do
|
23
|
+
subject.pretty_format(SAMPLE_KIWI_FAILURE).should == "F"
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
|
-
|
21
|
-
|
27
|
+
context "with colors" do
|
28
|
+
|
29
|
+
before { subject.colorize = true }
|
30
|
+
|
31
|
+
it "prints green for passing tests" do
|
32
|
+
subject.pretty_format(SAMPLE_OCUNIT_TEST).should be_colored :green
|
33
|
+
end
|
34
|
+
|
35
|
+
it "prints red for failing tests" do
|
36
|
+
subject.pretty_format(SAMPLE_KIWI_FAILURE).should be_colored :red
|
37
|
+
end
|
22
38
|
end
|
23
39
|
|
24
40
|
describe "doesn't output any compiling output" do
|
@@ -20,22 +20,22 @@ module XCPretty
|
|
20
20
|
|
21
21
|
it "parses compiling output" do
|
22
22
|
subject.pretty_format(SAMPLE_COMPILE).should ==
|
23
|
-
"Compiling NSMutableArray+ObjectiveSugar.m"
|
23
|
+
"> Compiling NSMutableArray+ObjectiveSugar.m"
|
24
24
|
end
|
25
25
|
|
26
26
|
it "parses another compiling output" do
|
27
27
|
subject.pretty_format(SAMPLE_ANOTHER_COMPILE).should ==
|
28
|
-
"Compiling KWNull.m"
|
28
|
+
"> Compiling KWNull.m"
|
29
29
|
end
|
30
30
|
|
31
31
|
it "parses precompiling output" do
|
32
32
|
subject.pretty_format(SAMPLE_PRECOMPILE).should ==
|
33
|
-
"Precompiling Pods-CocoaLumberjack-prefix.pch"
|
33
|
+
"> Precompiling Pods-CocoaLumberjack-prefix.pch"
|
34
34
|
end
|
35
35
|
|
36
36
|
it "parses another precompiling output" do
|
37
37
|
subject.pretty_format(SAMPLE_ANOTHER_PRECOMPILE).should ==
|
38
|
-
"Precompiling Pods-CrittercismSDK-prefix.pch"
|
38
|
+
"> Precompiling Pods-CrittercismSDK-prefix.pch"
|
39
39
|
end
|
40
40
|
|
41
41
|
it "parses clean remove output" do
|
@@ -48,69 +48,78 @@ module XCPretty
|
|
48
48
|
|
49
49
|
it "parses clean target/project/configuration" do
|
50
50
|
subject.pretty_format(SAMPLE_CLEAN).should ==
|
51
|
-
"Cleaning Pods/ObjectiveSugar [Debug]"
|
51
|
+
"> Cleaning Pods/ObjectiveSugar [Debug]"
|
52
52
|
end
|
53
53
|
|
54
54
|
it "parses another clean target/project/configuration" do
|
55
55
|
subject.pretty_format(SAMPLE_ANOTHER_CLEAN).should ==
|
56
|
-
"Cleaning Pods/Pods [Debug]"
|
56
|
+
"> Cleaning Pods/Pods [Debug]"
|
57
57
|
end
|
58
58
|
|
59
59
|
it "parses build target/project/configuration with target" do
|
60
60
|
subject.pretty_format(SAMPLE_BUILD).should ==
|
61
|
-
"Building Pods/The Spacer [Debug]"
|
61
|
+
"> Building Pods/The Spacer [Debug]"
|
62
62
|
end
|
63
63
|
|
64
64
|
it "parses clean target/project/configuration with nested pods" do
|
65
65
|
subject.pretty_format(SAMPLE_CLEAN_NESTED_PODS).should ==
|
66
|
-
"Cleaning Pods/Kiwi [Debug]"
|
66
|
+
"> Cleaning Pods/Kiwi [Debug]"
|
67
67
|
end
|
68
68
|
|
69
69
|
it "parses PhaseScriptExecution" do
|
70
70
|
subject.pretty_format(SAMPLE_RUN_SCRIPT).should ==
|
71
|
-
"Running script 'Check Pods Manifest.lock'"
|
71
|
+
"> Running script 'Check Pods Manifest.lock'"
|
72
72
|
end
|
73
73
|
|
74
74
|
it "parses Libtool" do
|
75
75
|
subject.pretty_format(SAMPLE_LIBTOOL).should ==
|
76
|
-
"Building library libPods-ObjectiveSugarTests-Kiwi.a"
|
76
|
+
"> Building library libPods-ObjectiveSugarTests-Kiwi.a"
|
77
77
|
end
|
78
78
|
|
79
79
|
it "parses CpResource" do
|
80
80
|
subject.pretty_format(SAMPLE_CPRESOURCE).should ==
|
81
|
-
"Copying ObjectiveSugar/Default-568h@2x.png"
|
81
|
+
"> Copying ObjectiveSugar/Default-568h@2x.png"
|
82
82
|
end
|
83
83
|
|
84
84
|
it "parses CopyStringsFile" do
|
85
85
|
subject.pretty_format(SAMPLE_COPYSTRINGS).should ==
|
86
|
-
"Copying InfoPlist.strings"
|
86
|
+
"> Copying InfoPlist.strings"
|
87
87
|
end
|
88
88
|
|
89
89
|
it "parses GenerateDSYMFile" do
|
90
90
|
subject.pretty_format(SAMPLE_DSYM).should ==
|
91
|
-
"Generating DSYM file"
|
91
|
+
"> Generating DSYM file"
|
92
92
|
end
|
93
93
|
|
94
94
|
it "parses info.plist processing" do
|
95
95
|
subject.pretty_format(SAMPLE_PROCESS_INFOPLIST).should ==
|
96
|
-
"Processing The Spacer-Info.plist"
|
96
|
+
"> Processing The Spacer-Info.plist"
|
97
97
|
end
|
98
98
|
|
99
99
|
it "parses Ld" do
|
100
100
|
subject.pretty_format(SAMPLE_LD).should ==
|
101
|
-
"Linking ObjectiveSugar"
|
101
|
+
"> Linking ObjectiveSugar"
|
102
102
|
end
|
103
103
|
|
104
104
|
it "parses passing tests" do
|
105
105
|
subject.pretty_format(SAMPLE_OCUNIT_TEST).should ==
|
106
|
-
"
|
106
|
+
". _tupleByAddingObject__should_add_a_non_nil_object (0.001 seconds)"
|
107
107
|
end
|
108
108
|
|
109
109
|
it "parses failing tests" do
|
110
110
|
subject.pretty_format(SAMPLE_SPECTA_FAILURE).should ==
|
111
|
-
"
|
111
|
+
"x enabled_signal_should_send_YES_while_executing_is_YES_and_allowsConcurrentExecution_is_YES, expected: 1, got: 0"
|
112
112
|
end
|
113
113
|
|
114
|
+
it "parses test run started" do
|
115
|
+
subject.pretty_format(SAMPLE_OCUNIT_TEST_RUN_BEGINNING).should ==
|
116
|
+
"Test Suite ReactiveCocoaTests.octest(Tests) started"
|
117
|
+
end
|
118
|
+
|
119
|
+
it "parses test suite started" do
|
120
|
+
subject.pretty_format(SAMPLE_OCUNIT_SUITE_BEGINNING).should ==
|
121
|
+
"RACKVOWrapperSpec"
|
122
|
+
end
|
114
123
|
end
|
115
124
|
end
|
116
125
|
end
|
data/xcpretty.gemspec
CHANGED
@@ -26,8 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
|
-
spec.add_dependency "paint"
|
30
|
-
|
31
29
|
spec.add_development_dependency "bundler", "~> 1.3"
|
32
30
|
spec.add_development_dependency "rake"
|
33
31
|
spec.add_development_dependency "rspec"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xcpretty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marin Usalj
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: paint
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - '>='
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - '>='
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: bundler
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +81,7 @@ files:
|
|
95
81
|
- .gitignore
|
96
82
|
- .kick
|
97
83
|
- .travis.yml
|
84
|
+
- CHANGELOG.md
|
98
85
|
- Gemfile
|
99
86
|
- LICENSE.txt
|
100
87
|
- README.md
|
@@ -105,11 +92,16 @@ files:
|
|
105
92
|
- features/support/env.rb
|
106
93
|
- features/test_format.feature
|
107
94
|
- lib/xcpretty.rb
|
95
|
+
- lib/xcpretty/ansi.rb
|
108
96
|
- lib/xcpretty/printer.rb
|
109
97
|
- lib/xcpretty/printers/rspec.rb
|
110
98
|
- lib/xcpretty/printers/simple.rb
|
111
99
|
- lib/xcpretty/version.rb
|
112
100
|
- spec/fixtures/constants.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
- spec/support/matchers/colors.rb
|
103
|
+
- spec/xcpretty/ansi_spec.rb
|
104
|
+
- spec/xcpretty/printer_spec.rb
|
113
105
|
- spec/xcpretty/printers/printer_spec.rb
|
114
106
|
- spec/xcpretty/printers/rspec_spec.rb
|
115
107
|
- spec/xcpretty/printers/simple_spec.rb
|
@@ -144,6 +136,10 @@ test_files:
|
|
144
136
|
- features/support/env.rb
|
145
137
|
- features/test_format.feature
|
146
138
|
- spec/fixtures/constants.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
- spec/support/matchers/colors.rb
|
141
|
+
- spec/xcpretty/ansi_spec.rb
|
142
|
+
- spec/xcpretty/printer_spec.rb
|
147
143
|
- spec/xcpretty/printers/printer_spec.rb
|
148
144
|
- spec/xcpretty/printers/rspec_spec.rb
|
149
145
|
- spec/xcpretty/printers/simple_spec.rb
|