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