xcpretty 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
![xcpretty --simple](http://i.imgur.com/LdmozBS.gif)
|
23
23
|
|
24
|
-
-
|
24
|
+
- `--test`, `-t` (RSpec style)
|
25
25
|
![xcpretty alpha](http://i.imgur.com/VeTQQub.gif)
|
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:
|