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 CHANGED
@@ -2,3 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in gnawrnip.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem 'poltergeist'
8
+ gem 'sinatra'
9
+ end
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
@@ -3,13 +3,17 @@ require 'tempfile'
3
3
  require 'base64'
4
4
 
5
5
  RSpec.configure do |config|
6
- config.after do
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
- temp = Tempfile.new(['gnawrnip', '.png'])
9
- save_screenshot(temp.path)
10
- example.metadata[:turnip] ||= {}
11
- example.metadata[:turnip][:screenshot] = Base64.encode64(File.read(temp.path))
12
- temp.close!
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] png_file base64 encoded
6
+ # @param [String] gif_file base64 encoded
7
7
  #
8
- def self.build(png_file)
9
- img = '<img src="data:image/png;base64,'
10
- img += png_file
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[:turnip][:screenshot]
18
+ example.metadata[:gnawrnip][:screenshot]
19
19
  end
@@ -1,3 +1,3 @@
1
1
  module Gnawrnip
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/gnawrnip.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require "gnawrnip/version"
2
2
 
3
3
  module Gnawrnip
4
+ require 'gnawrnip/ext/capybara/session'
5
+ require 'gnawrnip/animation'
6
+ require 'gnawrnip/screenshot'
4
7
  require 'gnawrnip/step_screenshot'
5
8
  require 'gnawrnip/rspec'
6
9
  end
@@ -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
@@ -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
- it 'should save screen shot at error' do
20
- expect(example.metadata[:turnip][:screenshot]).to eq "c2NyZWVuc2hvdA==\n"
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
@@ -13,7 +13,7 @@ module Gnawrnip
13
13
 
14
14
  describe '.build' do
15
15
  subject { template.build('aiueo') }
16
- it { should match %r{<img src="data:image/png;base64,aiueo"} }
16
+ it { should match %r{<img src="data:image/gif;base64,aiueo"} }
17
17
  end
18
18
  end
19
19
  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
- RSpec.configure do |config|
7
- config.include(
8
- Module.new do
9
- # stub Capybara::Session.save_screenshot
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.1
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-05-01 00:00:00.000000000 Z
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
data/example/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'sinatra'
4
- gem 'capybara', '~> 2.1.0'
5
- gem 'rspec'
6
- gem 'turnip'
7
- gem 'turnip_formatter'
8
- gem 'gnawrnip'
9
- gem 'poltergeist'