gnawrnip 0.1.2 → 0.1.3
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/README.md +13 -9
- data/example/spec/spec_helper.rb +3 -3
- data/lib/gnawrnip/ext/capybara/session.rb +1 -1
- data/lib/gnawrnip/photographer.rb +14 -11
- data/lib/gnawrnip/{js/photographer.rb → publisher/js.rb} +8 -6
- data/lib/gnawrnip/publisher/rmagick.rb +47 -0
- data/lib/gnawrnip/publisher.rb +21 -0
- data/lib/gnawrnip/rspec.rb +11 -5
- data/lib/gnawrnip/step_screenshot.rb +2 -2
- data/lib/gnawrnip/version.rb +1 -1
- data/lib/gnawrnip.rb +26 -18
- data/spec/gnawrnip/photographer_spec.rb +27 -0
- data/spec/gnawrnip/publisher/rmagick.rb +56 -0
- data/spec/gnawrnip/rspec_spec.rb +1 -1
- metadata +15 -9
- data/lib/gnawrnip/animation.rb +0 -21
- data/lib/gnawrnip/rmagick/photographer.rb +0 -43
- data/spec/gnawrnip/animation_spec.rb +0 -23
- data/spec/gnawrnip/rmagick/photographer_spec.rb +0 -54
data/README.md
CHANGED
@@ -7,6 +7,11 @@ Gnawrnip is a [TurnipFormatter](https://github.com/gongo/turnip_formatter) Add-o
|
|
7
7
|
[](https://codeclimate.com/github/gongo/gnawrnip)
|
8
8
|
[](https://gemnasium.com/gongo/gnawrnip)
|
9
9
|
|
10
|
+
## IMPORTANT!
|
11
|
+
|
12
|
+
This project is currently in development (frequent releases).
|
13
|
+
So it have potential for massive refactorings (that could be API breaking).
|
14
|
+
|
10
15
|
|
11
16
|
## Requirements
|
12
17
|
|
@@ -45,26 +50,25 @@ You can do to customize a screenshot.
|
|
45
50
|
|
46
51
|
```ruby
|
47
52
|
Gnawrnip.configure do |c|
|
48
|
-
c.
|
49
|
-
c.
|
50
|
-
c.
|
53
|
+
c.publisher_driver = :js
|
54
|
+
c.make_animation = true
|
55
|
+
c.frame_interval = 1000 # milliseconds
|
56
|
+
c.frame_size = [640, 360] # width, height
|
51
57
|
end
|
52
|
-
|
53
|
-
Gnawrnip.ready!
|
54
58
|
```
|
55
59
|
|
56
|
-
`
|
57
|
-
|
58
|
-
* `photographer_driver` (Symbol) A driver that make screenshot like animation GIF.
|
60
|
+
* `publisher_driver` (Symbol) A driver that make screenshot like animation GIF.
|
59
61
|
* `:js`: use jQuery and image files. **The size of the report file tends to be large this driver**
|
60
62
|
* `:rmagick`: Make pure animation GIF using [RMagick](http://rmagick.rubyforge.org/). This driver is requires Gem `rmagick`. Add this line to your application's Gemfile:
|
61
63
|
|
62
64
|
```
|
63
65
|
gem 'rmagick'
|
64
66
|
```
|
67
|
+
* `make_animation` (Boolean) Whether to make animation GIF. (Default: true)
|
65
68
|
* `frame_interval` (Integer) A time (millisecond) between each image in an animation. Default is `1000` (1sec)
|
69
|
+
* This option is enabled only when the `make_animation = true`.
|
66
70
|
* `frame_size` (Array) A size of screenshot (width, height). Default is `nil` (`nil` means that use `Capybara.current_driver.browser` size) .
|
67
|
-
* This option is enabled only when the `
|
71
|
+
* This option is enabled only when the `publisher_driver = :rmagick`.
|
68
72
|
|
69
73
|
As example, see [example/spec/spec_helper.rb](https://github.com/gongo/gnawrnip/tree/master/example/spec/spec_helper.rb) .
|
70
74
|
|
data/example/spec/spec_helper.rb
CHANGED
@@ -21,10 +21,10 @@ Capybara.default_driver = :poltergeist
|
|
21
21
|
Capybara.javascript_driver = :selenium
|
22
22
|
|
23
23
|
Gnawrnip.configure do |c|
|
24
|
-
c.
|
25
|
-
|
24
|
+
# c.publisher_driver = :js
|
25
|
+
c.publisher_driver = :rmagick
|
26
26
|
c.frame_interval = 1000 # milliseconds
|
27
27
|
c.frame_size = [640, 360] # width, height
|
28
|
+
c.make_animation = false
|
28
29
|
end
|
29
30
|
|
30
|
-
Gnawrnip.ready!
|
@@ -1,22 +1,25 @@
|
|
1
|
-
require '
|
2
|
-
require 'base64'
|
1
|
+
require 'gnawrnip/screenshot'
|
3
2
|
|
4
3
|
module Gnawrnip
|
5
|
-
|
6
|
-
def
|
7
|
-
|
4
|
+
class Photographer
|
5
|
+
def take_shot
|
6
|
+
frames << Screenshot.take
|
8
7
|
end
|
9
8
|
|
10
|
-
def
|
11
|
-
|
9
|
+
def reset!
|
10
|
+
frames.clear
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
#
|
14
|
+
# Close tempfiles.
|
15
|
+
#
|
16
|
+
def discard!
|
17
|
+
frames.each(&:close!)
|
18
|
+
reset!
|
16
19
|
end
|
17
20
|
|
18
|
-
def
|
19
|
-
|
21
|
+
def frames
|
22
|
+
@frames ||= []
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
-
require 'gnawrnip/
|
1
|
+
require 'gnawrnip/publisher'
|
2
2
|
require 'turnip_formatter/template'
|
3
3
|
|
4
|
-
module Gnawrnip
|
5
|
-
|
6
|
-
|
4
|
+
module Gnawrnip
|
5
|
+
module Publisher
|
6
|
+
class JS
|
7
|
+
include Gnawrnip::Publisher
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
def animation(images)
|
10
|
+
images.map { |img| single(img) }.join
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'gnawrnip/publisher'
|
2
|
+
|
3
|
+
module Gnawrnip
|
4
|
+
module Publisher
|
5
|
+
class RMagick
|
6
|
+
include Gnawrnip::Publisher
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
Kernel.require 'RMagick'
|
10
|
+
rescue LoadError => e
|
11
|
+
if e.message =~ /cannot load.*RMagick/
|
12
|
+
raise LoadError, "Please install the gem and add `gem 'rmagick'` to your Gemfile if you are using bundler."
|
13
|
+
else
|
14
|
+
raise e
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def animation(images)
|
19
|
+
creator = photo_creator(images)
|
20
|
+
tempfile = Tempfile.new(['gnawrnip', '.gif'])
|
21
|
+
creator.write(tempfile.path)
|
22
|
+
|
23
|
+
image_tag(image_base64(tempfile.path), :gif)
|
24
|
+
end
|
25
|
+
|
26
|
+
def single(image)
|
27
|
+
animation([image])
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def photo_creator(images)
|
33
|
+
paths = images.map(&:path)
|
34
|
+
photos = ::Magick::ImageList.new(*paths)
|
35
|
+
|
36
|
+
photos.delay = Gnawrnip.frame_interval / 10.0
|
37
|
+
unless Gnawrnip.frame_size.nil?
|
38
|
+
photos.each do |p|
|
39
|
+
p.scale!(*Gnawrnip.frame_size)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
photos
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
module Gnawrnip
|
4
|
+
module Publisher
|
5
|
+
def animation(paths)
|
6
|
+
raise NotImplementedError
|
7
|
+
end
|
8
|
+
|
9
|
+
def single(path)
|
10
|
+
image_tag(image_base64(path))
|
11
|
+
end
|
12
|
+
|
13
|
+
def image_base64(path)
|
14
|
+
Base64.strict_encode64(File.read(path))
|
15
|
+
end
|
16
|
+
|
17
|
+
def image_tag(data, format = :png)
|
18
|
+
'<img src="data:image/' + format.to_s + ';base64,' + data + '"/>'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/gnawrnip/rspec.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
require 'tempfile'
|
3
|
-
require 'base64'
|
4
2
|
|
5
3
|
RSpec.configure do |config|
|
4
|
+
config.before(:all) do
|
5
|
+
Gnawrnip.ready!
|
6
|
+
end
|
7
|
+
|
6
8
|
config.before(:each, turnip: true) do
|
7
|
-
Gnawrnip
|
9
|
+
Gnawrnip.photographer.reset!
|
10
|
+
example.metadata[:gnawrnip] = {}
|
8
11
|
end
|
9
12
|
|
10
13
|
config.after(:each, turnip: true) do
|
11
14
|
if example.exception
|
12
|
-
|
13
|
-
|
15
|
+
Gnawrnip.photographer.take_shot
|
16
|
+
screenshots = Gnawrnip.photographer.frames.compact
|
17
|
+
example.metadata[:gnawrnip][:screenshot] = screenshots
|
18
|
+
else
|
19
|
+
Gnawrnip.photographer.discard!
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -21,13 +21,13 @@ module Gnawrnip
|
|
21
21
|
|
22
22
|
def animation_image(paths)
|
23
23
|
text = '<div class="screenshot animation">'
|
24
|
-
text += Gnawrnip.
|
24
|
+
text += Gnawrnip.publisher.animation(paths)
|
25
25
|
text + '</div>'
|
26
26
|
end
|
27
27
|
|
28
28
|
def single_image(path)
|
29
29
|
text = '<div class="screenshot">'
|
30
|
-
text += Gnawrnip.
|
30
|
+
text += Gnawrnip.publisher.single(path)
|
31
31
|
text + '</div>'
|
32
32
|
end
|
33
33
|
end
|
data/lib/gnawrnip/version.rb
CHANGED
data/lib/gnawrnip.rb
CHANGED
@@ -1,40 +1,48 @@
|
|
1
1
|
require "gnawrnip/version"
|
2
|
-
require 'gnawrnip/rmagick/photographer'
|
3
|
-
require 'gnawrnip/ext/capybara/session'
|
4
|
-
require 'gnawrnip/animation'
|
5
|
-
require 'gnawrnip/screenshot'
|
6
|
-
require 'gnawrnip/step_screenshot'
|
7
2
|
require 'gnawrnip/rspec'
|
3
|
+
require 'gnawrnip/photographer'
|
4
|
+
require 'gnawrnip/step_screenshot'
|
8
5
|
|
9
6
|
module Gnawrnip
|
10
7
|
class << self
|
11
|
-
attr_accessor :
|
8
|
+
attr_accessor :publisher_driver
|
12
9
|
attr_accessor :frame_interval
|
13
10
|
attr_accessor :frame_size
|
11
|
+
attr_accessor :make_animation
|
14
12
|
|
15
13
|
def configure
|
16
14
|
yield self
|
17
15
|
end
|
18
16
|
|
19
17
|
def ready!
|
20
|
-
|
18
|
+
require 'gnawrnip/ext/capybara/session' if animation?
|
19
|
+
publisher
|
20
|
+
end
|
21
|
+
|
22
|
+
def animation?
|
23
|
+
make_animation
|
21
24
|
end
|
22
25
|
|
23
26
|
def photographer
|
24
|
-
@photographer ||=
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
@photographer ||= Gnawrnip::Photographer.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def publisher
|
31
|
+
@publisher ||= case publisher_driver
|
32
|
+
when :rmagick
|
33
|
+
require 'gnawrnip/publisher/rmagick'
|
34
|
+
@publisher = Publisher::RMagick.new
|
35
|
+
else # :js
|
36
|
+
require 'gnawrnip/publisher/js'
|
37
|
+
@publisher = Publisher::JS.new
|
38
|
+
end
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
35
42
|
|
36
43
|
Gnawrnip.configure do |c|
|
37
|
-
c.
|
38
|
-
c.frame_interval
|
39
|
-
c.frame_size
|
44
|
+
c.publisher_driver = :js
|
45
|
+
c.frame_interval = 1000
|
46
|
+
c.frame_size = nil
|
47
|
+
c.make_animation = true
|
40
48
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gnawrnip/photographer'
|
3
|
+
|
4
|
+
module Gnawrnip
|
5
|
+
describe Photographer do
|
6
|
+
let(:photographer) do
|
7
|
+
Photographer.new
|
8
|
+
end
|
9
|
+
|
10
|
+
before do
|
11
|
+
photographer.reset!
|
12
|
+
photographer.take_shot
|
13
|
+
photographer.take_shot
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.add_frame' do
|
17
|
+
subject { photographer.frames }
|
18
|
+
it { should have(2).elements }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '.reset!' do
|
22
|
+
before { photographer.reset! }
|
23
|
+
subject { photographer.frames }
|
24
|
+
it { should be_empty }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gnawrnip/publisher/rmagick'
|
3
|
+
require 'RMagick'
|
4
|
+
|
5
|
+
module Gnawrnip
|
6
|
+
module Publisher
|
7
|
+
describe RMagick do
|
8
|
+
let(:photographer) { RMagick.new }
|
9
|
+
|
10
|
+
describe '.new' do
|
11
|
+
subject { lambda { photographer } }
|
12
|
+
|
13
|
+
context 'cannot load rmagick' do
|
14
|
+
before do
|
15
|
+
error = LoadError.new("LoadError: cannot load such file -- RMagick")
|
16
|
+
Kernel.stub(:require).and_raise(error)
|
17
|
+
end
|
18
|
+
|
19
|
+
it { should raise_error LoadError, /gem 'rmagick'/ }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'cannot load other library' do
|
23
|
+
before do
|
24
|
+
error = LoadError.new("LoadError: cannot load such file -- samurai")
|
25
|
+
Kernel.stub(:require).and_raise(error)
|
26
|
+
end
|
27
|
+
|
28
|
+
it { should raise_error LoadError, /such file -- samurai/ }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#animation' do
|
33
|
+
let(:screenshot_list) {
|
34
|
+
[GnawrnipTest.image('hoge'), GnawrnipTest.image('fuga')]
|
35
|
+
}
|
36
|
+
|
37
|
+
let(:creator) {
|
38
|
+
d = double
|
39
|
+
d.stub(:write) { |path| File.write(path, d.data) }
|
40
|
+
d
|
41
|
+
}
|
42
|
+
|
43
|
+
context 'exists image files' do
|
44
|
+
before do
|
45
|
+
photographer.stub(:photo_creator) do |args|
|
46
|
+
creator.stub(:data).and_return(args.map(&:read).join)
|
47
|
+
end.and_return(creator)
|
48
|
+
end
|
49
|
+
|
50
|
+
subject { photographer.animation(screenshot_list) }
|
51
|
+
it { should eq '<img src="data:image/gif;base64,aG9nZWZ1Z2E="/>' }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/gnawrnip/rspec_spec.rb
CHANGED
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.1.
|
4
|
+
version: 0.1.3
|
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-07-
|
12
|
+
date: 2013-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -145,18 +145,18 @@ files:
|
|
145
145
|
- example/web.rb
|
146
146
|
- gnawrnip.gemspec
|
147
147
|
- lib/gnawrnip.rb
|
148
|
-
- lib/gnawrnip/animation.rb
|
149
148
|
- lib/gnawrnip/ext/capybara/session.rb
|
150
|
-
- lib/gnawrnip/js/photographer.rb
|
151
149
|
- lib/gnawrnip/no_screenshot.png
|
152
150
|
- lib/gnawrnip/photographer.rb
|
153
|
-
- lib/gnawrnip/
|
151
|
+
- lib/gnawrnip/publisher.rb
|
152
|
+
- lib/gnawrnip/publisher/js.rb
|
153
|
+
- lib/gnawrnip/publisher/rmagick.rb
|
154
154
|
- lib/gnawrnip/rspec.rb
|
155
155
|
- lib/gnawrnip/screenshot.rb
|
156
156
|
- lib/gnawrnip/step_screenshot.rb
|
157
157
|
- lib/gnawrnip/version.rb
|
158
|
-
- spec/gnawrnip/
|
159
|
-
- spec/gnawrnip/rmagick
|
158
|
+
- spec/gnawrnip/photographer_spec.rb
|
159
|
+
- spec/gnawrnip/publisher/rmagick.rb
|
160
160
|
- spec/gnawrnip/rspec_spec.rb
|
161
161
|
- spec/gnawrnip/screenshot_spec.rb
|
162
162
|
- spec/gnawrnip/step_screenshot_spec.rb
|
@@ -174,12 +174,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
174
|
- - ! '>='
|
175
175
|
- !ruby/object:Gem::Version
|
176
176
|
version: '0'
|
177
|
+
segments:
|
178
|
+
- 0
|
179
|
+
hash: 2586147401268872003
|
177
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
181
|
none: false
|
179
182
|
requirements:
|
180
183
|
- - ! '>='
|
181
184
|
- !ruby/object:Gem::Version
|
182
185
|
version: '0'
|
186
|
+
segments:
|
187
|
+
- 0
|
188
|
+
hash: 2586147401268872003
|
183
189
|
requirements: []
|
184
190
|
rubyforge_project:
|
185
191
|
rubygems_version: 1.8.23
|
@@ -187,8 +193,8 @@ signing_key:
|
|
187
193
|
specification_version: 3
|
188
194
|
summary: Add-on for TurnipFormatter with Capybara
|
189
195
|
test_files:
|
190
|
-
- spec/gnawrnip/
|
191
|
-
- spec/gnawrnip/rmagick
|
196
|
+
- spec/gnawrnip/photographer_spec.rb
|
197
|
+
- spec/gnawrnip/publisher/rmagick.rb
|
192
198
|
- spec/gnawrnip/rspec_spec.rb
|
193
199
|
- spec/gnawrnip/screenshot_spec.rb
|
194
200
|
- spec/gnawrnip/step_screenshot_spec.rb
|
data/lib/gnawrnip/animation.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'gnawrnip/screenshot'
|
2
|
-
require 'base64'
|
3
|
-
|
4
|
-
module Gnawrnip
|
5
|
-
class Animation
|
6
|
-
class << self
|
7
|
-
def reset!
|
8
|
-
frames.clear
|
9
|
-
end
|
10
|
-
|
11
|
-
def frames
|
12
|
-
@frames ||= []
|
13
|
-
end
|
14
|
-
|
15
|
-
def add_frame
|
16
|
-
image = Screenshot.take
|
17
|
-
frames << image
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'gnawrnip/photographer'
|
2
|
-
|
3
|
-
module Gnawrnip::RMagick
|
4
|
-
class Photographer
|
5
|
-
include Gnawrnip::Photographer
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
Kernel.require 'RMagick'
|
9
|
-
rescue LoadError => e
|
10
|
-
if e.message =~ /cannot load.*RMagick/
|
11
|
-
raise LoadError, "Please install the gem and add `gem 'rmagick'` to your Gemfile if you are using bundler."
|
12
|
-
else
|
13
|
-
raise e
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def animation(images)
|
18
|
-
creator = photo_creator(images)
|
19
|
-
tempfile = Tempfile.new(['gnawrnip', '.gif'])
|
20
|
-
creator.write(tempfile.path)
|
21
|
-
|
22
|
-
image_tag(image_base64(tempfile.path), :gif)
|
23
|
-
end
|
24
|
-
|
25
|
-
def single(image)
|
26
|
-
animation([image])
|
27
|
-
end
|
28
|
-
|
29
|
-
def photo_creator(images)
|
30
|
-
paths = images.map(&:path)
|
31
|
-
photos = ::Magick::ImageList.new(*paths)
|
32
|
-
|
33
|
-
photos.delay = Gnawrnip.frame_interval / 10.0
|
34
|
-
unless Gnawrnip.frame_size.nil?
|
35
|
-
photos.each do |p|
|
36
|
-
p.scale!(*Gnawrnip.frame_size)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
photos
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,23 +0,0 @@
|
|
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
|
-
end
|
23
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'gnawrnip/rmagick/photographer'
|
3
|
-
require 'RMagick'
|
4
|
-
|
5
|
-
module Gnawrnip::RMagick
|
6
|
-
describe Photographer do
|
7
|
-
let(:photographer) { Photographer.new }
|
8
|
-
|
9
|
-
describe '.new' do
|
10
|
-
subject { lambda { photographer } }
|
11
|
-
|
12
|
-
context 'cannot load rmagick' do
|
13
|
-
before do
|
14
|
-
error = LoadError.new("LoadError: cannot load such file -- RMagick")
|
15
|
-
Kernel.stub(:require).and_raise(error)
|
16
|
-
end
|
17
|
-
|
18
|
-
it { should raise_error LoadError, /gem 'rmagick'/ }
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'cannot load other library' do
|
22
|
-
before do
|
23
|
-
error = LoadError.new("LoadError: cannot load such file -- samurai")
|
24
|
-
Kernel.stub(:require).and_raise(error)
|
25
|
-
end
|
26
|
-
|
27
|
-
it { should raise_error LoadError, /such file -- samurai/ }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#animation' do
|
32
|
-
let(:screenshot_list) {
|
33
|
-
[GnawrnipTest.image('hoge'), GnawrnipTest.image('fuga')]
|
34
|
-
}
|
35
|
-
|
36
|
-
let(:creator) {
|
37
|
-
d = double
|
38
|
-
d.stub(:write) { |path| File.write(path, d.data) }
|
39
|
-
d
|
40
|
-
}
|
41
|
-
|
42
|
-
context 'exists image files' do
|
43
|
-
before do
|
44
|
-
photographer.stub(:photo_creator) do |args|
|
45
|
-
creator.stub(:data).and_return(args.map(&:read).join)
|
46
|
-
end.and_return(creator)
|
47
|
-
end
|
48
|
-
|
49
|
-
subject { photographer.animation(screenshot_list) }
|
50
|
-
it { should eq '<img src="data:image/gif;base64,aG9nZWZ1Z2E="/>' }
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|