gurke 1.0.1 → 2.0.0.dev.1.b17
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 +13 -5
- data/README.md +85 -38
- data/bin/gurke +5 -0
- data/features/gurke.feature +47 -0
- data/features/gurke.rb +12 -0
- data/features/gurke/backtrace_filtering.feature +36 -0
- data/features/gurke/filter_by_tags.feature +70 -0
- data/features/gurke/step_specific_definitions.feature +41 -0
- data/features/support/steps/cli_steps.rb +50 -0
- data/features/support/steps/file_steps.rb +32 -0
- data/gurke.gemspec +11 -7
- data/lib/gurke.rb +43 -16
- data/lib/gurke/background.rb +33 -0
- data/lib/gurke/builder.rb +107 -0
- data/lib/gurke/capybara.rb +28 -0
- data/lib/gurke/cli.rb +67 -0
- data/lib/gurke/configuration.rb +118 -0
- data/lib/gurke/dsl.rb +45 -0
- data/lib/gurke/feature.rb +55 -0
- data/lib/gurke/reporter.rb +98 -0
- data/lib/gurke/rspec.rb +5 -0
- data/lib/gurke/runner.rb +156 -0
- data/lib/gurke/scenario.rb +84 -0
- data/lib/gurke/step.rb +41 -0
- data/lib/gurke/step_definition.rb +31 -0
- data/lib/gurke/steps.rb +36 -0
- data/lib/gurke/tag.rb +41 -0
- data/lib/gurke/version.rb +14 -0
- metadata +59 -36
- data/.gitignore +0 -19
- data/Gemfile +0 -4
- data/Rakefile +0 -1
- data/lib/gurke/current.rb +0 -39
- data/lib/gurke/formatter.rb +0 -180
- data/lib/gurke/formatters/base.rb +0 -21
- data/lib/gurke/formatters/headless.rb +0 -108
- data/lib/gurke/hooks.rb +0 -42
- data/lib/gurke/patch/cucumber_cli_configuration.rb +0 -16
@@ -1,21 +0,0 @@
|
|
1
|
-
module Gurke
|
2
|
-
module Formatters
|
3
|
-
class Base
|
4
|
-
attr_reader :main, :options
|
5
|
-
|
6
|
-
def initialize(main, options)
|
7
|
-
@main, @options = main, options
|
8
|
-
end
|
9
|
-
|
10
|
-
def current
|
11
|
-
Gurke.current
|
12
|
-
end
|
13
|
-
|
14
|
-
class << self
|
15
|
-
def gurkig?
|
16
|
-
true
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
require 'headless'
|
3
|
-
|
4
|
-
module Gurke
|
5
|
-
module Formatters
|
6
|
-
class Headless < Base
|
7
|
-
attr_reader :tmpdir
|
8
|
-
|
9
|
-
def initialize(*args)
|
10
|
-
super
|
11
|
-
|
12
|
-
@tmpdir = options.delete(:tmpdir) { |el| Dir.mktmpdir }
|
13
|
-
@headless = ::Headless.new video: video_options
|
14
|
-
@index = 0
|
15
|
-
end
|
16
|
-
|
17
|
-
def video_options
|
18
|
-
{
|
19
|
-
codec: 'libvpx',
|
20
|
-
log_file_path: File.join(tmpdir, 'ffmpeg.log'),
|
21
|
-
tmp_file_path: File.join(tmpdir, 'ffmpeg.tmp.webm')
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
def dir
|
26
|
-
options[:dir] || 'report/recoding'
|
27
|
-
end
|
28
|
-
|
29
|
-
def recording?
|
30
|
-
!!options[:recording]
|
31
|
-
end
|
32
|
-
|
33
|
-
def record_all?
|
34
|
-
!!options[:record_all]
|
35
|
-
end
|
36
|
-
|
37
|
-
# -- Start / Stop --
|
38
|
-
|
39
|
-
def before_features(features)
|
40
|
-
@headless.start
|
41
|
-
at_exit { destroy }
|
42
|
-
end
|
43
|
-
|
44
|
-
def after_features(features)
|
45
|
-
destroy
|
46
|
-
|
47
|
-
# TODO: Dir / Template / Whatever - just test atm
|
48
|
-
end
|
49
|
-
|
50
|
-
def before_feature(feature)
|
51
|
-
dir = File.join(self.dir.to_s, feature.short_name.to_s)
|
52
|
-
|
53
|
-
FileUtils.rm_rf dir if File.exists? dir
|
54
|
-
FileUtils.mkdir_p dir
|
55
|
-
end
|
56
|
-
|
57
|
-
# -- Intercept scenarios --
|
58
|
-
|
59
|
-
def before_feature_element(scenario)
|
60
|
-
if recording?
|
61
|
-
@headless.video.start_capture
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def after_feature_element(scenario)
|
66
|
-
if recording?
|
67
|
-
if scenario.failed? || record_all?
|
68
|
-
# TODO: Dir / Template / Whatever - just test atm
|
69
|
-
|
70
|
-
file = File.join(dir, (current.feature.short_name || 'nil'), (scenario.name || 'nil'), 'video.webm')
|
71
|
-
FileUtils.mkdir_p File.dirname file
|
72
|
-
|
73
|
-
@headless.video.stop_and_save file
|
74
|
-
else
|
75
|
-
@headless.video.stop_and_discard
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
@index = 0
|
80
|
-
end
|
81
|
-
|
82
|
-
# -- Intercept steps --
|
83
|
-
|
84
|
-
def manual_step(step, opts)
|
85
|
-
take_sceenshot step
|
86
|
-
end
|
87
|
-
|
88
|
-
def after_step(step)
|
89
|
-
take_sceenshot step
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
def destroy
|
94
|
-
@headless.destroy if @headless
|
95
|
-
end
|
96
|
-
|
97
|
-
def take_sceenshot(step)
|
98
|
-
return if step.background?
|
99
|
-
|
100
|
-
# TODO: Dir / Template / Whatever - just test atm
|
101
|
-
file = File.join(dir, current.feature.short_name, current.scenario.name, "#{@index += 1} - #{step.keyword}#{step.name}.png")
|
102
|
-
|
103
|
-
FileUtils.mkdir_p File.dirname file
|
104
|
-
@headless.take_screenshot "'#{file.gsub("'", "\\'")}'"
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
data/lib/gurke/hooks.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
module Gurke
|
2
|
-
class Hooks
|
3
|
-
attr_reader :hooks
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@hooks = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def add(target, &block)
|
10
|
-
target.to_s.tap do |target|
|
11
|
-
hooks[target] ||= []
|
12
|
-
hooks[target] << block
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def invoke(target, *args)
|
17
|
-
return unless hooks[target]
|
18
|
-
|
19
|
-
hooks[target].each do |hook|
|
20
|
-
hook.call *args
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class << self
|
25
|
-
def before; @before ||= new end
|
26
|
-
def after; @after ||= new end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Formatter < Formatters::Base
|
30
|
-
%w(features feature scenario step).each do |name|
|
31
|
-
define_method "before_#{name}" do |*args|
|
32
|
-
Hooks.before.invoke name, *args
|
33
|
-
end
|
34
|
-
define_method "after_#{name}" do |*args|
|
35
|
-
Hooks.after.invoke name, *args
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
::Gurke::Formatter.use Formatter
|
41
|
-
end
|
42
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# Patch configuration to always use
|
2
|
-
module Cucumber
|
3
|
-
module Cli
|
4
|
-
class Configuration
|
5
|
-
alias_method :orig_formatter_class, :formatter_class
|
6
|
-
def formatter_class(format)
|
7
|
-
unless @__gurke_original_formatter_registered
|
8
|
-
::Gurke::Formatter.use orig_formatter_class(format)
|
9
|
-
@__gurke_original_formatter_registered = true
|
10
|
-
end
|
11
|
-
|
12
|
-
::Gurke::Formatter
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|