cucumber 1.3.16 → 1.3.17
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.
- data/.travis.yml +1 -1
- data/History.md +5 -0
- data/cucumber.gemspec +1 -1
- data/features/json_formatter.feature +254 -0
- data/features/step_definitions/cucumber_steps.rb +4 -2
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +89 -7
- data/lib/cucumber/formatter/html.rb +9 -1
- data/lib/cucumber/formatter/json.rb +1 -1
- data/lib/cucumber/platform.rb +1 -1
- data/spec/cucumber/formatter/html_spec.rb +32 -1
- data/spec/cucumber/formatter/progress_spec.rb +63 -16
- metadata +115 -67
- checksums.yaml +0 -7
data/.travis.yml
CHANGED
data/History.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## [In Git](https://github.com/cucumber/cucumber/compare/v1.3.16...v1.3.x-bugfix)
|
2
2
|
|
3
|
+
* Rescue ArgumentError on split so formatters don't fail due to bad encoding ([692](https://github.com/cucumber/cucumber/pull/692) Arthur Silva)
|
4
|
+
* Support embedding images directly in HTML files ([696](https://github.com/cucumber/cucumber/pull/696) @brasmusson)
|
5
|
+
* Support embedding images directly in Gherkin formatters ([695](https://github.com/cucumber/cucumber/pull/695) @brasmusson)
|
6
|
+
* Fix JSON formatter output for expand mode ([700](https://github.com/cucumber/cucumber/pull/700) @brasmusson)
|
7
|
+
|
3
8
|
## [v1.3.16](https://github.com/cucumber/cucumber/compare/v1.3.15...v1.3.16)
|
4
9
|
|
5
10
|
* Add RSpec 3 test double support ([689](https://github.com/cucumber/cucumber/pull/689) @cyphactor)
|
data/cucumber.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.add_dependency 'multi_json', '>= 1.7.5', '< 2.0'
|
20
20
|
s.add_dependency 'multi_test', '>= 0.1.1'
|
21
21
|
|
22
|
-
s.add_development_dependency 'aruba', '
|
22
|
+
s.add_development_dependency 'aruba', '= 0.5.2'
|
23
23
|
s.add_development_dependency 'json', '~> 1.7'
|
24
24
|
s.add_development_dependency 'nokogiri', '~> 1.5.2'
|
25
25
|
s.add_development_dependency 'rake', '>= 0.9.2', '< 10.2'
|
@@ -54,6 +54,11 @@ Feature: JSON output formatter
|
|
54
54
|
Given /^I print from step definition/ do
|
55
55
|
puts "from step definition"
|
56
56
|
end
|
57
|
+
|
58
|
+
Given /^I embed data directly/ do
|
59
|
+
data = "YWJj"
|
60
|
+
embed data, "mime-type;base64"
|
61
|
+
end
|
57
62
|
"""
|
58
63
|
And a file named "features/embed.feature" with:
|
59
64
|
"""
|
@@ -72,6 +77,31 @@ Feature: JSON output formatter
|
|
72
77
|
And I print from step definition
|
73
78
|
|
74
79
|
"""
|
80
|
+
And a file named "features/outline.feature" with:
|
81
|
+
"""
|
82
|
+
Feature: An outline feature
|
83
|
+
|
84
|
+
Scenario Outline: outline
|
85
|
+
Given a <type> step
|
86
|
+
|
87
|
+
Examples: examples1
|
88
|
+
| type |
|
89
|
+
| passing |
|
90
|
+
| failing |
|
91
|
+
|
92
|
+
Examples: examples2
|
93
|
+
| type |
|
94
|
+
| passing |
|
95
|
+
|
96
|
+
"""
|
97
|
+
And a file named "features/embed_data_directly.feature" with:
|
98
|
+
"""
|
99
|
+
Feature: An embed data directly feature
|
100
|
+
|
101
|
+
Scenario:
|
102
|
+
Given I embed data directly
|
103
|
+
|
104
|
+
"""
|
75
105
|
|
76
106
|
# Need to investigate why this won't pass in-process. error_message doesn't get det?
|
77
107
|
@spawn
|
@@ -405,4 +435,228 @@ Feature: JSON output formatter
|
|
405
435
|
}
|
406
436
|
]
|
407
437
|
|
438
|
+
"""
|
439
|
+
Scenario: embedding data directly
|
440
|
+
When I run `cucumber -b --format json features/embed_data_directly.feature`
|
441
|
+
Then it should pass with JSON:
|
442
|
+
"""
|
443
|
+
[
|
444
|
+
{
|
445
|
+
"uri": "features/embed_data_directly.feature",
|
446
|
+
"id": "an-embed-data-directly-feature",
|
447
|
+
"keyword": "Feature",
|
448
|
+
"name": "An embed data directly feature",
|
449
|
+
"line": 1,
|
450
|
+
"description": "",
|
451
|
+
"elements": [
|
452
|
+
{
|
453
|
+
"id": "an-embed-data-directly-feature;",
|
454
|
+
"keyword": "Scenario",
|
455
|
+
"name": "",
|
456
|
+
"line": 3,
|
457
|
+
"description": "",
|
458
|
+
"type": "scenario",
|
459
|
+
"steps": [
|
460
|
+
{
|
461
|
+
"keyword": "Given ",
|
462
|
+
"name": "I embed data directly",
|
463
|
+
"line": 4,
|
464
|
+
"embeddings": [
|
465
|
+
{
|
466
|
+
"mime_type": "mime-type",
|
467
|
+
"data": "YWJj"
|
468
|
+
}
|
469
|
+
],
|
470
|
+
"match": {
|
471
|
+
"location": "features/step_definitions/steps.rb:38"
|
472
|
+
},
|
473
|
+
"result": {
|
474
|
+
"status": "passed",
|
475
|
+
"duration": 1
|
476
|
+
}
|
477
|
+
}
|
478
|
+
]
|
479
|
+
}
|
480
|
+
]
|
481
|
+
}
|
482
|
+
]
|
483
|
+
|
484
|
+
"""
|
485
|
+
@spawn
|
486
|
+
Scenario: scenario outline
|
487
|
+
When I run `cucumber --format json features/outline.feature`
|
488
|
+
Then it should fail with JSON:
|
489
|
+
"""
|
490
|
+
[
|
491
|
+
{
|
492
|
+
"uri": "features/outline.feature",
|
493
|
+
"id": "an-outline-feature",
|
494
|
+
"keyword": "Feature",
|
495
|
+
"name": "An outline feature",
|
496
|
+
"line": 1,
|
497
|
+
"description": "",
|
498
|
+
"elements": [
|
499
|
+
{
|
500
|
+
"id": "an-outline-feature;outline",
|
501
|
+
"keyword": "Scenario Outline",
|
502
|
+
"name": "outline",
|
503
|
+
"line": 3,
|
504
|
+
"description": "",
|
505
|
+
"type": "scenario_outline",
|
506
|
+
"steps": [
|
507
|
+
{
|
508
|
+
"keyword": "Given ",
|
509
|
+
"name": "a <type> step",
|
510
|
+
"line": 4,
|
511
|
+
"match": {
|
512
|
+
"location": "features/step_definitions/steps.rb:1"
|
513
|
+
}
|
514
|
+
}
|
515
|
+
],
|
516
|
+
"examples": [
|
517
|
+
{
|
518
|
+
"keyword": "Examples",
|
519
|
+
"name": "examples1",
|
520
|
+
"line": 6,
|
521
|
+
"description": "",
|
522
|
+
"id": "an-outline-feature;outline;examples1",
|
523
|
+
"rows": [
|
524
|
+
{
|
525
|
+
"cells": [
|
526
|
+
"type"
|
527
|
+
],
|
528
|
+
"line": 7,
|
529
|
+
"id": "an-outline-feature;outline;examples1;1"
|
530
|
+
},
|
531
|
+
{
|
532
|
+
"cells": [
|
533
|
+
"passing"
|
534
|
+
],
|
535
|
+
"line": 8,
|
536
|
+
"id": "an-outline-feature;outline;examples1;2"
|
537
|
+
},
|
538
|
+
{
|
539
|
+
"cells": [
|
540
|
+
"failing"
|
541
|
+
],
|
542
|
+
"line": 9,
|
543
|
+
"id": "an-outline-feature;outline;examples1;3"
|
544
|
+
}
|
545
|
+
]
|
546
|
+
},
|
547
|
+
{
|
548
|
+
"keyword": "Examples",
|
549
|
+
"name": "examples2",
|
550
|
+
"line": 11,
|
551
|
+
"description": "",
|
552
|
+
"id": "an-outline-feature;outline;examples2",
|
553
|
+
"rows": [
|
554
|
+
{
|
555
|
+
"cells": [
|
556
|
+
"type"
|
557
|
+
],
|
558
|
+
"line": 12,
|
559
|
+
"id": "an-outline-feature;outline;examples2;1"
|
560
|
+
},
|
561
|
+
{
|
562
|
+
"cells": [
|
563
|
+
"passing"
|
564
|
+
],
|
565
|
+
"line": 13,
|
566
|
+
"id": "an-outline-feature;outline;examples2;2"
|
567
|
+
}
|
568
|
+
]
|
569
|
+
}
|
570
|
+
]
|
571
|
+
}
|
572
|
+
]
|
573
|
+
}
|
574
|
+
]
|
575
|
+
|
576
|
+
"""
|
577
|
+
@spawn
|
578
|
+
Scenario: scenario outline expanded
|
579
|
+
When I run `cucumber --expand --format json features/outline.feature`
|
580
|
+
Then it should fail with JSON:
|
581
|
+
"""
|
582
|
+
[
|
583
|
+
{
|
584
|
+
"uri": "features/outline.feature",
|
585
|
+
"id": "an-outline-feature",
|
586
|
+
"keyword": "Feature",
|
587
|
+
"name": "An outline feature",
|
588
|
+
"line": 1,
|
589
|
+
"description": "",
|
590
|
+
"elements": [
|
591
|
+
{
|
592
|
+
"id": "an-outline-feature;outline;examples1;2",
|
593
|
+
"keyword": "Scenario Outline",
|
594
|
+
"name": "outline",
|
595
|
+
"line": 8,
|
596
|
+
"description": "",
|
597
|
+
"type": "scenario",
|
598
|
+
"steps": [
|
599
|
+
{
|
600
|
+
"keyword": "Given ",
|
601
|
+
"name": "a passing step",
|
602
|
+
"line": 4,
|
603
|
+
"match": {
|
604
|
+
"location": "features/step_definitions/steps.rb:1"
|
605
|
+
},
|
606
|
+
"result": {
|
607
|
+
"status": "passed",
|
608
|
+
"duration": 1
|
609
|
+
}
|
610
|
+
}
|
611
|
+
]
|
612
|
+
},
|
613
|
+
{
|
614
|
+
"id": "an-outline-feature;outline;examples1;3",
|
615
|
+
"keyword": "Scenario Outline",
|
616
|
+
"name": "outline",
|
617
|
+
"line": 9,
|
618
|
+
"description": "",
|
619
|
+
"type": "scenario",
|
620
|
+
"steps": [
|
621
|
+
{
|
622
|
+
"keyword": "Given ",
|
623
|
+
"name": "a failing step",
|
624
|
+
"line": 4,
|
625
|
+
"match": {
|
626
|
+
"location": "features/step_definitions/steps.rb:5"
|
627
|
+
},
|
628
|
+
"result": {
|
629
|
+
"status": "failed",
|
630
|
+
"error_message" : " (RuntimeError)\n./features/step_definitions/steps.rb:6:in `/a failing step/'\nfeatures/outline.feature:4:in `Given a <type> step'",
|
631
|
+
"duration": 1
|
632
|
+
}
|
633
|
+
}
|
634
|
+
]
|
635
|
+
},
|
636
|
+
{
|
637
|
+
"id": "an-outline-feature;outline;examples2;2",
|
638
|
+
"keyword": "Scenario Outline",
|
639
|
+
"name": "outline",
|
640
|
+
"line": 13,
|
641
|
+
"description": "",
|
642
|
+
"type": "scenario",
|
643
|
+
"steps": [
|
644
|
+
{
|
645
|
+
"keyword": "Given ",
|
646
|
+
"name": "a passing step",
|
647
|
+
"line": 4,
|
648
|
+
"match": {
|
649
|
+
"location": "features/step_definitions/steps.rb:1"
|
650
|
+
},
|
651
|
+
"result": {
|
652
|
+
"status": "passed",
|
653
|
+
"duration": 1
|
654
|
+
}
|
655
|
+
}
|
656
|
+
]
|
657
|
+
}
|
658
|
+
]
|
659
|
+
}
|
660
|
+
]
|
661
|
+
|
408
662
|
"""
|
@@ -17,8 +17,10 @@ Then /^it should (pass|fail) with JSON:$/ do |pass_fail, json|
|
|
17
17
|
actual.each do |feature|
|
18
18
|
feature['elements'].each do |scenario|
|
19
19
|
scenario['steps'].each do |step|
|
20
|
-
step['result']
|
21
|
-
|
20
|
+
if step['result']
|
21
|
+
step['result']['duration'].should be >= 0
|
22
|
+
step['result']['duration'] = 1
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -6,9 +6,10 @@ module Cucumber
|
|
6
6
|
# Adapts Cucumber formatter events to Gherkin formatter events
|
7
7
|
# This class will disappear when Cucumber is based on Gherkin's model.
|
8
8
|
class GherkinFormatterAdapter
|
9
|
-
def initialize(gherkin_formatter, print_empty_match)
|
9
|
+
def initialize(gherkin_formatter, print_empty_match, options)
|
10
10
|
@gf = gherkin_formatter
|
11
11
|
@print_empty_match = print_empty_match
|
12
|
+
@options = options
|
12
13
|
end
|
13
14
|
|
14
15
|
def before_feature(feature)
|
@@ -28,14 +29,47 @@ module Cucumber
|
|
28
29
|
@gf.scenario(feature_element.gherkin_statement)
|
29
30
|
when Ast::ScenarioOutline
|
30
31
|
@outline = true
|
31
|
-
@
|
32
|
+
if @options[:expand]
|
33
|
+
@in_instantiated_scenario = false
|
34
|
+
@current_scenario_hash = to_hash(feature_element.gherkin_statement)
|
35
|
+
else
|
36
|
+
@gf.scenario_outline(feature_element.gherkin_statement)
|
37
|
+
end
|
32
38
|
else
|
33
39
|
raise "Bad type: #{feature_element.class}"
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
43
|
+
def scenario_name(keyword, name, file_colon_line, source_indent)
|
44
|
+
if @outline and @options[:expand]
|
45
|
+
return if not @in_instantiated_scenario
|
46
|
+
if @new_example_table
|
47
|
+
@example_row = 1
|
48
|
+
@new_example_table = false
|
49
|
+
else
|
50
|
+
@example_row += 1
|
51
|
+
end
|
52
|
+
example_row_hash = @current_example_rows[@example_row].to_hash
|
53
|
+
scenario = Gherkin::Formatter::Model::Scenario.new(
|
54
|
+
@current_scenario_hash['comments'],
|
55
|
+
@current_scenario_hash['tags'],
|
56
|
+
@current_scenario_hash['keyword'],
|
57
|
+
@current_scenario_hash['name'],
|
58
|
+
@current_scenario_hash['description'],
|
59
|
+
example_row_hash['line'],
|
60
|
+
example_row_hash['id'])
|
61
|
+
@gf.scenario(scenario)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
37
65
|
def before_step(step)
|
38
|
-
@
|
66
|
+
unless @outline and @options[:expand]
|
67
|
+
@gf.step(step.gherkin_statement)
|
68
|
+
else
|
69
|
+
if @in_instantiated_scenario
|
70
|
+
@current_step_hash = to_hash(step.gherkin_statement)
|
71
|
+
end
|
72
|
+
end
|
39
73
|
if @print_empty_match
|
40
74
|
if(@outline)
|
41
75
|
match = Gherkin::Formatter::Model::Match.new(step.gherkin_statement.outline_args, nil)
|
@@ -55,23 +89,52 @@ module Cucumber
|
|
55
89
|
# Trick the formatter to believe that's what was printed previously so we get arg highlights on #result
|
56
90
|
@gf.instance_variable_set('@match', match)
|
57
91
|
else
|
58
|
-
@
|
92
|
+
unless @outline and @options[:expand]
|
93
|
+
@gf.match(match)
|
94
|
+
end
|
59
95
|
end
|
60
96
|
|
61
97
|
error_message = exception ? "#{exception.message} (#{exception.class})\n#{exception.backtrace.join("\n")}" : nil
|
62
98
|
unless @outline
|
63
99
|
@gf.result(Gherkin::Formatter::Model::Result.new(status, nil, error_message))
|
100
|
+
else
|
101
|
+
if @options[:expand] and @in_instantiated_scenario
|
102
|
+
@current_match = match
|
103
|
+
@current_result = Gherkin::Formatter::Model::Result.new(status, nil, error_message)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def step_name(keyword, step_match, status, source_indent, background, file_colon_line)
|
109
|
+
if @outline and @options[:expand] and @in_instantiated_scenario
|
110
|
+
@gf.step(Gherkin::Formatter::Model::Step.new(
|
111
|
+
@current_step_hash['comments'],
|
112
|
+
@current_step_hash['keyword'],
|
113
|
+
step_match.format_args(),
|
114
|
+
@current_step_hash['line'],
|
115
|
+
@current_step_hash['rows'],
|
116
|
+
@current_step_hash['doc_string']))
|
117
|
+
@gf.match(@current_match)
|
118
|
+
@gf.result(@current_result)
|
64
119
|
end
|
65
120
|
end
|
66
121
|
|
67
122
|
def before_examples(examples)
|
68
|
-
@
|
123
|
+
unless @options[:expand]
|
124
|
+
@gf.examples(examples.gherkin_statement)
|
125
|
+
else
|
126
|
+
@in_instantiated_scenario = true
|
127
|
+
@new_example_table = true
|
128
|
+
@current_example_rows = to_hash(examples.gherkin_statement)['rows']
|
129
|
+
end
|
69
130
|
end
|
70
131
|
|
71
132
|
#used for capturing duration
|
72
133
|
def after_step(step)
|
73
134
|
step_finish = (Time.now - @step_time)
|
74
|
-
@
|
135
|
+
unless @outline and @options[:expand] and not @in_instantiated_scenario
|
136
|
+
@gf.append_duration(step_finish)
|
137
|
+
end
|
75
138
|
end
|
76
139
|
|
77
140
|
def after_feature(feature)
|
@@ -83,7 +146,16 @@ module Cucumber
|
|
83
146
|
end
|
84
147
|
|
85
148
|
def embed(file, mime_type, label)
|
86
|
-
|
149
|
+
if File.file?(file)
|
150
|
+
data = File.open(file, 'rb') { |f| f.read }
|
151
|
+
else
|
152
|
+
if mime_type =~ /;base64$/
|
153
|
+
mime_type = mime_type[0..-8]
|
154
|
+
data = Base64.decode64(file)
|
155
|
+
else
|
156
|
+
data = file
|
157
|
+
end
|
158
|
+
end
|
87
159
|
if defined?(JRUBY_VERSION)
|
88
160
|
data = data.to_java_bytes
|
89
161
|
end
|
@@ -93,6 +165,16 @@ module Cucumber
|
|
93
165
|
def puts(message)
|
94
166
|
@gf.write(message)
|
95
167
|
end
|
168
|
+
|
169
|
+
private
|
170
|
+
|
171
|
+
def to_hash(gherkin_statement)
|
172
|
+
if defined?(JRUBY_VERSION)
|
173
|
+
gherkin_statement.toMap()
|
174
|
+
else
|
175
|
+
gherkin_statement.to_hash
|
176
|
+
end
|
177
|
+
end
|
96
178
|
end
|
97
179
|
end
|
98
180
|
end
|
@@ -28,6 +28,10 @@ module Cucumber
|
|
28
28
|
def embed(src, mime_type, label)
|
29
29
|
case(mime_type)
|
30
30
|
when /^image\/(png|gif|jpg|jpeg)/
|
31
|
+
unless File.file?(src) or src =~ /^data:image\/(png|gif|jpg|jpeg);base64,/
|
32
|
+
type = mime_type =~ /;base[0-9]+$/ ? mime_type : mime_type + ";base64"
|
33
|
+
src = "data:" + type + "," + src
|
34
|
+
end
|
31
35
|
embed_image(src, label)
|
32
36
|
end
|
33
37
|
end
|
@@ -598,8 +602,12 @@ module Cucumber
|
|
598
602
|
|
599
603
|
def lines_around(file, line)
|
600
604
|
if File.file?(file)
|
605
|
+
begin
|
601
606
|
lines = File.open(file).read.split("\n")
|
602
|
-
|
607
|
+
rescue ArgumentError
|
608
|
+
return "# Couldn't get snippet for #{file}"
|
609
|
+
end
|
610
|
+
min = [0, line-3].max
|
603
611
|
max = [line+1, lines.length-1].min
|
604
612
|
selected_lines = []
|
605
613
|
selected_lines.join("\n")
|
data/lib/cucumber/platform.rb
CHANGED
@@ -4,7 +4,7 @@ require 'rbconfig'
|
|
4
4
|
|
5
5
|
module Cucumber
|
6
6
|
unless defined?(Cucumber::VERSION)
|
7
|
-
VERSION = '1.3.
|
7
|
+
VERSION = '1.3.17'
|
8
8
|
BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
|
9
9
|
LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
10
10
|
JRUBY = defined?(JRUBY_VERSION)
|
@@ -235,7 +235,10 @@ module Cucumber
|
|
235
235
|
|
236
236
|
describe "with a step that embeds a snapshot" do
|
237
237
|
define_steps do
|
238
|
-
Given(/snap/) {
|
238
|
+
Given(/snap/) {
|
239
|
+
File.should_receive(:file?).with('snapshot.jpeg').and_return(true)
|
240
|
+
embed('snapshot.jpeg', 'image/jpeg')
|
241
|
+
}
|
239
242
|
end
|
240
243
|
|
241
244
|
define_feature(<<-FEATURE)
|
@@ -247,6 +250,34 @@ module Cucumber
|
|
247
250
|
it { @doc.css('.embed img').first.attributes['src'].to_s.should == "snapshot.jpeg" }
|
248
251
|
end
|
249
252
|
|
253
|
+
describe "with a step that embeds a snapshot content manually" do
|
254
|
+
define_steps do
|
255
|
+
Given(/snap/) { embed('data:image/png;base64,YWJj', 'image/png') }
|
256
|
+
end
|
257
|
+
|
258
|
+
define_feature(<<-FEATURE)
|
259
|
+
Feature:
|
260
|
+
Scenario:
|
261
|
+
Given snap
|
262
|
+
FEATURE
|
263
|
+
|
264
|
+
it { @doc.css('.embed img').first.attributes['src'].to_s.should == "data:image/png;base64,YWJj" }
|
265
|
+
end
|
266
|
+
|
267
|
+
describe "with a step that embeds a snapshot content" do
|
268
|
+
define_steps do
|
269
|
+
Given(/snap/) { embed('YWJj', 'image/png;base64') }
|
270
|
+
end
|
271
|
+
|
272
|
+
define_feature(<<-FEATURE)
|
273
|
+
Feature:
|
274
|
+
Scenario:
|
275
|
+
Given snap
|
276
|
+
FEATURE
|
277
|
+
|
278
|
+
it { @doc.css('.embed img').first.attributes['src'].to_s.should == "data:image/png;base64,YWJj" }
|
279
|
+
end
|
280
|
+
|
250
281
|
describe "with an undefined Given step then an undefined And step" do
|
251
282
|
define_feature(<<-FEATURE)
|
252
283
|
Feature:
|
@@ -1,38 +1,85 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'cucumber/formatter/progress'
|
3
|
+
require 'cucumber/formatter/spec_helper'
|
4
|
+
require 'cucumber/cli/options'
|
3
5
|
|
4
6
|
module Cucumber
|
5
7
|
module Formatter
|
6
8
|
describe Progress do
|
9
|
+
extend SpecHelperDsl
|
10
|
+
include SpecHelper
|
7
11
|
|
8
12
|
before(:each) do
|
9
13
|
Cucumber::Term::ANSIColor.coloring = false
|
10
14
|
@out = StringIO.new
|
11
|
-
|
12
|
-
@visitor = Cucumber::Ast::TreeWalker.new(nil, [progress])
|
15
|
+
@formatter = Progress.new(step_mother, @out, {})
|
13
16
|
end
|
14
17
|
|
15
|
-
describe "
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
describe "given a single feature" do
|
19
|
+
before(:each) do
|
20
|
+
run_defined_feature
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "with a scenario" do
|
24
|
+
define_feature <<-FEATURE
|
25
|
+
Feature: Banana party
|
26
|
+
|
27
|
+
Scenario: Monkey eats banana
|
28
|
+
Given there are bananas
|
29
|
+
FEATURE
|
30
|
+
|
31
|
+
it "outputs the undefined step" do
|
32
|
+
expect(@out.string).to include "U\n"
|
21
33
|
end
|
22
|
-
|
34
|
+
end
|
23
35
|
|
24
|
-
|
36
|
+
describe "with a background" do
|
37
|
+
define_feature <<-FEATURE
|
38
|
+
Feature: Banana party
|
39
|
+
|
40
|
+
Background:
|
41
|
+
Given a tree
|
42
|
+
|
43
|
+
Scenario: Monkey eats banana
|
44
|
+
Given there are bananas
|
45
|
+
FEATURE
|
46
|
+
|
47
|
+
it "outputs the two undefined steps" do
|
48
|
+
expect(@out.string).to include "UU\n"
|
49
|
+
end
|
25
50
|
end
|
26
|
-
end
|
27
51
|
|
28
|
-
|
29
|
-
|
30
|
-
|
52
|
+
describe "with a scenario outline" do
|
53
|
+
define_feature <<-FEATURE
|
54
|
+
Feature: Fud Pyramid
|
55
|
+
|
56
|
+
Scenario Outline: Monkey eats a balanced diet
|
57
|
+
Given there are <Things>
|
58
|
+
|
59
|
+
Examples: Fruit
|
60
|
+
| Things |
|
61
|
+
| apples |
|
62
|
+
| bananas |
|
63
|
+
Examples: Vegetables
|
64
|
+
| Things |
|
65
|
+
| broccoli |
|
66
|
+
| carrots |
|
67
|
+
FEATURE
|
68
|
+
|
69
|
+
it "outputs each undefined step" do
|
70
|
+
expect(@out.string).to include "UUUU\n"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "has 4 undefined scenarios" do
|
74
|
+
expect(@out.string).to include "4 scenarios (4 undefined)"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "has 4 undefined steps" do
|
78
|
+
expect(@out.string).to include "4 steps (4 undefined)"
|
79
|
+
end
|
31
80
|
|
32
|
-
@out.string.should == ""
|
33
81
|
end
|
34
82
|
end
|
35
|
-
|
36
83
|
end
|
37
84
|
end
|
38
85
|
end
|
metadata
CHANGED
@@ -1,353 +1,400 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.17
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Aslak Hellesøy
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-09-13 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: builder
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 2.1.2
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 2.1.2
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: diff-lcs
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: 1.1.3
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: 1.1.3
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: gherkin
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '2.12'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '2.12'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: multi_json
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: 1.7.5
|
62
|
-
- -
|
70
|
+
- - <
|
63
71
|
- !ruby/object:Gem::Version
|
64
72
|
version: '2.0'
|
65
73
|
type: :runtime
|
66
74
|
prerelease: false
|
67
75
|
version_requirements: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
68
77
|
requirements:
|
69
|
-
- -
|
78
|
+
- - ! '>='
|
70
79
|
- !ruby/object:Gem::Version
|
71
80
|
version: 1.7.5
|
72
|
-
- -
|
81
|
+
- - <
|
73
82
|
- !ruby/object:Gem::Version
|
74
83
|
version: '2.0'
|
75
84
|
- !ruby/object:Gem::Dependency
|
76
85
|
name: multi_test
|
77
86
|
requirement: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
78
88
|
requirements:
|
79
|
-
- -
|
89
|
+
- - ! '>='
|
80
90
|
- !ruby/object:Gem::Version
|
81
91
|
version: 0.1.1
|
82
92
|
type: :runtime
|
83
93
|
prerelease: false
|
84
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
85
96
|
requirements:
|
86
|
-
- -
|
97
|
+
- - ! '>='
|
87
98
|
- !ruby/object:Gem::Version
|
88
99
|
version: 0.1.1
|
89
100
|
- !ruby/object:Gem::Dependency
|
90
101
|
name: aruba
|
91
102
|
requirement: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
92
104
|
requirements:
|
93
|
-
- -
|
105
|
+
- - '='
|
94
106
|
- !ruby/object:Gem::Version
|
95
107
|
version: 0.5.2
|
96
108
|
type: :development
|
97
109
|
prerelease: false
|
98
110
|
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
99
112
|
requirements:
|
100
|
-
- -
|
113
|
+
- - '='
|
101
114
|
- !ruby/object:Gem::Version
|
102
115
|
version: 0.5.2
|
103
116
|
- !ruby/object:Gem::Dependency
|
104
117
|
name: json
|
105
118
|
requirement: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
106
120
|
requirements:
|
107
|
-
- -
|
121
|
+
- - ~>
|
108
122
|
- !ruby/object:Gem::Version
|
109
123
|
version: '1.7'
|
110
124
|
type: :development
|
111
125
|
prerelease: false
|
112
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
113
128
|
requirements:
|
114
|
-
- -
|
129
|
+
- - ~>
|
115
130
|
- !ruby/object:Gem::Version
|
116
131
|
version: '1.7'
|
117
132
|
- !ruby/object:Gem::Dependency
|
118
133
|
name: nokogiri
|
119
134
|
requirement: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
120
136
|
requirements:
|
121
|
-
- -
|
137
|
+
- - ~>
|
122
138
|
- !ruby/object:Gem::Version
|
123
139
|
version: 1.5.2
|
124
140
|
type: :development
|
125
141
|
prerelease: false
|
126
142
|
version_requirements: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
127
144
|
requirements:
|
128
|
-
- -
|
145
|
+
- - ~>
|
129
146
|
- !ruby/object:Gem::Version
|
130
147
|
version: 1.5.2
|
131
148
|
- !ruby/object:Gem::Dependency
|
132
149
|
name: rake
|
133
150
|
requirement: !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
134
152
|
requirements:
|
135
|
-
- -
|
153
|
+
- - ! '>='
|
136
154
|
- !ruby/object:Gem::Version
|
137
155
|
version: 0.9.2
|
138
|
-
- -
|
156
|
+
- - <
|
139
157
|
- !ruby/object:Gem::Version
|
140
158
|
version: '10.2'
|
141
159
|
type: :development
|
142
160
|
prerelease: false
|
143
161
|
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
144
163
|
requirements:
|
145
|
-
- -
|
164
|
+
- - ! '>='
|
146
165
|
- !ruby/object:Gem::Version
|
147
166
|
version: 0.9.2
|
148
|
-
- -
|
167
|
+
- - <
|
149
168
|
- !ruby/object:Gem::Version
|
150
169
|
version: '10.2'
|
151
170
|
- !ruby/object:Gem::Dependency
|
152
171
|
name: rspec
|
153
172
|
requirement: !ruby/object:Gem::Requirement
|
173
|
+
none: false
|
154
174
|
requirements:
|
155
|
-
- -
|
175
|
+
- - ~>
|
156
176
|
- !ruby/object:Gem::Version
|
157
177
|
version: '2'
|
158
178
|
type: :development
|
159
179
|
prerelease: false
|
160
180
|
version_requirements: !ruby/object:Gem::Requirement
|
181
|
+
none: false
|
161
182
|
requirements:
|
162
|
-
- -
|
183
|
+
- - ~>
|
163
184
|
- !ruby/object:Gem::Version
|
164
185
|
version: '2'
|
165
186
|
- !ruby/object:Gem::Dependency
|
166
187
|
name: simplecov
|
167
188
|
requirement: !ruby/object:Gem::Requirement
|
189
|
+
none: false
|
168
190
|
requirements:
|
169
|
-
- -
|
191
|
+
- - ! '>='
|
170
192
|
- !ruby/object:Gem::Version
|
171
193
|
version: 0.6.2
|
172
194
|
type: :development
|
173
195
|
prerelease: false
|
174
196
|
version_requirements: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
175
198
|
requirements:
|
176
|
-
- -
|
199
|
+
- - ! '>='
|
177
200
|
- !ruby/object:Gem::Version
|
178
201
|
version: 0.6.2
|
179
202
|
- !ruby/object:Gem::Dependency
|
180
203
|
name: spork
|
181
204
|
requirement: !ruby/object:Gem::Requirement
|
205
|
+
none: false
|
182
206
|
requirements:
|
183
|
-
- -
|
207
|
+
- - ! '>='
|
184
208
|
- !ruby/object:Gem::Version
|
185
209
|
version: 1.0.0.rc2
|
186
210
|
type: :development
|
187
211
|
prerelease: false
|
188
212
|
version_requirements: !ruby/object:Gem::Requirement
|
213
|
+
none: false
|
189
214
|
requirements:
|
190
|
-
- -
|
215
|
+
- - ! '>='
|
191
216
|
- !ruby/object:Gem::Version
|
192
217
|
version: 1.0.0.rc2
|
193
218
|
- !ruby/object:Gem::Dependency
|
194
219
|
name: syntax
|
195
220
|
requirement: !ruby/object:Gem::Requirement
|
221
|
+
none: false
|
196
222
|
requirements:
|
197
|
-
- -
|
223
|
+
- - ! '>='
|
198
224
|
- !ruby/object:Gem::Version
|
199
225
|
version: 1.0.0
|
200
226
|
type: :development
|
201
227
|
prerelease: false
|
202
228
|
version_requirements: !ruby/object:Gem::Requirement
|
229
|
+
none: false
|
203
230
|
requirements:
|
204
|
-
- -
|
231
|
+
- - ! '>='
|
205
232
|
- !ruby/object:Gem::Version
|
206
233
|
version: 1.0.0
|
207
234
|
- !ruby/object:Gem::Dependency
|
208
235
|
name: bcat
|
209
236
|
requirement: !ruby/object:Gem::Requirement
|
237
|
+
none: false
|
210
238
|
requirements:
|
211
|
-
- -
|
239
|
+
- - ~>
|
212
240
|
- !ruby/object:Gem::Version
|
213
241
|
version: 0.6.2
|
214
242
|
type: :development
|
215
243
|
prerelease: false
|
216
244
|
version_requirements: !ruby/object:Gem::Requirement
|
245
|
+
none: false
|
217
246
|
requirements:
|
218
|
-
- -
|
247
|
+
- - ~>
|
219
248
|
- !ruby/object:Gem::Version
|
220
249
|
version: 0.6.2
|
221
250
|
- !ruby/object:Gem::Dependency
|
222
251
|
name: kramdown
|
223
252
|
requirement: !ruby/object:Gem::Requirement
|
253
|
+
none: false
|
224
254
|
requirements:
|
225
|
-
- -
|
255
|
+
- - ~>
|
226
256
|
- !ruby/object:Gem::Version
|
227
257
|
version: '0.14'
|
228
258
|
type: :development
|
229
259
|
prerelease: false
|
230
260
|
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
none: false
|
231
262
|
requirements:
|
232
|
-
- -
|
263
|
+
- - ~>
|
233
264
|
- !ruby/object:Gem::Version
|
234
265
|
version: '0.14'
|
235
266
|
- !ruby/object:Gem::Dependency
|
236
267
|
name: yard
|
237
268
|
requirement: !ruby/object:Gem::Requirement
|
269
|
+
none: false
|
238
270
|
requirements:
|
239
|
-
- -
|
271
|
+
- - ~>
|
240
272
|
- !ruby/object:Gem::Version
|
241
273
|
version: 0.8.0
|
242
274
|
type: :development
|
243
275
|
prerelease: false
|
244
276
|
version_requirements: !ruby/object:Gem::Requirement
|
277
|
+
none: false
|
245
278
|
requirements:
|
246
|
-
- -
|
279
|
+
- - ~>
|
247
280
|
- !ruby/object:Gem::Version
|
248
281
|
version: 0.8.0
|
249
282
|
- !ruby/object:Gem::Dependency
|
250
283
|
name: capybara
|
251
284
|
requirement: !ruby/object:Gem::Requirement
|
285
|
+
none: false
|
252
286
|
requirements:
|
253
|
-
- -
|
287
|
+
- - ! '>='
|
254
288
|
- !ruby/object:Gem::Version
|
255
289
|
version: 1.1.2
|
256
|
-
- -
|
290
|
+
- - <
|
257
291
|
- !ruby/object:Gem::Version
|
258
292
|
version: '2.1'
|
259
293
|
type: :development
|
260
294
|
prerelease: false
|
261
295
|
version_requirements: !ruby/object:Gem::Requirement
|
296
|
+
none: false
|
262
297
|
requirements:
|
263
|
-
- -
|
298
|
+
- - ! '>='
|
264
299
|
- !ruby/object:Gem::Version
|
265
300
|
version: 1.1.2
|
266
|
-
- -
|
301
|
+
- - <
|
267
302
|
- !ruby/object:Gem::Version
|
268
303
|
version: '2.1'
|
269
304
|
- !ruby/object:Gem::Dependency
|
270
305
|
name: rack-test
|
271
306
|
requirement: !ruby/object:Gem::Requirement
|
307
|
+
none: false
|
272
308
|
requirements:
|
273
|
-
- -
|
309
|
+
- - ! '>='
|
274
310
|
- !ruby/object:Gem::Version
|
275
311
|
version: 0.6.1
|
276
312
|
type: :development
|
277
313
|
prerelease: false
|
278
314
|
version_requirements: !ruby/object:Gem::Requirement
|
315
|
+
none: false
|
279
316
|
requirements:
|
280
|
-
- -
|
317
|
+
- - ! '>='
|
281
318
|
- !ruby/object:Gem::Version
|
282
319
|
version: 0.6.1
|
283
320
|
- !ruby/object:Gem::Dependency
|
284
321
|
name: ramaze
|
285
322
|
requirement: !ruby/object:Gem::Requirement
|
323
|
+
none: false
|
286
324
|
requirements:
|
287
|
-
- -
|
325
|
+
- - ! '>='
|
288
326
|
- !ruby/object:Gem::Version
|
289
327
|
version: '0'
|
290
328
|
type: :development
|
291
329
|
prerelease: false
|
292
330
|
version_requirements: !ruby/object:Gem::Requirement
|
331
|
+
none: false
|
293
332
|
requirements:
|
294
|
-
- -
|
333
|
+
- - ! '>='
|
295
334
|
- !ruby/object:Gem::Version
|
296
335
|
version: '0'
|
297
336
|
- !ruby/object:Gem::Dependency
|
298
337
|
name: sinatra
|
299
338
|
requirement: !ruby/object:Gem::Requirement
|
339
|
+
none: false
|
300
340
|
requirements:
|
301
|
-
- -
|
341
|
+
- - ! '>='
|
302
342
|
- !ruby/object:Gem::Version
|
303
343
|
version: 1.3.2
|
304
344
|
type: :development
|
305
345
|
prerelease: false
|
306
346
|
version_requirements: !ruby/object:Gem::Requirement
|
347
|
+
none: false
|
307
348
|
requirements:
|
308
|
-
- -
|
349
|
+
- - ! '>='
|
309
350
|
- !ruby/object:Gem::Version
|
310
351
|
version: 1.3.2
|
311
352
|
- !ruby/object:Gem::Dependency
|
312
353
|
name: webrat
|
313
354
|
requirement: !ruby/object:Gem::Requirement
|
355
|
+
none: false
|
314
356
|
requirements:
|
315
|
-
- -
|
357
|
+
- - ! '>='
|
316
358
|
- !ruby/object:Gem::Version
|
317
359
|
version: 0.7.3
|
318
360
|
type: :development
|
319
361
|
prerelease: false
|
320
362
|
version_requirements: !ruby/object:Gem::Requirement
|
363
|
+
none: false
|
321
364
|
requirements:
|
322
|
-
- -
|
365
|
+
- - ! '>='
|
323
366
|
- !ruby/object:Gem::Version
|
324
367
|
version: 0.7.3
|
325
368
|
- !ruby/object:Gem::Dependency
|
326
369
|
name: mime-types
|
327
370
|
requirement: !ruby/object:Gem::Requirement
|
371
|
+
none: false
|
328
372
|
requirements:
|
329
|
-
- -
|
373
|
+
- - <
|
330
374
|
- !ruby/object:Gem::Version
|
331
375
|
version: '2.0'
|
332
376
|
type: :development
|
333
377
|
prerelease: false
|
334
378
|
version_requirements: !ruby/object:Gem::Requirement
|
379
|
+
none: false
|
335
380
|
requirements:
|
336
|
-
- -
|
381
|
+
- - <
|
337
382
|
- !ruby/object:Gem::Version
|
338
383
|
version: '2.0'
|
339
384
|
- !ruby/object:Gem::Dependency
|
340
385
|
name: rubyzip
|
341
386
|
requirement: !ruby/object:Gem::Requirement
|
387
|
+
none: false
|
342
388
|
requirements:
|
343
|
-
- -
|
389
|
+
- - <
|
344
390
|
- !ruby/object:Gem::Version
|
345
391
|
version: '1.0'
|
346
392
|
type: :development
|
347
393
|
prerelease: false
|
348
394
|
version_requirements: !ruby/object:Gem::Requirement
|
395
|
+
none: false
|
349
396
|
requirements:
|
350
|
-
- -
|
397
|
+
- - <
|
351
398
|
- !ruby/object:Gem::Version
|
352
399
|
version: '1.0'
|
353
400
|
description: Behaviour Driven Development with elegance and joy
|
@@ -357,12 +404,12 @@ executables:
|
|
357
404
|
extensions: []
|
358
405
|
extra_rdoc_files: []
|
359
406
|
files:
|
360
|
-
-
|
361
|
-
-
|
362
|
-
-
|
363
|
-
-
|
364
|
-
-
|
365
|
-
-
|
407
|
+
- .gitattributes
|
408
|
+
- .rspec
|
409
|
+
- .ruby-gemset
|
410
|
+
- .ruby-version
|
411
|
+
- .travis.yml
|
412
|
+
- .yardopts
|
366
413
|
- CONTRIBUTING.md
|
367
414
|
- Gemfile
|
368
415
|
- History.md
|
@@ -948,28 +995,29 @@ files:
|
|
948
995
|
- spec/spec_helper.rb
|
949
996
|
homepage: http://cukes.info
|
950
997
|
licenses: []
|
951
|
-
metadata: {}
|
952
998
|
post_install_message:
|
953
999
|
rdoc_options:
|
954
|
-
-
|
1000
|
+
- --charset=UTF-8
|
955
1001
|
require_paths:
|
956
1002
|
- lib
|
957
1003
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1004
|
+
none: false
|
958
1005
|
requirements:
|
959
|
-
- -
|
1006
|
+
- - ! '>='
|
960
1007
|
- !ruby/object:Gem::Version
|
961
1008
|
version: '0'
|
962
1009
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1010
|
+
none: false
|
963
1011
|
requirements:
|
964
|
-
- -
|
1012
|
+
- - ! '>='
|
965
1013
|
- !ruby/object:Gem::Version
|
966
1014
|
version: '0'
|
967
1015
|
requirements: []
|
968
1016
|
rubyforge_project:
|
969
|
-
rubygems_version:
|
1017
|
+
rubygems_version: 1.8.23
|
970
1018
|
signing_key:
|
971
|
-
specification_version:
|
972
|
-
summary: cucumber-1.3.
|
1019
|
+
specification_version: 3
|
1020
|
+
summary: cucumber-1.3.17
|
973
1021
|
test_files:
|
974
1022
|
- features/assertions.feature
|
975
1023
|
- features/autoformat_profile_output.feature
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 0bee73d888dad5e658a4289f55e7f975a00797bb
|
4
|
-
data.tar.gz: c29fa70693d1cb3cb6956357410774eb2222cd40
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: dcedaf020ae485ff03c74282b77f6c66e4c41e22d7fed6cb124ff9fe9be3c4d9e2d9846263f0749d40096e43cd2e8cfde657c18a1724e6e887cd9ff091696720
|
7
|
-
data.tar.gz: 0a934db47fc16a45f40421fd726d4018ccc2c92ebdc4381d618b0b1dde101a739fd980711aa95446a508d3700a705d834b4e8dbbcbdb1718aa57760595463d92
|