green_onion 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -4,21 +4,21 @@ require 'rack'
4
4
 
5
5
  desc "Running server..."
6
6
  task :server do
7
- require File.dirname(__FILE__) + '/spec/sample_app/sample_app.rb'
8
- Rack::Handler::WEBrick.run SampleApp, :Port => 8070
7
+ require File.dirname(__FILE__) + '/spec/sample_app/sample_app.rb'
8
+ Rack::Handler::WEBrick.run SampleApp, :Port => 8070
9
9
  end
10
10
 
11
11
  desc "Running specs..."
12
12
  task :specs do
13
- system "rspec spec"
13
+ system "rspec spec"
14
14
  end
15
15
 
16
16
  desc "Running specs on test server"
17
17
  task :spec do
18
- # have the server run on its own thread so that it doesn't block the spec task
19
- server = Thread.new do
20
- task("server").execute
21
- end
22
- task("specs").execute
23
- server.kill
18
+ # have the server run on its own thread so that it doesn't block the spec task
19
+ server = Thread.new do
20
+ task("server").execute
21
+ end
22
+ task("specs").execute
23
+ server.kill
24
24
  end
data/green_onion.gemspec CHANGED
@@ -10,15 +10,15 @@ Gem::Specification.new do |gem|
10
10
 
11
11
  gem.add_development_dependency "rake"
12
12
  gem.add_development_dependency "rspec"
13
- gem.add_development_dependency "fileutils"
14
13
  gem.add_development_dependency "pry"
15
14
  gem.add_development_dependency "debugger"
16
15
  gem.add_development_dependency "sinatra"
17
16
 
18
- gem.add_dependency "capybara"
19
- gem.add_dependency "capybara-webkit"
20
- gem.add_dependency "oily_png"
21
- gem.add_dependency "rainbow"
17
+ gem.add_dependency "capybara", "1.1.2"
18
+ gem.add_dependency "capybara-webkit", "0.12.1"
19
+ gem.add_dependency "oily_png", "1.0.2"
20
+ gem.add_dependency "rainbow", "1.1.4"
21
+ gem.add_dependency "fileutils", "0.7"
22
22
 
23
23
  gem.files = `git ls-files`.split($\)
24
24
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
data/lib/green_onion.rb CHANGED
@@ -5,77 +5,77 @@ require "green_onion/configuration"
5
5
  require "rainbow"
6
6
 
7
7
  module GreenOnion
8
- class << self
8
+ class << self
9
9
 
10
- attr_reader :compare, :screenshot
10
+ attr_reader :compare, :screenshot
11
11
 
12
- # Pass configure block to set Configuration object
13
- def configure
14
- yield configuration
15
- end
12
+ # Pass configure block to set Configuration object
13
+ def configure
14
+ yield configuration
15
+ end
16
16
 
17
- def configuration
18
- @configuration ||= GreenOnion::Configuration.new
19
- end
17
+ def configuration
18
+ @configuration ||= GreenOnion::Configuration.new
19
+ end
20
20
 
21
- # Bring the Screenshot and Compare classes together to create a skin
22
- def skin(url)
23
- @screenshot = Screenshot.new(
24
- :dir => @configuration.skins_dir,
25
- :dimensions => @configuration.dimensions
26
- )
27
- @compare = GreenOnion::Compare.new
21
+ # Bring the Screenshot and Compare classes together to create a skin
22
+ def skin(url)
23
+ @screenshot = Screenshot.new(
24
+ :dir => @configuration.skins_dir,
25
+ :dimensions => @configuration.dimensions
26
+ )
27
+ @compare = GreenOnion::Compare.new
28
28
 
29
- @screenshot.test_screenshot(url)
30
- end
29
+ @screenshot.test_screenshot(url)
30
+ end
31
31
 
32
- # Finds the percentage of change between skins
33
- # Threshold can be set in configuration, or as an argument itself, and can be specific to an instance
34
- def skin_percentage(url, threshold=@configuration.threshold)
35
- skin(url)
36
- if(@screenshot.paths_hash.length > 1)
37
- puts "\n" + url.color(:cyan)
38
- @compare.percentage_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
39
- threshold_alert(@compare.percentage_changed, threshold)
40
- else
41
- puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
42
- end
43
- end
32
+ # Finds the percentage of change between skins
33
+ # Threshold can be set in configuration, or as an argument itself, and can be specific to an instance
34
+ def skin_percentage(url, threshold=@configuration.threshold)
35
+ skin(url)
36
+ if(@screenshot.paths_hash.length > 1)
37
+ puts "\n" + url.color(:cyan)
38
+ @compare.percentage_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
39
+ threshold_alert(@compare.percentage_changed, threshold)
40
+ else
41
+ puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
42
+ end
43
+ end
44
44
 
45
- # Creates a diffed screenshot between skins
46
- def skin_visual(url)
47
- skin(url)
48
- if(@screenshot.paths_hash.length > 1)
49
- puts "\n" + url.color(:cyan)
50
- @compare.visual_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
51
- else
52
- puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
53
- end
54
- end
45
+ # Creates a diffed screenshot between skins
46
+ def skin_visual(url)
47
+ skin(url)
48
+ if(@screenshot.paths_hash.length > 1)
49
+ puts "\n" + url.color(:cyan)
50
+ @compare.visual_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
51
+ else
52
+ puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
53
+ end
54
+ end
55
55
 
56
- # Creates a diffed screenshot between skins AND prints percentage changed
57
- def skin_visual_and_percentage(url, threshold=@configuration.threshold)
58
- skin(url)
59
- if(@screenshot.paths_hash.length > 1)
60
- puts "\n" + url.color(:cyan)
61
- @compare.percentage_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
62
- @compare.visual_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
63
- threshold_alert(@compare.percentage_changed, threshold)
64
- else
65
- puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
66
- end
67
- end
56
+ # Creates a diffed screenshot between skins AND prints percentage changed
57
+ def skin_visual_and_percentage(url, threshold=@configuration.threshold)
58
+ skin(url)
59
+ if(@screenshot.paths_hash.length > 1)
60
+ puts "\n" + url.color(:cyan)
61
+ @compare.percentage_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
62
+ @compare.visual_diff(@screenshot.paths_hash[:original], @screenshot.paths_hash[:fresh])
63
+ threshold_alert(@compare.percentage_changed, threshold)
64
+ else
65
+ puts "\n#{url}".color(:cyan) + " has been saved to #{@screenshot.paths_hash[:original]}".color(:yellow)
66
+ end
67
+ end
68
68
 
69
- # This is used in skin_percentage to better alert if a set of skins are ok or not
70
- def threshold_alert(actual, threshold)
71
- if actual > threshold
72
- puts "#{actual - threshold}% above threshold set @ #{threshold}%".color(:red)
73
- puts "pixels changed (%): #{@compare.percentage_changed}%"
74
- puts "pixels changed/total: #{@compare.changed_px}/#{@compare.total_px}"
75
- else
76
- puts "pixels changed/total: #{@compare.changed_px}/#{@compare.total_px}"
77
- end
78
- end
69
+ # This is used in skin_percentage to better alert if a set of skins are ok or not
70
+ def threshold_alert(actual, threshold)
71
+ if actual > threshold
72
+ puts "#{actual - threshold}% above threshold set @ #{threshold}%".color(:red)
73
+ puts "pixels changed (%): #{@compare.percentage_changed}%"
74
+ puts "pixels changed/total: #{@compare.changed_px}/#{@compare.total_px}"
75
+ else
76
+ puts "pixels changed/total: #{@compare.changed_px}/#{@compare.total_px}"
77
+ end
78
+ end
79
79
 
80
- end
80
+ end
81
81
  end
@@ -2,60 +2,67 @@ require "oily_png"
2
2
  require "rainbow"
3
3
 
4
4
  module GreenOnion
5
- class Compare
6
-
7
- attr_accessor :percentage_changed, :total_px, :changed_px
8
- attr_reader :diffed_image
9
-
10
- # Pulled from Jeff Kreeftmeijer's post here: http://jeffkreeftmeijer.com/2011/comparing-images-and-creating-image-diffs/
11
- # Thanks Jeff!
12
- def diff_images(org, fresh)
13
- @images = [
14
- ChunkyPNG::Image.from_file(org),
15
- ChunkyPNG::Image.from_file(fresh)
16
- ]
17
-
18
- @diff = []
19
-
20
- @images.first.height.times do |y|
21
- @images.first.row(y).each_with_index do |pixel, x|
22
- @diff << [x,y] unless pixel == @images.last[x,y]
23
- end
24
- end
25
- end
26
-
27
- def percentage_diff(org, fresh)
28
- diff_images(org, fresh)
29
- @total_px = @images.first.pixels.length
30
- @changed_px = @diff.length
31
- @percentage_changed = ( (@diff.length.to_f / @images.first.pixels.length) * 100 ).round(2)
32
- end
33
-
34
- def visual_diff(org, fresh)
35
- diff_images(org, fresh)
36
- diff_iterating(org, fresh)
37
- end
38
-
39
- def percentage_and_visual_diff(org, fresh)
40
- diff_images(org, fresh)
41
- @total_px = @images.first.pixels.length
42
- @changed_px = @diff.length
43
- @percentage_changed = ( (@diff.length.to_f / @images.first.pixels.length) * 100 ).round(2)
44
- end
45
-
46
- def diff_iterating(org, fresh)
47
- x, y = @diff.map{ |xy| xy[0] }, @diff.map{ |xy| xy[1] }
48
-
49
- @diffed_image = org.insert(-5, '_diff')
50
-
51
- begin
52
- @images.last.rect(x.min, y.min, x.max, y.max, ChunkyPNG::Color.rgb(0,255,0))
53
- rescue NoMethodError
54
- puts "Both skins are the same.".color(:yellow)
55
- end
56
-
57
- @images.last.save(@diffed_image)
58
- end
59
-
60
- end
5
+ class Compare
6
+
7
+ attr_accessor :percentage_changed, :total_px, :changed_px
8
+ attr_reader :diffed_image
9
+
10
+ # Pulled from Jeff Kreeftmeijer's post here: http://jeffkreeftmeijer.com/2011/comparing-images-and-creating-image-diffs/
11
+ # Thanks Jeff!
12
+ def diff_images(org, fresh)
13
+ @images = [
14
+ ChunkyPNG::Image.from_file(org),
15
+ ChunkyPNG::Image.from_file(fresh)
16
+ ]
17
+
18
+ @diff_index = []
19
+
20
+ @images.first.height.times do |y|
21
+ @images.first.row(y).each_with_index do |pixel, x|
22
+ unless pixel == @images.last[x,y]
23
+ @diff_index << [x,y]
24
+ @images.last[x,y] = ChunkyPNG::Color.rgb(
25
+ ChunkyPNG::Color.r(pixel) + ChunkyPNG::Color.r(@images.last[x,y]) - 2 * [ChunkyPNG::Color.r(pixel), ChunkyPNG::Color.r(@images.last[x,y])].min,
26
+ ChunkyPNG::Color.g(pixel) + ChunkyPNG::Color.g(@images.last[x,y]) - 2 * [ChunkyPNG::Color.g(pixel), ChunkyPNG::Color.g(@images.last[x,y])].min,
27
+ ChunkyPNG::Color.b(pixel) + ChunkyPNG::Color.b(@images.last[x,y]) - 2 * [ChunkyPNG::Color.b(pixel), ChunkyPNG::Color.b(@images.last[x,y])].min
28
+ )
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def percentage_diff(org, fresh)
35
+ diff_images(org, fresh)
36
+ @total_px = @images.first.pixels.length
37
+ @changed_px = @diff_index.length
38
+ @percentage_changed = ( (@diff_index.length.to_f / @images.first.pixels.length) * 100 ).round(2)
39
+ end
40
+
41
+ def visual_diff(org, fresh)
42
+ diff_images(org, fresh)
43
+ diff_iterating(org, fresh)
44
+ end
45
+
46
+ def percentage_and_visual_diff(org, fresh)
47
+ diff_images(org, fresh)
48
+ @total_px = @images.first.pixels.length
49
+ @changed_px = @diff_index.length
50
+ @percentage_changed = ( (@diff_index.length.to_f / @images.first.pixels.length) * 100 ).round(2)
51
+ end
52
+
53
+ def diff_iterating(org, fresh)
54
+ x, y = @diff_index.map{ |xy| xy[0] }, @diff_index.map{ |xy| xy[1] }
55
+
56
+ @diffed_image = org.insert(-5, '_diff')
57
+
58
+ begin
59
+ @images.last.rect(x.min, y.min, x.max, y.max, ChunkyPNG::Color.rgb(0,255,0))
60
+ rescue NoMethodError
61
+ puts "Both skins are the same.".color(:yellow)
62
+ end
63
+
64
+ @images.last.save(@diffed_image)
65
+ end
66
+
67
+ end
61
68
  end
@@ -1,23 +1,23 @@
1
1
  module GreenOnion
2
- class Configuration
2
+ class Configuration
3
3
 
4
- attr_writer :threshold, :skins_dir
4
+ attr_writer :threshold, :skins_dir
5
5
 
6
- def dimensions=(options)
7
- @dimensions = { :width => options[:width], :height => options[:height] }
8
- end
6
+ def dimensions=(options)
7
+ @dimensions = { :width => options[:width], :height => options[:height] }
8
+ end
9
+
10
+ def dimensions
11
+ @dimensions ||= { :height => 768, :width => 1024 }
12
+ end
9
13
 
10
- def dimensions
11
- @dimensions ||= { :height => 768, :width => 1024 }
12
- end
14
+ def threshold
15
+ @threshold ||= 100
16
+ end
13
17
 
14
- def threshold
15
- @threshold ||= 100
16
- end
18
+ def skins_dir
19
+ @skins_dir ||= './spec/skins'
20
+ end
17
21
 
18
- def skins_dir
19
- @skins_dir ||= './spec/skins'
20
- end
21
-
22
- end
22
+ end
23
23
  end
@@ -1,61 +1,60 @@
1
1
  require 'capybara/dsl'
2
2
  require 'capybara-webkit'
3
3
  require "fileutils"
4
- require "debugger"
5
4
 
6
5
  module GreenOnion
7
- class Screenshot
8
- include Capybara::DSL
9
-
10
- attr_accessor :dir, :dimensions
11
- attr_reader :paths_hash
12
-
13
- def initialize(params = {})
14
- Capybara.default_driver = :webkit
15
- @dimensions = params[:dimensions]
16
- @dir = params[:dir]
17
- @paths_hash = {}
18
- end
19
-
20
- def snap_screenshot(url, path)
21
- visit url
22
- Capybara.page.driver.render(path, @dimensions)
23
- end
24
-
25
- def test_screenshot(url)
26
- url_to_path(url)
27
- snap_screenshot(url, @shot_path)
28
- end
29
-
30
- def url_to_path(url)
31
- get_path(url)
32
- if File.exist?(@paths_hash[:original])
33
- @paths_hash[:fresh] = @paths_hash[:original].dup.insert(-5, '_fresh')
34
- @shot_path = @paths_hash[:fresh]
35
- else
36
- @shot_path = @paths_hash[:original]
37
- end
38
- end
39
-
40
- def get_path(url)
41
- @filename = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/)[5]
42
- if @filename.empty? || @filename == '/'
43
- @paths_hash[:original] = "#{@dir}/root.png"
44
- else
45
- @filename = @filename.gsub(/[\/]/, '')
46
- @paths_hash[:original] = "#{@dir}/#{@filename}.png"
47
- end
48
- end
49
-
50
- def destroy(url)
51
- get_path(url)
52
- if File.exist?( @paths_hash[:original] )
53
- FileUtils.rm( @paths_hash[:original] )
54
- if File.exist?( @paths_hash[:fresh] )
55
- FileUtils.rm( @paths_hash[:fresh] )
56
- end
57
- end
58
- end
59
-
60
- end
6
+ class Screenshot
7
+ include Capybara::DSL
8
+
9
+ attr_accessor :dir, :dimensions
10
+ attr_reader :paths_hash
11
+
12
+ def initialize(params = {})
13
+ Capybara.default_driver = :webkit
14
+ @dimensions = params[:dimensions]
15
+ @dir = params[:dir]
16
+ @paths_hash = {}
17
+ end
18
+
19
+ def snap_screenshot(url, path)
20
+ visit url
21
+ Capybara.page.driver.render(path, @dimensions)
22
+ end
23
+
24
+ def test_screenshot(url)
25
+ url_to_path(url)
26
+ snap_screenshot(url, @shot_path)
27
+ end
28
+
29
+ def url_to_path(url)
30
+ get_path(url)
31
+ if File.exist?(@paths_hash[:original])
32
+ @paths_hash[:fresh] = @paths_hash[:original].dup.insert(-5, '_fresh')
33
+ @shot_path = @paths_hash[:fresh]
34
+ else
35
+ @shot_path = @paths_hash[:original]
36
+ end
37
+ end
38
+
39
+ def get_path(url)
40
+ @filename = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/)[5]
41
+ if @filename.empty? || @filename == '/'
42
+ @paths_hash[:original] = "#{@dir}/root.png"
43
+ else
44
+ @filename = @filename.gsub(/[\/]/, '')
45
+ @paths_hash[:original] = "#{@dir}/#{@filename}.png"
46
+ end
47
+ end
48
+
49
+ def destroy(url)
50
+ get_path(url)
51
+ if File.exist?( @paths_hash[:original] )
52
+ FileUtils.rm( @paths_hash[:original] )
53
+ if File.exist?( @paths_hash[:fresh] )
54
+ FileUtils.rm( @paths_hash[:fresh] )
55
+ end
56
+ end
57
+ end
58
+
59
+ end
61
60
  end
@@ -1,3 +1,3 @@
1
1
  module GreenOnion
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -7,11 +7,15 @@ class SampleApp < Sinatra::Base
7
7
  set :logging, false
8
8
 
9
9
  get '/' do
10
- "<div style='height:200px; width:200px; background-color:rgb(#{rand(266)}, #{rand(266)}, #{rand(266)})'><!-- Big blue box --></div>"
10
+ "<div style='height:200px; width:200px; background-color:rgb(#{rand(266)}, #{rand(266)}, #{rand(266)})'><!-- Big blue box --></div>"
11
11
  end
12
12
 
13
13
  get "/fake_uri" do
14
14
  "<h2>foo</h2>"
15
15
  end
16
16
 
17
+ get "/onion_face" do
18
+ "<img src='onion_face_#{rand(2)}.jpg' />"
19
+ end
20
+
17
21
  end
@@ -2,27 +2,27 @@ require 'spec_helper'
2
2
 
3
3
  describe GreenOnion::Compare do
4
4
 
5
- describe 'Comparing Screenshots' do
5
+ describe 'Comparing Screenshots' do
6
6
 
7
- before(:each) do
8
- @comparison = GreenOnion::Compare.new
9
- @spec_shot1 = './spec/skins/spec_shot.png'
10
- @spec_shot2 = './spec/skins/spec_shot_fresh.png'
11
- @diff_shot = './spec/skins/spec_shot_diff.png'
12
- end
7
+ before(:each) do
8
+ @comparison = GreenOnion::Compare.new
9
+ @spec_shot1 = './spec/skins/spec_shot.png'
10
+ @spec_shot2 = './spec/skins/spec_shot_fresh.png'
11
+ @diff_shot = './spec/skins/spec_shot_diff.png'
12
+ end
13
13
 
14
- after(:all) do
15
- FileUtils.rm('./spec/skins/spec_shot_diff.png', :force => true)
16
- end
14
+ after(:all) do
15
+ FileUtils.rm('./spec/skins/spec_shot_diff.png', :force => true)
16
+ end
17
17
 
18
- it 'should get a percentage of difference between two shots' do
19
- @comparison.percentage_diff(@spec_shot1, @spec_shot2)
20
- @comparison.percentage_changed.should eq(66.0)
21
- end
18
+ it 'should get a percentage of difference between two shots' do
19
+ @comparison.percentage_diff(@spec_shot1, @spec_shot2)
20
+ @comparison.percentage_changed.should eq(66.0)
21
+ end
22
22
 
23
- it 'should create a new file with a visual diff between two shots' do
24
- @comparison.visual_diff(@spec_shot1, @spec_shot2)
25
- File.exist?(@diff_shot).should be_true
26
- end
27
- end
23
+ it 'should create a new file with a visual diff between two shots' do
24
+ @comparison.visual_diff(@spec_shot1, @spec_shot2)
25
+ File.exist?(@diff_shot).should be_true
26
+ end
27
+ end
28
28
  end
@@ -2,125 +2,125 @@ require "spec_helper"
2
2
 
3
3
  describe GreenOnion do
4
4
 
5
- before(:all) do
6
- @tmp_path = './spec/tmp'
7
- @url = 'http://localhost:8070'
8
- @url_w_uri = @url + '/fake_uri'
9
- end
10
-
11
- describe "Skins" do
12
- before(:each) do
13
- FileUtils.mkdir(@tmp_path)
14
-
15
- GreenOnion.configure do |c|
16
- c.skins_dir = @tmp_path
17
- end
18
- end
19
-
20
- after(:each) do
21
- FileUtils.rm_r(@tmp_path, :force => true)
22
- end
23
-
24
- it "should default to 1024x768 browser dimensions" do
25
- ( (GreenOnion.configuration.dimensions[:height] == 768) &&
26
- (GreenOnion.configuration.dimensions[:width] == 1024) ).should be_true
27
- end
28
-
29
- it "should set/get custom directory" do
30
- GreenOnion.configuration.skins_dir.should eq(@tmp_path)
31
- end
32
-
33
- it "should get the correct paths_hash" do
34
- 2.times do
35
- GreenOnion.skin(@url)
36
- end
37
- ( (GreenOnion.screenshot.paths_hash[:original] == "#{@tmp_path}/root.png") &&
38
- (GreenOnion.screenshot.paths_hash[:fresh] == "#{@tmp_path}/root_fresh.png") ).should be_true
39
- end
40
-
41
- it "should measure the percentage of diff between skins" do
42
- 2.times do
43
- GreenOnion.skin_percentage(@url)
44
- end
45
- GreenOnion.compare.percentage_changed.should be > 0
46
- end
47
-
48
- it "should measure the percentage of diff between skins (even if there is no diff)" do
49
- 2.times do
50
- GreenOnion.skin_percentage(@url_w_uri)
51
- end
52
- GreenOnion.compare.percentage_changed.should be == 0
53
- end
54
-
55
- it "should print just URL and changed/total when diff percentage threshold has not been surpassed" do
56
- $stdout.should_receive(:puts).exactly(3).times
57
- 2.times do
58
- GreenOnion.skin_percentage(@url, 6)
59
- end
60
- end
61
-
62
- it "should create visual diff between skins" do
63
- 2.times do
64
- GreenOnion.skin_visual(@url)
65
- end
66
- GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/root_diff.png")
67
- end
68
-
69
- it "should create visual diff between skins (even when there is no change)" do
70
- 2.times do
71
- GreenOnion.skin_visual(@url_w_uri)
72
- end
73
- GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/fake_uri_diff.png")
74
- end
75
-
76
- it "should measure the percentage of diff between skins AND create visual diff" do
77
- 2.times do
78
- GreenOnion.skin_visual_and_percentage(@url)
79
- end
80
- ( (GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/root_diff.png")) &&
81
- (GreenOnion.compare.percentage_changed.should be > 0) ).should be_true
82
- end
83
- end
84
-
85
- describe "Skins with custom dimensions" do
86
- before(:each) do
87
- FileUtils.mkdir(@tmp_path)
88
-
89
- GreenOnion.configure do |c|
90
- c.skins_dir = @tmp_path
91
- c.dimensions = { :width => 1440, :height => 900 }
92
- end
93
- end
94
-
95
- after(:each) do
96
- FileUtils.rm_r(@tmp_path, :force => true)
97
- end
98
-
99
- it "should allow custom browser dimensions" do
100
- ( (GreenOnion.configuration.dimensions[:height] == 900) &&
101
- (GreenOnion.configuration.dimensions[:width] == 1440) ).should be_true
102
- end
103
- end
104
-
105
- describe "Skins with custom threshold" do
106
- before(:each) do
107
- FileUtils.mkdir(@tmp_path)
108
-
109
- GreenOnion.configure do |c|
110
- c.skins_dir = @tmp_path
111
- c.threshold = 1
112
- end
113
- end
114
-
115
- after(:each) do
116
- FileUtils.rm_r(@tmp_path, :force => true)
117
- end
118
-
119
- it "should alert when diff percentage threshold is surpassed" do
120
- $stdout.should_receive(:puts).exactly(5).times
121
- 2.times do
122
- GreenOnion.skin_percentage(@url)
123
- end
124
- end
125
- end
5
+ before(:all) do
6
+ @tmp_path = './spec/tmp'
7
+ @url = 'http://localhost:8070'
8
+ @url_w_uri = @url + '/fake_uri'
9
+ end
10
+
11
+ describe "Skins" do
12
+ before(:each) do
13
+ FileUtils.mkdir(@tmp_path)
14
+
15
+ GreenOnion.configure do |c|
16
+ c.skins_dir = @tmp_path
17
+ end
18
+ end
19
+
20
+ after(:each) do
21
+ FileUtils.rm_r(@tmp_path, :force => true)
22
+ end
23
+
24
+ it "should default to 1024x768 browser dimensions" do
25
+ ( (GreenOnion.configuration.dimensions[:height] == 768) &&
26
+ (GreenOnion.configuration.dimensions[:width] == 1024) ).should be_true
27
+ end
28
+
29
+ it "should set/get custom directory" do
30
+ GreenOnion.configuration.skins_dir.should eq(@tmp_path)
31
+ end
32
+
33
+ it "should get the correct paths_hash" do
34
+ 2.times do
35
+ GreenOnion.skin(@url)
36
+ end
37
+ ( (GreenOnion.screenshot.paths_hash[:original] == "#{@tmp_path}/root.png") &&
38
+ (GreenOnion.screenshot.paths_hash[:fresh] == "#{@tmp_path}/root_fresh.png") ).should be_true
39
+ end
40
+
41
+ it "should measure the percentage of diff between skins" do
42
+ 2.times do
43
+ GreenOnion.skin_percentage(@url)
44
+ end
45
+ GreenOnion.compare.percentage_changed.should be > 0
46
+ end
47
+
48
+ it "should measure the percentage of diff between skins (even if there is no diff)" do
49
+ 2.times do
50
+ GreenOnion.skin_percentage(@url_w_uri)
51
+ end
52
+ GreenOnion.compare.percentage_changed.should be == 0
53
+ end
54
+
55
+ it "should print just URL and changed/total when diff percentage threshold has not been surpassed" do
56
+ $stdout.should_receive(:puts).exactly(3).times
57
+ 2.times do
58
+ GreenOnion.skin_percentage(@url, 6)
59
+ end
60
+ end
61
+
62
+ it "should create visual diff between skins" do
63
+ 2.times do
64
+ GreenOnion.skin_visual(@url)
65
+ end
66
+ GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/root_diff.png")
67
+ end
68
+
69
+ it "should create visual diff between skins (even when there is no change)" do
70
+ 2.times do
71
+ GreenOnion.skin_visual(@url_w_uri)
72
+ end
73
+ GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/fake_uri_diff.png")
74
+ end
75
+
76
+ it "should measure the percentage of diff between skins AND create visual diff" do
77
+ 2.times do
78
+ GreenOnion.skin_visual_and_percentage(@url)
79
+ end
80
+ ( (GreenOnion.compare.diffed_image.should eq("#{@tmp_path}/root_diff.png")) &&
81
+ (GreenOnion.compare.percentage_changed.should be > 0) ).should be_true
82
+ end
83
+ end
84
+
85
+ describe "Skins with custom dimensions" do
86
+ before(:each) do
87
+ FileUtils.mkdir(@tmp_path)
88
+
89
+ GreenOnion.configure do |c|
90
+ c.skins_dir = @tmp_path
91
+ c.dimensions = { :width => 1440, :height => 900 }
92
+ end
93
+ end
94
+
95
+ after(:each) do
96
+ FileUtils.rm_r(@tmp_path, :force => true)
97
+ end
98
+
99
+ it "should allow custom browser dimensions" do
100
+ ( (GreenOnion.configuration.dimensions[:height] == 900) &&
101
+ (GreenOnion.configuration.dimensions[:width] == 1440) ).should be_true
102
+ end
103
+ end
104
+
105
+ describe "Skins with custom threshold" do
106
+ before(:each) do
107
+ FileUtils.mkdir(@tmp_path)
108
+
109
+ GreenOnion.configure do |c|
110
+ c.skins_dir = @tmp_path
111
+ c.threshold = 1
112
+ end
113
+ end
114
+
115
+ after(:each) do
116
+ FileUtils.rm_r(@tmp_path, :force => true)
117
+ end
118
+
119
+ it "should alert when diff percentage threshold is surpassed" do
120
+ $stdout.should_receive(:puts).exactly(5).times
121
+ 2.times do
122
+ GreenOnion.skin_percentage(@url)
123
+ end
124
+ end
125
+ end
126
126
  end
@@ -2,85 +2,85 @@ require 'spec_helper'
2
2
 
3
3
  describe GreenOnion::Screenshot do
4
4
 
5
- before(:all) do
6
- @url = 'http://localhost:8070'
7
- @url_w_uri = @url + '/fake_uri'
8
- @tmp_path = './spec/tmp'
9
- @dimensions = { :width => 1024, :height => 768 }
10
- end
5
+ before(:all) do
6
+ @url = 'http://localhost:8070'
7
+ @url_w_uri = @url + '/fake_uri'
8
+ @tmp_path = './spec/tmp'
9
+ @dimensions = { :width => 1024, :height => 768 }
10
+ end
11
11
 
12
12
  describe 'Snap single screenshot' do
13
13
 
14
- before(:each) do
15
- FileUtils.mkdir(@tmp_path)
16
-
17
- @screenshot = GreenOnion::Screenshot.new(
18
- :dir => @tmp_path,
19
- :dimensions => @dimensions
20
- )
21
- @file = "#{@tmp_path}/fake_uri.png"
22
- end
23
-
24
- after(:each) do
25
- FileUtils.rm_r(@tmp_path, :force => true)
26
- end
27
-
28
- it 'should build the path from the URI' do
29
- @screenshot.url_to_path(@url_w_uri).should eq(@file)
30
- end
31
-
32
- it 'should build the path from root' do
33
- @screenshot.url_to_path('http://localhost:8070').should eq("#{@tmp_path}/root.png")
34
- end
35
-
36
- it 'should build the path from root (even with trailing slash)' do
37
- @screenshot.url_to_path('http://localhost:8070/').should eq("#{@tmp_path}/root.png")
38
- end
39
-
40
- it 'should snap and save screenshot' do
41
- @screenshot.snap_screenshot(@url_w_uri, @file)
42
- File.exist?(@file).should be_true
43
- end
44
-
45
- it "should destroy a singular screenshot" do
46
- @screenshot.destroy(@url_w_uri)
47
- File.exist?(@file).should be_false
48
- end
49
- end
50
-
51
- describe 'Snap two screenshots' do
52
-
53
- before(:each) do
54
- FileUtils.mkdir(@tmp_path)
55
-
56
- @screenshot = GreenOnion::Screenshot.new(
57
- :dir => @tmp_path,
58
- :dimensions => @dimensions
59
- )
60
- @file1 = "#{@tmp_path}/fake_uri.png"
61
- @file2 = "#{@tmp_path}/fake_uri_fresh.png"
62
- 2.times do
63
- @screenshot.test_screenshot(@url_w_uri)
64
- end
65
- end
66
-
67
- after(:each) do
68
- FileUtils.rm_r(@tmp_path, :force => true)
69
- end
70
-
71
- it "should create the paths_hash correctly" do
72
- ( (@screenshot.paths_hash[:original].should eq(@file1)) && (@screenshot.paths_hash[:fresh].should eq(@file2)) ).should be_true
73
- end
74
-
75
- it "should snap and save another screenshot if a screenshot already exists" do
76
- if File.exist?(@file1)
77
- File.exist?(@file2).should be_true
78
- end
79
- end
80
-
81
- it "should destroy a set of screenshots" do
82
- @screenshot.destroy(@url_w_uri)
83
- ( File.exist?(@file1) && File.exist?(@file2) ).should be_false
84
- end
85
- end
14
+ before(:each) do
15
+ FileUtils.mkdir(@tmp_path)
16
+
17
+ @screenshot = GreenOnion::Screenshot.new(
18
+ :dir => @tmp_path,
19
+ :dimensions => @dimensions
20
+ )
21
+ @file = "#{@tmp_path}/fake_uri.png"
22
+ end
23
+
24
+ after(:each) do
25
+ FileUtils.rm_r(@tmp_path, :force => true)
26
+ end
27
+
28
+ it 'should build the path from the URI' do
29
+ @screenshot.url_to_path(@url_w_uri).should eq(@file)
30
+ end
31
+
32
+ it 'should build the path from root' do
33
+ @screenshot.url_to_path('http://localhost:8070').should eq("#{@tmp_path}/root.png")
34
+ end
35
+
36
+ it 'should build the path from root (even with trailing slash)' do
37
+ @screenshot.url_to_path('http://localhost:8070/').should eq("#{@tmp_path}/root.png")
38
+ end
39
+
40
+ it 'should snap and save screenshot' do
41
+ @screenshot.snap_screenshot(@url_w_uri, @file)
42
+ File.exist?(@file).should be_true
43
+ end
44
+
45
+ it "should destroy a singular screenshot" do
46
+ @screenshot.destroy(@url_w_uri)
47
+ File.exist?(@file).should be_false
48
+ end
49
+ end
50
+
51
+ describe 'Snap two screenshots' do
52
+
53
+ before(:each) do
54
+ FileUtils.mkdir(@tmp_path)
55
+
56
+ @screenshot = GreenOnion::Screenshot.new(
57
+ :dir => @tmp_path,
58
+ :dimensions => @dimensions
59
+ )
60
+ @file1 = "#{@tmp_path}/fake_uri.png"
61
+ @file2 = "#{@tmp_path}/fake_uri_fresh.png"
62
+ 2.times do
63
+ @screenshot.test_screenshot(@url_w_uri)
64
+ end
65
+ end
66
+
67
+ after(:each) do
68
+ FileUtils.rm_r(@tmp_path, :force => true)
69
+ end
70
+
71
+ it "should create the paths_hash correctly" do
72
+ ( (@screenshot.paths_hash[:original].should eq(@file1)) && (@screenshot.paths_hash[:fresh].should eq(@file2)) ).should be_true
73
+ end
74
+
75
+ it "should snap and save another screenshot if a screenshot already exists" do
76
+ if File.exist?(@file1)
77
+ File.exist?(@file2).should be_true
78
+ end
79
+ end
80
+
81
+ it "should destroy a set of screenshots" do
82
+ @screenshot.destroy(@url_w_uri)
83
+ ( File.exist?(@file1) && File.exist?(@file2) ).should be_false
84
+ end
85
+ end
86
86
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: green_onion
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ted O'Meara
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-07-30 00:00:00 Z
13
+ date: 2012-07-31 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -35,7 +35,7 @@ dependencies:
35
35
  type: :development
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
38
- name: fileutils
38
+ name: pry
39
39
  prerelease: false
40
40
  requirement: &id003 !ruby/object:Gem::Requirement
41
41
  none: false
@@ -46,7 +46,7 @@ dependencies:
46
46
  type: :development
47
47
  version_requirements: *id003
48
48
  - !ruby/object:Gem::Dependency
49
- name: pry
49
+ name: debugger
50
50
  prerelease: false
51
51
  requirement: &id004 !ruby/object:Gem::Requirement
52
52
  none: false
@@ -57,7 +57,7 @@ dependencies:
57
57
  type: :development
58
58
  version_requirements: *id004
59
59
  - !ruby/object:Gem::Dependency
60
- name: debugger
60
+ name: sinatra
61
61
  prerelease: false
62
62
  requirement: &id005 !ruby/object:Gem::Requirement
63
63
  none: false
@@ -68,58 +68,58 @@ dependencies:
68
68
  type: :development
69
69
  version_requirements: *id005
70
70
  - !ruby/object:Gem::Dependency
71
- name: sinatra
71
+ name: capybara
72
72
  prerelease: false
73
73
  requirement: &id006 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
- - - ">="
76
+ - - "="
77
77
  - !ruby/object:Gem::Version
78
- version: "0"
79
- type: :development
78
+ version: 1.1.2
79
+ type: :runtime
80
80
  version_requirements: *id006
81
81
  - !ruby/object:Gem::Dependency
82
- name: capybara
82
+ name: capybara-webkit
83
83
  prerelease: false
84
84
  requirement: &id007 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
87
- - - ">="
87
+ - - "="
88
88
  - !ruby/object:Gem::Version
89
- version: "0"
89
+ version: 0.12.1
90
90
  type: :runtime
91
91
  version_requirements: *id007
92
92
  - !ruby/object:Gem::Dependency
93
- name: capybara-webkit
93
+ name: oily_png
94
94
  prerelease: false
95
95
  requirement: &id008 !ruby/object:Gem::Requirement
96
96
  none: false
97
97
  requirements:
98
- - - ">="
98
+ - - "="
99
99
  - !ruby/object:Gem::Version
100
- version: "0"
100
+ version: 1.0.2
101
101
  type: :runtime
102
102
  version_requirements: *id008
103
103
  - !ruby/object:Gem::Dependency
104
- name: oily_png
104
+ name: rainbow
105
105
  prerelease: false
106
106
  requirement: &id009 !ruby/object:Gem::Requirement
107
107
  none: false
108
108
  requirements:
109
- - - ">="
109
+ - - "="
110
110
  - !ruby/object:Gem::Version
111
- version: "0"
111
+ version: 1.1.4
112
112
  type: :runtime
113
113
  version_requirements: *id009
114
114
  - !ruby/object:Gem::Dependency
115
- name: rainbow
115
+ name: fileutils
116
116
  prerelease: false
117
117
  requirement: &id010 !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
120
- - - ">="
120
+ - - "="
121
121
  - !ruby/object:Gem::Version
122
- version: "0"
122
+ version: "0.7"
123
123
  type: :runtime
124
124
  version_requirements: *id010
125
125
  description: UI testing/screenshot diffing tool
@@ -188,3 +188,4 @@ test_files:
188
188
  - spec/unit/compare_spec.rb
189
189
  - spec/unit/green_onion_spec.rb
190
190
  - spec/unit/screenshot_spec.rb
191
+ has_rdoc: