xcpretty 0.0.5 → 0.0.6
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 +2 -2
- data/CONTRIBUTING.md +60 -0
- data/README.md +7 -3
- data/bin/xcpretty +14 -0
- data/features/junit_report.feature +24 -0
- data/features/steps/junit_steps.rb +21 -0
- data/features/support/env.rb +8 -0
- data/lib/xcpretty/printer.rb +4 -3
- data/lib/xcpretty/printers/simple.rb +1 -1
- data/lib/xcpretty/reporters/junit.rb +79 -0
- data/lib/xcpretty/version.rb +1 -1
- data/lib/xcpretty.rb +1 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 50b91a1ee68864cc0c7f42210ff068b9f0ac4fbd
|
4
|
+
data.tar.gz: 183872807da2eafa43b7e938d3d00c99d9a7575d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a81e3342d8eae995237e34a33849e35d894da2cd8853a4e87f63f7f7e40417062f2a5ef4b3dccce30425a445769a39b6e92bbfae5e13feb199dac555f59a979
|
7
|
+
data.tar.gz: 8aa6375079a878afe70a2532f40b441ff70836eea40afaca914f9c7620cb7bc9067b924052b01b9c0cf955e9a0e5e662f50feae5423d8f1d5a65aaf54de9f18e
|
data/CHANGELOG.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
###### Bug Fixes
|
6
6
|
|
7
|
-
*
|
7
|
+
* `--no-utf` was set incorrectly. now it works as expected.
|
8
8
|
|
9
9
|
|
10
10
|
## 0.0.4
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
* Added example of running tests continuously
|
22
22
|
|
23
|
-
* Support for not using Unicode (
|
23
|
+
* Support for not using Unicode (`--no-utf`)
|
24
24
|
|
25
25
|
###### Bug Fixes
|
26
26
|
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
## Pull requests
|
2
|
+
|
3
|
+
XCPretty is tested with [Cucumber](http://cukes.info) and [RSpec](http://rspec.info).
|
4
|
+
If you're planning to contribute, please do write tests.
|
5
|
+
|
6
|
+
Here's an example workflow for a contribution:
|
7
|
+
|
8
|
+
#### 1. Write a failing feature
|
9
|
+
|
10
|
+
- These are a full-stack end to end tests
|
11
|
+
- You can find features in `features/`. You'll need to write a `feature` and implement it's `steps`.
|
12
|
+
- Try to reuse as many matchers as possible
|
13
|
+
- This tests are slower because they're executing `xcpretty` command for each test
|
14
|
+
|
15
|
+
Here's an example feature for adding output without UTF8:
|
16
|
+
|
17
|
+
``` gherkin
|
18
|
+
Scenario: Running tests without UTF-8 support
|
19
|
+
Given I have a passing test in my suite
|
20
|
+
And I pipe to xcpretty with "--no-utf"
|
21
|
+
Then I should see a non-utf prefixed output
|
22
|
+
```
|
23
|
+
|
24
|
+
And the steps:
|
25
|
+
|
26
|
+
- `Given I have a passing test in my suite`
|
27
|
+
|
28
|
+
``` ruby
|
29
|
+
Given(/^I have a passing test in my suite$/) do
|
30
|
+
add_run_input SAMPLE_OCUNIT_TEST
|
31
|
+
end
|
32
|
+
```
|
33
|
+
|
34
|
+
- `And I pipe to xcpretty with "--no-utf"`
|
35
|
+
|
36
|
+
``` ruby
|
37
|
+
When(/^I pipe to xcpretty with "(.*?)"$/) do |flags|
|
38
|
+
run_xcpretty(flags)
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
- `Then I should see a non-utf prefixed output`
|
43
|
+
|
44
|
+
``` ruby
|
45
|
+
Then(/^I should see a non-utf prefixed output$/) do
|
46
|
+
run_output.should start_with(".")
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
|
51
|
+
#### 2. Write a failing BDD test
|
52
|
+
|
53
|
+
- These are unit tests, and they're very fast (below 200ms for the entire suite)
|
54
|
+
- You should be running them continuously with `kicker`, or your awesome Vim binding
|
55
|
+
|
56
|
+
|
57
|
+
#### 3. Implement your awesome contribution
|
58
|
+
|
59
|
+
- This should fix unit tests one-by-one, and finally your `feature` will be passing
|
60
|
+
|
data/README.md
CHANGED
@@ -17,15 +17,19 @@ It's even a bit faster than `xcodebuild` only, since it saves your terminal some
|
|
17
17
|
|
18
18
|
## Formats
|
19
19
|
|
20
|
-
-
|
21
|
-
-
|
20
|
+
- `--color`, `-c` (you can add it to any format)
|
21
|
+
- `--simple`, `-s` (default)
|
22
22
|

|
23
23
|
|
24
|
-
-
|
24
|
+
- `--test`, `-t` (RSpec style)
|
25
25
|

|
26
26
|
|
27
27
|
- tun / tap (not yet implemented. possible solution for most CI servers)
|
28
28
|
|
29
|
+
## Reporters
|
30
|
+
|
31
|
+
- `--report junit`, `-r junit`: Creates a JUnit-style XML report at `build/reports/junit.xml`, compatible with Jenkins CI.
|
32
|
+
|
29
33
|
## Have you just cloned xctool?
|
30
34
|
|
31
35
|
Unlike [xctool](https://github.com/facebook/xctool), `xcpretty` isn't a build tool.
|
data/bin/xcpretty
CHANGED
@@ -7,7 +7,12 @@ if RUBY_VERSION < '1.8.7'
|
|
7
7
|
abort "error: XCPretty requires Ruby 1.8.7 or higher."
|
8
8
|
end
|
9
9
|
|
10
|
+
report_formats = {
|
11
|
+
"junit" => XCPretty::JUnit
|
12
|
+
}
|
13
|
+
|
10
14
|
OptionParser.new do |opts|
|
15
|
+
@report_formats = []
|
11
16
|
opts.banner = "Usage: xcodebuild [options] | xcpretty"
|
12
17
|
opts.on('-t', '--test', 'Use RSpec style output') do
|
13
18
|
@klass = XCPretty::Printer::RSpec
|
@@ -21,6 +26,10 @@ OptionParser.new do |opts|
|
|
21
26
|
opts.on('--no-utf', 'Disable unicode characters in output') do
|
22
27
|
@no_utf = true
|
23
28
|
end
|
29
|
+
opts.on("-r", "--report FORMAT", "Run FORMAT reporter",
|
30
|
+
" Choices: #{report_formats.keys.join(', ')}") do |format|
|
31
|
+
@report_formats << report_formats[format]
|
32
|
+
end
|
24
33
|
opts.on_tail('-h', '--help', 'Show this message') { puts opts; exit }
|
25
34
|
opts.on_tail("-v", "--version", "Show version") { puts XCPretty::VERSION; exit }
|
26
35
|
opts.parse!
|
@@ -30,6 +39,11 @@ printer = (@klass || XCPretty::Printer::Simple).new
|
|
30
39
|
printer.colorize = @colorize
|
31
40
|
printer.use_unicode = !@no_utf
|
32
41
|
|
42
|
+
reporters = @report_formats.compact.map(&:new)
|
43
|
+
|
33
44
|
ARGF.each_line do |line|
|
34
45
|
printer.pretty_print(line)
|
46
|
+
reporters.each {|r| r.handle(line) }
|
35
47
|
end
|
48
|
+
|
49
|
+
reporters.each(&:finish)
|
@@ -0,0 +1,24 @@
|
|
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
|
+
When I pipe to xcpretty with "--report junit"
|
8
|
+
Then I should see a test suite node
|
9
|
+
|
10
|
+
Scenario: Showing failed tests
|
11
|
+
Given I have a failing test in my suite
|
12
|
+
When I pipe to xcpretty with "--report junit"
|
13
|
+
Then I should see a failed test node in my report
|
14
|
+
|
15
|
+
Scenario: Showing passing tests
|
16
|
+
Given I have a passing test in my suite
|
17
|
+
When I pipe to xcpretty with "--report junit"
|
18
|
+
Then I should see a passing test node in my report
|
19
|
+
|
20
|
+
Scenario: Counting tests
|
21
|
+
Given I have a passing test in my suite
|
22
|
+
And I have a failing test in my suite
|
23
|
+
When I pipe to xcpretty with "--report junit"
|
24
|
+
Then I should see 2 tests in my report
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Then(/^I should see a failed test node in my report$/) do
|
2
|
+
junit_report.root.elements.to_a.detect do |node|
|
3
|
+
element = node.elements.to_a.first
|
4
|
+
element && element.name == "failure"
|
5
|
+
end.should_not be_nil
|
6
|
+
end
|
7
|
+
|
8
|
+
Then(/^I should see a passing test node in my report$/) do
|
9
|
+
junit_report.root.elements.to_a.detect do |node|
|
10
|
+
node.attributes["time"] != nil
|
11
|
+
end.should_not be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
Then(/^I should see a test suite node$/) do
|
15
|
+
junit_report.root.should_not be_nil
|
16
|
+
end
|
17
|
+
|
18
|
+
Then(/^I should see (\d+) tests in my report$/) do |test_count|
|
19
|
+
junit_report.root.attributes["tests"].should == test_count
|
20
|
+
junit_report.root.elements.to_a.count.should == test_count.to_i
|
21
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -4,6 +4,9 @@ require "tempfile"
|
|
4
4
|
require "spec/fixtures/constants"
|
5
5
|
require "spec/support/matchers/colors"
|
6
6
|
require "lib/xcpretty/ansi"
|
7
|
+
require "rexml/document"
|
8
|
+
require "lib/xcpretty/printer"
|
9
|
+
require "lib/xcpretty/reporters/junit"
|
7
10
|
|
8
11
|
include XCPretty::ANSI
|
9
12
|
|
@@ -37,6 +40,10 @@ def run_output
|
|
37
40
|
@output ||= ""
|
38
41
|
end
|
39
42
|
|
43
|
+
def junit_report
|
44
|
+
REXML::Document.new(File.open(XCPretty::JUnit::FILEPATH, 'r').read)
|
45
|
+
end
|
46
|
+
|
40
47
|
Before do
|
41
48
|
self.colorize = true
|
42
49
|
end
|
@@ -44,4 +51,5 @@ end
|
|
44
51
|
After do
|
45
52
|
@input = ""
|
46
53
|
@output = ""
|
54
|
+
FileUtils.rm_rf(XCPretty::JUnit::FILEPATH)
|
47
55
|
end
|
data/lib/xcpretty/printer.rb
CHANGED
@@ -16,9 +16,10 @@ module XCPretty
|
|
16
16
|
TESTS_RUN_COMPLETION_MATCHER = /Test Suite '(?:.*\/)?(.*[ox]ctest.*)' finished at(.*)/
|
17
17
|
|
18
18
|
# @regex Captured groups
|
19
|
-
# $1 =
|
20
|
-
# $2 =
|
21
|
-
|
19
|
+
# $1 = class
|
20
|
+
# $2 = test_case
|
21
|
+
# $3 = time
|
22
|
+
PASSING_TEST_MATCHER = /Test Case\s'-\[(.*)\s(.*)\]'\spassed\s\((\d*\.\d{3})\sseconds\)/
|
22
23
|
|
23
24
|
# @regex Captured groups
|
24
25
|
# $1 = file
|
@@ -0,0 +1,79 @@
|
|
1
|
+
|
2
|
+
module XCPretty
|
3
|
+
class JUnit
|
4
|
+
include Printer::Matchers
|
5
|
+
|
6
|
+
FILEPATH = 'build/reports/junit.xml'
|
7
|
+
|
8
|
+
def load_dependencies
|
9
|
+
unless @@loaded ||= false
|
10
|
+
require 'fileutils'
|
11
|
+
require 'rexml/document'
|
12
|
+
require 'rexml/formatters/pretty'
|
13
|
+
@@loaded = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
load_dependencies
|
19
|
+
@document = REXML::Document.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def handle(line)
|
23
|
+
case line
|
24
|
+
when TESTS_RUN_START_MATCHER
|
25
|
+
create_test_suite($1)
|
26
|
+
when TESTS_RUN_COMPLETION_MATCHER
|
27
|
+
finish_test_suite
|
28
|
+
when PASSING_TEST_MATCHER
|
29
|
+
create_passing_test_case($1, $2, $3)
|
30
|
+
when FAILING_TEST_MATCHER
|
31
|
+
create_failing_test_case($1, $2, $3, $4)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def finish
|
36
|
+
FileUtils.mkdir_p(File.dirname(FILEPATH))
|
37
|
+
formatter = REXML::Formatters::Pretty.new(2)
|
38
|
+
formatter.compact = true
|
39
|
+
formatter.write(@document, File.open(FILEPATH,'w+'))
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_test_suite(name)
|
43
|
+
@test_count = 0
|
44
|
+
@fail_count = 0
|
45
|
+
suite = @document.add_element('testsuite')
|
46
|
+
suite.attributes['name'] = $1
|
47
|
+
end
|
48
|
+
|
49
|
+
def finish_test_suite
|
50
|
+
current_suite.attributes['tests'] = @test_count
|
51
|
+
current_suite.attributes['failures'] = @fail_count
|
52
|
+
@test_count = 0
|
53
|
+
@fail_count = 0
|
54
|
+
end
|
55
|
+
|
56
|
+
def current_suite
|
57
|
+
@document.elements.to_a.last
|
58
|
+
end
|
59
|
+
|
60
|
+
def create_failing_test_case(file, classname, name, reason)
|
61
|
+
test_node = current_suite.add_element('testcase')
|
62
|
+
test_node.attributes['classname'] = classname
|
63
|
+
test_node.attributes['name'] = name
|
64
|
+
fail_node = test_node.add_element('failure')
|
65
|
+
fail_node.attributes['message'] = reason
|
66
|
+
fail_node.text = file
|
67
|
+
@test_count+=1
|
68
|
+
@fail_count+=1
|
69
|
+
end
|
70
|
+
|
71
|
+
def create_passing_test_case(classname, name, time)
|
72
|
+
test_node = current_suite.add_element('testcase')
|
73
|
+
test_node.attributes['classname'] = classname
|
74
|
+
test_node.attributes['name'] = name
|
75
|
+
test_node.attributes['time'] = time
|
76
|
+
@test_count+=1
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/lib/xcpretty/version.rb
CHANGED
data/lib/xcpretty.rb
CHANGED
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marin Usalj
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -82,13 +82,16 @@ files:
|
|
82
82
|
- .kick
|
83
83
|
- .travis.yml
|
84
84
|
- CHANGELOG.md
|
85
|
+
- CONTRIBUTING.md
|
85
86
|
- Gemfile
|
86
87
|
- LICENSE.txt
|
87
88
|
- README.md
|
88
89
|
- Rakefile
|
89
90
|
- bin/xcpretty
|
91
|
+
- features/junit_report.feature
|
90
92
|
- features/simple_format.feature
|
91
93
|
- features/steps/formatting_steps.rb
|
94
|
+
- features/steps/junit_steps.rb
|
92
95
|
- features/support/env.rb
|
93
96
|
- features/test_format.feature
|
94
97
|
- lib/xcpretty.rb
|
@@ -96,6 +99,7 @@ files:
|
|
96
99
|
- lib/xcpretty/printer.rb
|
97
100
|
- lib/xcpretty/printers/rspec.rb
|
98
101
|
- lib/xcpretty/printers/simple.rb
|
102
|
+
- lib/xcpretty/reporters/junit.rb
|
99
103
|
- lib/xcpretty/version.rb
|
100
104
|
- spec/fixtures/constants.rb
|
101
105
|
- spec/fixtures/raw_kiwi_compilation_fail.txt
|
@@ -134,8 +138,10 @@ signing_key:
|
|
134
138
|
specification_version: 4
|
135
139
|
summary: xcodebuild formatter done right
|
136
140
|
test_files:
|
141
|
+
- features/junit_report.feature
|
137
142
|
- features/simple_format.feature
|
138
143
|
- features/steps/formatting_steps.rb
|
144
|
+
- features/steps/junit_steps.rb
|
139
145
|
- features/support/env.rb
|
140
146
|
- features/test_format.feature
|
141
147
|
- spec/fixtures/constants.rb
|
@@ -149,4 +155,3 @@ test_files:
|
|
149
155
|
- spec/xcpretty/printers/printer_spec.rb
|
150
156
|
- spec/xcpretty/printers/rspec_spec.rb
|
151
157
|
- spec/xcpretty/printers/simple_spec.rb
|
152
|
-
has_rdoc:
|