cucumber 1.3.16 → 1.3.17
Sign up to get free protection for your applications and to get access to all the features.
- 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
|