teamcity_formatter 0.8.1 → 0.8.2
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/lib/team_city_formatter/formatter.rb +11 -3
- data/lib/team_city_formatter/logger.rb +20 -10
- data/readme.md +18 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1e00edb6a138b70ca7bc206f8c6d1ad15661bda
|
4
|
+
data.tar.gz: 412bc7a87bdc89b82d7f4a485d0e7f253401a16e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 216e531e2e73a4fa757a23e1e06b2f0733fed19265e26ebc342a1808e5cc604daa5d7dde38fdafddcdddd85abf5ce38a66d2e2583e24cff9e0fbe880c6effe6d
|
7
|
+
data.tar.gz: afb159525bd623b3219994a58c87fa07326eea2d08545740a42b63ed862432a3e847d6bc2dd94b8c50c50e8d5dd5bdb417e089a263367a508be55d8b877092fd
|
@@ -76,7 +76,11 @@ module TeamCityFormatter
|
|
76
76
|
example = @scenario_outline.examples.find { |example| example.column_values == cuke_table_row.cells }
|
77
77
|
test_name = scenario_outline_test_name(@scenario_outline.name, example.column_values)
|
78
78
|
if exception
|
79
|
-
|
79
|
+
if exception.is_a? ::Cucumber::Pending
|
80
|
+
@logger.test_ignored(test_name, 'Pending test')
|
81
|
+
else
|
82
|
+
@logger.test_failed(test_name, exception)
|
83
|
+
end
|
80
84
|
end
|
81
85
|
@logger.test_finished(test_name)
|
82
86
|
|
@@ -117,7 +121,11 @@ module TeamCityFormatter
|
|
117
121
|
def after_scenario(cuke_scenario)
|
118
122
|
test_name = @scenario.name
|
119
123
|
if @exception
|
120
|
-
@
|
124
|
+
if @exception.is_a? ::Cucumber::Pending
|
125
|
+
@logger.test_ignored(test_name, 'Pending test')
|
126
|
+
else
|
127
|
+
@logger.test_failed_with_exception(test_name, @exception)
|
128
|
+
end
|
121
129
|
end
|
122
130
|
# a background step previously failed and was reported the first time the failure happened
|
123
131
|
if (cuke_scenario.status == :skipped) && (@exception == nil)
|
@@ -131,7 +139,7 @@ module TeamCityFormatter
|
|
131
139
|
end
|
132
140
|
|
133
141
|
def scenario_outline_test_name(scenario_outline_name, example_column_values)
|
134
|
-
"#{scenario_outline_name}
|
142
|
+
"#{scenario_outline_name} | #{example_column_values.join(' | ')} |"
|
135
143
|
end
|
136
144
|
end
|
137
145
|
end
|
@@ -5,15 +5,15 @@ module TeamCityFormatter
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def test_suite_started(test_suite_name)
|
8
|
-
render_output("##teamcity[testSuiteStarted name='#{teamcity_escape(test_suite_name)}' timestamp='#{timestamp}']")
|
8
|
+
render_output("##teamcity[testSuiteStarted flowId='#{flow_id}' name='#{teamcity_escape(test_suite_name)}' timestamp='#{timestamp}']")
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_suite_finished(test_suite_name)
|
12
|
-
render_output("##teamcity[testSuiteFinished name='#{teamcity_escape(test_suite_name)}' timestamp='#{timestamp}']")
|
12
|
+
render_output("##teamcity[testSuiteFinished flowId='#{flow_id}' name='#{teamcity_escape(test_suite_name)}' timestamp='#{timestamp}']")
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_started(test_name)
|
16
|
-
render_output("##teamcity[testStarted name='#{teamcity_escape(test_name)}' timestamp='#{timestamp}'
|
16
|
+
render_output("##teamcity[testStarted flowId='#{flow_id}' name='#{teamcity_escape(test_name)}' captureStandardOutput='true' timestamp='#{timestamp}']")
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_failed_with_exception(test_name, exception)
|
@@ -22,11 +22,15 @@ module TeamCityFormatter
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_failed(test_name, details)
|
25
|
-
render_output("##teamcity[testFailed name='#{teamcity_escape(test_name)}'
|
25
|
+
render_output("##teamcity[testFailed flowId='#{flow_id}' name='#{teamcity_escape(test_name)}' message='#{teamcity_escape(details)}' timestamp='#{timestamp}']")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_ignored(test_name, details)
|
29
|
+
render_output("##teamcity[testIgnored flowId='#{flow_id}' name='#{teamcity_escape(test_name)}' message='#{teamcity_escape(details)}' timestamp='#{timestamp}']")
|
26
30
|
end
|
27
31
|
|
28
32
|
def test_finished(test_name)
|
29
|
-
render_output("##teamcity[testFinished name='#{teamcity_escape(test_name)}' timestamp='#{timestamp}']")
|
33
|
+
render_output("##teamcity[testFinished flowId='#{flow_id}' name='#{teamcity_escape(test_name)}' timestamp='#{timestamp}']")
|
30
34
|
end
|
31
35
|
|
32
36
|
private
|
@@ -38,11 +42,13 @@ module TeamCityFormatter
|
|
38
42
|
|
39
43
|
def teamcity_escape(s)
|
40
44
|
s.to_s.strip
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
45
|
+
.gsub(':', ' -')
|
46
|
+
.gsub('|', '||')
|
47
|
+
.gsub("'", "|'")
|
48
|
+
.gsub(']', '|]')
|
49
|
+
.gsub('[', '|[')
|
50
|
+
.gsub("\r", '|r')
|
51
|
+
.gsub("\n", '|n')
|
46
52
|
end
|
47
53
|
|
48
54
|
def timestamp_short
|
@@ -59,5 +65,9 @@ module TeamCityFormatter
|
|
59
65
|
lines = ["#{exception.message} (#{exception.class})"] + exception.backtrace
|
60
66
|
lines.join("\n")
|
61
67
|
end
|
68
|
+
|
69
|
+
def flow_id
|
70
|
+
Process.pid
|
71
|
+
end
|
62
72
|
end
|
63
73
|
end
|
data/readme.md
CHANGED
@@ -39,12 +39,30 @@ Sceanrio Outline Example | Test
|
|
39
39
|
|
40
40
|
Test failures include the stack trace of the exception which triggered the failure.
|
41
41
|
|
42
|
+
## Features
|
43
|
+
|
44
|
+
### Support [parallel_cucumber](https://rubygems.org/gems/parallel_cucumber)
|
45
|
+
|
46
|
+
The formatter now includes a `flowId` attribute in output messages. `flowId` is the test runner process id.
|
47
|
+
|
48
|
+
### Pending Scenarios and Scenario Examples
|
49
|
+
|
50
|
+
Pending scenarios and scenario examples are logged as ignored tests.
|
51
|
+
|
42
52
|
## Acknowledgements
|
43
53
|
|
44
54
|
This gem drew some code from [`cucumber_teamcity`](https://github.com/ankurcha/cucumber_teamcity/). The `cucumber_teamcity` formatter is not compatible with Cucumber 2.
|
45
55
|
|
46
56
|
Also, though we did not use code from their project, JetBrains makes available some TeamCity-related code [here](https://github.com/JetBrains/intellij-plugins/tree/master/ruby-testing/src/rb/testing/patch/bdd/teamcity), which may be of interest to others researching TeamCity Cucumber formatters.
|
47
57
|
|
58
|
+
Thank you to contributors:
|
59
|
+
|
60
|
+
Contributor | Contribution
|
61
|
+
--- | ---
|
62
|
+
[PositiveAlex](https://github.com/PositiveAlex) | Allow cucumber to use the formatter directly from the command line
|
63
|
+
[aklossrbh](https://github.com/aklossrbh) | Support [parallel_cucumber](https://rubygems.org/gems/parallel_cucumber)
|
64
|
+
[gricsi](https://github.com/gricsi) | Log pending scenarios and scenario examples as ignored tests
|
65
|
+
|
48
66
|
## License
|
49
67
|
|
50
68
|
Apache License, Version 2.0
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teamcity_formatter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Rood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
|
-
- -
|
16
|
+
- - '>='
|
17
17
|
- !ruby/object:Gem::Version
|
18
18
|
version: '2.0'
|
19
19
|
name: cucumber
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
type: :runtime
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
27
|
description: Render cucumber test output in a format consumable by TeamCity
|
@@ -46,17 +46,17 @@ require_paths:
|
|
46
46
|
- lib
|
47
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
|
-
- -
|
49
|
+
- - '>='
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '0'
|
52
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - '>='
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project:
|
59
|
-
rubygems_version: 2.
|
59
|
+
rubygems_version: 2.1.9
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: TeamCity cucumber output formatter
|