gnawrnip 0.0.1 → 0.0.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.
- data/Gemfile +5 -0
- data/gnawrnip.gemspec +2 -1
- data/lib/gnawrnip/animation.rb +37 -0
- data/lib/gnawrnip/ext/capybara/session.rb +20 -0
- data/lib/gnawrnip/rspec.rb +10 -6
- data/lib/gnawrnip/screenshot.rb +29 -0
- data/lib/gnawrnip/step_screenshot.rb +5 -5
- data/lib/gnawrnip/version.rb +1 -1
- data/lib/gnawrnip.rb +3 -0
- data/spec/gnawrnip/animation_spec.rb +40 -0
- data/spec/gnawrnip/rspec_spec.rb +18 -3
- data/spec/gnawrnip/screenshot_spec.rb +13 -0
- data/spec/gnawrnip/step_screenshot_spec.rb +1 -1
- data/spec/spec_helper.rb +16 -10
- metadata +25 -9
- data/example/Gemfile +0 -9
data/Gemfile
CHANGED
data/gnawrnip.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency 'capybara', "~> 2.1"
|
22
|
-
spec.add_dependency 'turnip_formatter'
|
22
|
+
spec.add_dependency 'turnip_formatter', '~> 0.1.2'
|
23
|
+
spec.add_dependency 'rmagick'
|
23
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
25
|
spec.add_development_dependency "rake"
|
25
26
|
spec.add_development_dependency 'rspec'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'gnawrnip/screenshot'
|
2
|
+
require 'RMagick'
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
module Gnawrnip
|
6
|
+
class Animation
|
7
|
+
class << self
|
8
|
+
def reset!
|
9
|
+
frames.clear
|
10
|
+
end
|
11
|
+
|
12
|
+
def frames
|
13
|
+
@frames ||= []
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_frame
|
17
|
+
image = Screenshot.take
|
18
|
+
frames << image
|
19
|
+
end
|
20
|
+
|
21
|
+
def generate
|
22
|
+
gif = Tempfile.new(['gnawrnip_animation', '.gif'])
|
23
|
+
image.write(gif.path)
|
24
|
+
Base64.encode64(gif.read)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def image
|
30
|
+
paths = frames.map(&:path)
|
31
|
+
images = Magick::ImageList.new(*paths)
|
32
|
+
images.delay = 50
|
33
|
+
images
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'capybara/session'
|
2
|
+
|
3
|
+
module Capybara
|
4
|
+
class Session
|
5
|
+
SAVE_SCREENSHOT_METHODS = [
|
6
|
+
:attach_file, :check, :choose, :click_link_or_button, :click_button,
|
7
|
+
:click_link, :fill_in, :select, :uncheck, :unselect, :click_on,
|
8
|
+
:evaluate_script, :visit
|
9
|
+
]
|
10
|
+
|
11
|
+
SAVE_SCREENSHOT_METHODS.each do |method|
|
12
|
+
alias_method "after_hook_#{method}".to_sym, method
|
13
|
+
|
14
|
+
define_method method do |*args, &block|
|
15
|
+
send("after_hook_#{method}", *args, &block)
|
16
|
+
Gnawrnip::Animation.add_frame
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/gnawrnip/rspec.rb
CHANGED
@@ -3,13 +3,17 @@ require 'tempfile'
|
|
3
3
|
require 'base64'
|
4
4
|
|
5
5
|
RSpec.configure do |config|
|
6
|
-
config.
|
6
|
+
config.before(:each, turnip: true) do
|
7
|
+
Gnawrnip::Animation.reset!
|
8
|
+
end
|
9
|
+
|
10
|
+
config.after(:each, turnip: true) do
|
7
11
|
if example.exception
|
8
|
-
|
9
|
-
|
10
|
-
example.metadata[:
|
11
|
-
|
12
|
-
|
12
|
+
example.metadata[:gnawrnip] = {}
|
13
|
+
|
14
|
+
# example.metadata[:gnawrnip][:screenshot] = Gnawrnip::Animation.generate
|
15
|
+
image = Gnawrnip::Screenshot.take
|
16
|
+
example.metadata[:gnawrnip][:screenshot] = Base64.encode64(image.read)
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'capybara'
|
3
|
+
|
4
|
+
module Gnawrnip
|
5
|
+
class Screenshot
|
6
|
+
class << self
|
7
|
+
|
8
|
+
#
|
9
|
+
# Screenshot of current capybara session
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# image = Gnawrnip::Screenshot.take
|
13
|
+
#
|
14
|
+
# @return [Tempfile] Image of screenshot
|
15
|
+
#
|
16
|
+
def take
|
17
|
+
tempfile = Tempfile.new(['gnawrnip', '.gif'])
|
18
|
+
session.save_screenshot(tempfile.path)
|
19
|
+
tempfile
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def session
|
25
|
+
Capybara.current_session
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -3,11 +3,11 @@ require 'turnip_formatter/step/failure'
|
|
3
3
|
module Gnawrnip
|
4
4
|
module StepScreenshot
|
5
5
|
#
|
6
|
-
# @param [String]
|
6
|
+
# @param [String] gif_file base64 encoded
|
7
7
|
#
|
8
|
-
def self.build(
|
9
|
-
img = '<img src="data:image/
|
10
|
-
img +=
|
8
|
+
def self.build(gif_base64)
|
9
|
+
img = '<img src="data:image/gif;base64,'
|
10
|
+
img += gif_base64
|
11
11
|
img += '" style="width: 90%; border: 2px solid black;" />'
|
12
12
|
img
|
13
13
|
end
|
@@ -15,5 +15,5 @@ module Gnawrnip
|
|
15
15
|
end
|
16
16
|
|
17
17
|
TurnipFormatter::Step::Failure.add_template :screenshot, Gnawrnip::StepScreenshot do
|
18
|
-
example.metadata[:
|
18
|
+
example.metadata[:gnawrnip][:screenshot]
|
19
19
|
end
|
data/lib/gnawrnip/version.rb
CHANGED
data/lib/gnawrnip.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gnawrnip/animation'
|
3
|
+
|
4
|
+
module Gnawrnip
|
5
|
+
describe Animation do
|
6
|
+
before do
|
7
|
+
Animation.reset!
|
8
|
+
Animation.add_frame
|
9
|
+
Animation.add_frame
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '.add_frame' do
|
13
|
+
subject { Animation.frames }
|
14
|
+
it { should have(2).elements }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.reset!' do
|
18
|
+
before { Animation.reset! }
|
19
|
+
subject { Animation.frames }
|
20
|
+
it { should be_empty }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.generate' do
|
24
|
+
before do
|
25
|
+
::Magick::ImageList.any_instance.stub(:initialize) do |*filenames|
|
26
|
+
@file_length = filenames.length
|
27
|
+
end
|
28
|
+
::Magick::ImageList.any_instance.stub(:delay=)
|
29
|
+
::Magick::ImageList.any_instance.stub(:write) do |path|
|
30
|
+
File.write(path, @file_length.to_s)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
subject { Animation.generate }
|
35
|
+
it 'should be base64 encoded string for each files.' do
|
36
|
+
should == "Mg==\n"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/gnawrnip/rspec_spec.rb
CHANGED
@@ -4,7 +4,6 @@ require 'gnawrnip/rspec'
|
|
4
4
|
module Gnawrnip
|
5
5
|
describe 'Rspec' do
|
6
6
|
let(:example) do
|
7
|
-
group = ::RSpec::Core::ExampleGroup.describe('Feature')
|
8
7
|
example = group.example('example', {}) { expect(true).to be_false }
|
9
8
|
group.run(
|
10
9
|
Class.new do
|
@@ -16,8 +15,24 @@ module Gnawrnip
|
|
16
15
|
example
|
17
16
|
end
|
18
17
|
|
19
|
-
|
20
|
-
|
18
|
+
context '"turnip" spec group' do
|
19
|
+
let(:group) do
|
20
|
+
::RSpec::Core::ExampleGroup.describe('Feature', turnip: true)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should save screen shot at error' do
|
24
|
+
expect(example.metadata[:gnawrnip][:screenshot]).to eq "c2NyZWVuc2hvdA==\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'Not "turnip" spec group' do
|
29
|
+
let(:group) do
|
30
|
+
::RSpec::Core::ExampleGroup.describe('Feature')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should not save screen shot' do
|
34
|
+
expect(example.metadata).not_to include(:gnawrnip)
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gnawrnip/screenshot'
|
3
|
+
|
4
|
+
module Gnawrnip
|
5
|
+
describe Screenshot do
|
6
|
+
describe '.take' do
|
7
|
+
subject { Screenshot.take.read }
|
8
|
+
|
9
|
+
# see GnawrnipTestSession::save_screenshot
|
10
|
+
it { should == 'screenshot' }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,16 +2,22 @@ require 'coveralls'
|
|
2
2
|
Coveralls.wear!
|
3
3
|
|
4
4
|
require 'gnawrnip'
|
5
|
+
require 'capybara'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def save_screenshot(file_path)
|
11
|
-
File.open(file_path, 'w') do |fp|
|
12
|
-
fp.print 'screenshot'
|
13
|
-
end
|
14
|
-
end
|
7
|
+
class GnawrnipTestSession
|
8
|
+
def save_screenshot(file_path)
|
9
|
+
File.open(file_path, 'w') do |fp|
|
10
|
+
fp.print 'screenshot'
|
15
11
|
end
|
16
|
-
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(name, *args, &block)
|
15
|
+
# nooooooop
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Capybara
|
20
|
+
def self.current_session
|
21
|
+
GnawrnipTestSession.new
|
22
|
+
end
|
17
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gnawrnip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -29,6 +29,22 @@ dependencies:
|
|
29
29
|
version: '2.1'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: turnip_formatter
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.1.2
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.1.2
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rmagick
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
33
49
|
none: false
|
34
50
|
requirements:
|
@@ -122,7 +138,6 @@ files:
|
|
122
138
|
- README.md
|
123
139
|
- Rakefile
|
124
140
|
- example/.rspec
|
125
|
-
- example/Gemfile
|
126
141
|
- example/README.md
|
127
142
|
- example/spec/features/hello.feature
|
128
143
|
- example/spec/spec_helper.rb
|
@@ -130,10 +145,15 @@ files:
|
|
130
145
|
- example/web.rb
|
131
146
|
- gnawrnip.gemspec
|
132
147
|
- lib/gnawrnip.rb
|
148
|
+
- lib/gnawrnip/animation.rb
|
149
|
+
- lib/gnawrnip/ext/capybara/session.rb
|
133
150
|
- lib/gnawrnip/rspec.rb
|
151
|
+
- lib/gnawrnip/screenshot.rb
|
134
152
|
- lib/gnawrnip/step_screenshot.rb
|
135
153
|
- lib/gnawrnip/version.rb
|
154
|
+
- spec/gnawrnip/animation_spec.rb
|
136
155
|
- spec/gnawrnip/rspec_spec.rb
|
156
|
+
- spec/gnawrnip/screenshot_spec.rb
|
137
157
|
- spec/gnawrnip/step_screenshot_spec.rb
|
138
158
|
- spec/spec_helper.rb
|
139
159
|
homepage: https://github.com/gongo/gnawrnip
|
@@ -149,18 +169,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
169
|
- - ! '>='
|
150
170
|
- !ruby/object:Gem::Version
|
151
171
|
version: '0'
|
152
|
-
segments:
|
153
|
-
- 0
|
154
|
-
hash: -4385151438016363353
|
155
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
173
|
none: false
|
157
174
|
requirements:
|
158
175
|
- - ! '>='
|
159
176
|
- !ruby/object:Gem::Version
|
160
177
|
version: '0'
|
161
|
-
segments:
|
162
|
-
- 0
|
163
|
-
hash: -4385151438016363353
|
164
178
|
requirements: []
|
165
179
|
rubyforge_project:
|
166
180
|
rubygems_version: 1.8.23
|
@@ -168,6 +182,8 @@ signing_key:
|
|
168
182
|
specification_version: 3
|
169
183
|
summary: Add-on for TurnipFormatter with Capybara
|
170
184
|
test_files:
|
185
|
+
- spec/gnawrnip/animation_spec.rb
|
171
186
|
- spec/gnawrnip/rspec_spec.rb
|
187
|
+
- spec/gnawrnip/screenshot_spec.rb
|
172
188
|
- spec/gnawrnip/step_screenshot_spec.rb
|
173
189
|
- spec/spec_helper.rb
|