gatling 1.0.2 → 1.0.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/.gitignore CHANGED
@@ -1,6 +1,4 @@
1
- <<<<<<< HEAD
2
1
  *.png
3
- =======
4
2
  *.gem
5
3
  .bundle
6
4
  Gemfile.lock
@@ -8,4 +6,6 @@ pkg/*
8
6
  *.orig
9
7
  test*
10
8
  .idea*
11
- >>>>>>> 942d4a993ee6a3407063786d0431cdfd553629ed
9
+ .DS_Store
10
+ spec/support/ready_candidate_ref/temp/*
11
+ reports/*
data/Gemfile CHANGED
@@ -2,3 +2,10 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in gatling.gemspec
4
4
  gemspec
5
+
6
+ group :development, :test, :smoke do
7
+ gem 'sinatra' ,'1.3.1'
8
+ gem 'rack-test'
9
+ gem 'rake'
10
+ gem 'rspec-instafail'
11
+ end
data/README.rdoc CHANGED
@@ -1,13 +1,49 @@
1
- = gatling
1
+ = Gatling
2
2
 
3
3
  Gatling Comparison allows one to build an Rspec / Capybara custom matcher comparing a :css or :xpath element to a referenced screenshot.
4
4
 
5
- Imagemagick must be installed: $sudo apt-get install imagemagick
5
+ -------------------------------------
6
+
7
+ Usage:
8
+
9
+ Identify an element to match, for example:
10
+
11
+ @element = page.find(:css, #button)
12
+
13
+ Use Gatling's custom matcher and specify the reference image:
14
+
15
+ @element.should look_like('button_ref.png')
16
+
17
+ Gatling will take care of cropping the element and try and make a targeted match without the noise of the whole page.
18
+
19
+
20
+ If the matcher fails, the test will fail, an exception will be raised and both a diff image and a new candidate image will be created.
21
+
22
+
23
+ If no reference image exits, the test will fail, an exception will be raised and a candidate will be created which can be used as a reference.
24
+
25
+ -------------------------------------
26
+
27
+ Usage, training mode:
28
+
29
+ Gatling can be run in training mode which will create all the initial reference images.
30
+
31
+ CAUTION: Trainer mode will pass all the test which rely on the Gatling custom matcher. Please make sure you are saving 'clean' references.
32
+
33
+
34
+ To set trainer mode, prefix rspec with $GATLING_TRAINER = true
35
+
36
+
37
+ Example:
38
+ $GATLING_TRAINER = true rspec spec/my_spec.rb
39
+
40
+ -------------------------------------
41
+
42
+ Non-gem dependencies: Imagemagick must be installed:
43
+ $sudo apt-get install imagemagick
44
+
45
+ -------------------------------------
6
46
 
7
- To make this gem work with native selenium-webdriver:
8
- in gatling.rb replace
9
- element = @actual.native with
10
- element = @actual
11
47
 
12
48
  == Contributing to gatling
13
49
 
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
  require 'rspec/core'
3
3
  require 'rspec/core/rake_task'
4
4
  require File.expand_path('spec/spec_helper.rb')
@@ -8,5 +8,6 @@ task :default => ["run"]
8
8
  desc "default test run"
9
9
  RSpec::Core::RakeTask.new(:run) do |t|
10
10
  t.pattern = ['spec/*_spec.rb']
11
+ t.rspec_opts = ['--options', "spec/spec.opts"]
11
12
  end
12
13
 
data/gatling.gemspec CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- # specify any dependencies here; for example:
22
21
  s.add_dependency "rmagick"
23
22
  s.add_dependency "rspec-core"
24
23
  s.add_dependency "rspec"
data/lib/gatling.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'RMagick'
2
+ require_relative 'gatling/capture_element'
2
3
  require 'capybara'
3
4
  require 'capybara/dsl'
4
5
 
@@ -6,7 +7,7 @@ require 'capybara/dsl'
6
7
  module Gatling
7
8
  class Comparison
8
9
  include Capybara::DSL
9
-
10
+
10
11
  #TODO: Training mode
11
12
  #TODO: Diff with reports
12
13
  #TODO: Fuzz matches
@@ -16,36 +17,14 @@ module Gatling
16
17
  @expected = expected
17
18
  @actual = actual
18
19
 
20
+ @capture_element = Gatling::CaptureElement.new(@actual)
21
+
19
22
  @reference_image_path = Gatling::Configuration.reference_image_path
23
+ @trainer_toggle = Gatling::Configuration.trainer_toggle
24
+
20
25
  @expected_image = "#{@reference_image_path}/#{@expected}"
21
26
  @expected_filename = "#{@expected}".sub(/\.[a-z]*/,'')
22
- end
23
-
24
-
25
- def capture
26
- temp_dir = "#{@reference_image_path}/temp"
27
27
 
28
- FileUtils::mkdir_p(temp_dir)
29
-
30
- #captures the uncropped full screen
31
- page.driver.browser.save_screenshot("#{temp_dir}/temp.png")
32
- temp_screenshot = Magick::Image.read("#{temp_dir}/temp.png").first
33
- end
34
-
35
- def crop_element
36
- element = @actual.native
37
- location = element.location
38
- size = element.size
39
- capture.crop(location.x, location.y, size.width, size.height)
40
- end
41
-
42
- def save_crop_as_reference(cropped_element)
43
- candidate_path = "#{@reference_image_path}/candidate"
44
-
45
- FileUtils::mkdir_p(candidate_path)
46
-
47
- cropped_element.write("#{candidate_path}/#{@expected_filename}.png")
48
- candidate = "#{candidate_path}/#{@expected_filename}.png"
49
28
  end
50
29
 
51
30
  def create_diff
@@ -55,55 +34,54 @@ module Gatling
55
34
 
56
35
  @diff_metric.first.write("#{diff_path}/#{@expected_filename}_diff.png")
57
36
 
58
- candidate = save_crop_as_reference(@cropped_element)
37
+ candidate = save_element_as_candidate(@cropped_element)
59
38
  raise "element did not match #{@expected}. A diff image: #{@expected_filename}_diff.png was created in #{diff_path}. A new reference #{candidate} can be used to fix the test"
60
39
  end
61
40
 
41
+ def save_element_as_candidate(element)
42
+ candidate_path = "#{@reference_image_path}/candidate"
43
+ candidate = @capture_element.save_element(element, @expected_filename, candidate_path)
44
+ end
62
45
 
63
- def matches?
64
-
65
- @cropped_element = crop_element
66
- if File.exists?(@expected_image)
67
-
68
- expected_img = Magick::Image.read(@expected_image).first
69
-
70
- @diff_metric = @cropped_element.compare_channel(expected_img, Magick::MeanAbsoluteErrorMetric)
71
-
72
- matches = @diff_metric[1] == 0.0
73
-
74
- create_diff unless matches
46
+ def save_element_as_reference(element)
47
+ if File.exists?(@expected_image) == false
48
+ @capture_element.save_element(element, @expected_filename, @reference_image_path)
49
+ puts "Saved #{@expected_image} as reference"
50
+ else
51
+ puts "#{@expected_image.upcase} ALREADY EXISTS. REFERENCE IMAGE WAS NOT OVERWRITTEN. PLEASE DELETE OLD FILE TO UPDATE USING TRAINER"
52
+ end
53
+ end
75
54
 
76
- matches
55
+ def matches?
56
+ @cropped_element = @capture_element.crop
57
+ if !@trainer_toggle
58
+ if File.exists?(@expected_image)
59
+ self.compare
60
+ else
61
+ candidate = self.save_element_as_candidate(@cropped_element)
62
+ raise "The design reference #{@expected} does not exist, #{candidate} is now available to be used as a reference. Copy candidate to root reference_image_path to use as reference"
63
+ end
77
64
  else
78
- candidate = save_crop_as_reference(@cropped_element)
79
- raise "The design reference #{@expected} does not exist, #{candidate} is now available to be used as a reference. Copy candidate to root reference_image_path to use as reference"
80
- end
81
- end
82
- end
83
-
84
- module Configuration
65
+ self.save_element_as_reference(@cropped_element)
66
+ matches = true
67
+ end
68
+ end
85
69
 
86
- class << self
70
+ def compare
71
+ expected_img = Magick::Image.read(@expected_image).first
87
72
 
88
- attr_accessor 'reference_image_path'
73
+ @diff_metric = @cropped_element.compare_channel(expected_img, Magick::MeanAbsoluteErrorMetric)
89
74
 
90
- def reference_image_path
91
- #if defined?(Rails) or @reference_image_path.nil?
92
- # @reference_image_path ||= File.join(Rails.root, 'spec/reference_images')
93
- #end
94
- begin
95
- @reference_image_path ||= File.join(Rails.root, 'spec/reference_images')
96
- rescue
97
- raise "Not using Rails? Please set the reference_image_path"
98
- end
99
- end
75
+ matches = @diff_metric[1] == 0.0
100
76
 
77
+ create_diff unless matches
78
+
79
+ matches
101
80
  end
102
-
103
81
  end
104
-
82
+
105
83
  end
106
84
 
107
85
 
108
-
86
+
109
87
 
@@ -0,0 +1,51 @@
1
+ module Gatling
2
+ class CaptureElement
3
+
4
+ def initialize element_to_capture
5
+ @reference_image_path = Gatling::Configuration.reference_image_path
6
+ @element = element_to_capture
7
+ end
8
+
9
+ def capture
10
+ temp_dir = "#{@reference_image_path}/temp"
11
+
12
+ begin
13
+ FileUtils::mkdir_p(temp_dir)
14
+ rescue
15
+ puts "Could not create directory #{temp_dir}. Please make sure you have permission"
16
+ end
17
+
18
+ #captures the uncropped full screen
19
+ begin
20
+ page.driver.browser.save_screenshot("#{temp_dir}/temp.png")
21
+ temp_screenshot = Magick::Image.read("#{temp_dir}/temp.png").first
22
+ rescue
23
+ raise "Could not save screenshot to #{temp_dir}. Please make sure you have permission"
24
+ end
25
+ end
26
+
27
+ def crop
28
+ element = @element.native
29
+ location = element.location
30
+ size = element.size
31
+ @cropped_element = self.capture.crop(location.x, location.y, size.width, size.height)
32
+ end
33
+
34
+ def save_element(element, element_name, path)
35
+ begin
36
+ FileUtils::mkdir_p(path)
37
+ rescue
38
+ puts "Could not create directory #{path}. Please make sure you have permission"
39
+ end
40
+
41
+ begin
42
+ element.write("#{path}/#{element_name}.png")
43
+ element = "#{path}/#{element_name}.png"
44
+ rescue
45
+ raise "Could not save #{element_name} to #{path}. Please make sure you have permission"
46
+ end
47
+ end
48
+
49
+
50
+ end
51
+ end
@@ -0,0 +1,36 @@
1
+ module Gatling
2
+ module Configuration
3
+
4
+ class << self
5
+
6
+ attr_accessor 'reference_image_path', 'trainer_toggle'
7
+
8
+ def reference_image_path
9
+ begin
10
+ @reference_image_path ||= File.join(Rails.root, 'spec/reference_images')
11
+ rescue
12
+ raise "Not using Rails? Please set the reference_image_path"
13
+ end
14
+ end
15
+
16
+ def trainer_toggle
17
+ @trainer_value = ENV['GATLING_TRAINER']
18
+
19
+ case @trainer_value
20
+ when nil
21
+ @trainer_value = nil
22
+ when 'true'
23
+ @trainer_value = true
24
+ when 'false'
25
+ @trainer_value = false
26
+ else
27
+ @trainer_value = false
28
+ puts 'Unknown GATLING_TRAINER argument. Please supply true, false or nil. DEFAULTING TO FALSE'
29
+ end
30
+ @trainer_toggle ||= @trainer_value ||= false
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Gatling
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -17,15 +17,51 @@ describe "Gatling::Configuration" do
17
17
  end
18
18
  end
19
19
 
20
+
21
+
20
22
  it "should default to <Rails.root>/spec/reference_images" do
21
23
  Gatling::Configuration.reference_image_path.should eql("fake_rails_root/spec/reference_images")
22
24
  end
23
25
 
24
- it "should be overrideable" do
26
+ it "should be overrideable" do
25
27
  Gatling::Configuration.reference_image_path = "my custom path"
26
28
  Gatling::Configuration.reference_image_path.should eql("my custom path")
27
29
  end
30
+
31
+
32
+ end
33
+
34
+ describe '#trainer_toggle' do
35
+
36
+ it 'should default to false' do
37
+ Gatling::Configuration.trainer_toggle.should eql(false)
38
+ end
28
39
 
40
+ it 'can be toggled to true' do
41
+ Gatling::Configuration.trainer_toggle = true
42
+ Gatling::Configuration.trainer_toggle.should eql(true)
43
+ end
44
+
45
+ it 'toggeled using GATLING_TRAINER = false' do
46
+ ENV['GATLING_TRAINER'] = 'false'
47
+ Gatling::Configuration.trainer_toggle.should eql(false)
48
+ end
49
+
50
+ it 'toggeled using GATLING_TRAINER = true' do
51
+ ENV['GATLING_TRAINER'] = 'true'
52
+ Gatling::Configuration.trainer_toggle.should eql(true)
53
+ end
54
+
55
+ it 'toggeled using GATLING_TRAINER = nil' do
56
+ ENV['GATLING_TRAINER'] = nil
57
+ Gatling::Configuration.trainer_toggle.should eql(false)
58
+ end
59
+
60
+ after(:each) do
61
+ Gatling::Configuration.trainer_toggle = false
62
+ ENV['GATLING_TRAINER'] = nil
63
+ end
64
+
29
65
  end
30
66
 
31
67
  end
data/spec/gatling_spec.rb CHANGED
@@ -1,24 +1,107 @@
1
1
  require 'spec_helper'
2
+ include Capybara::DSL
2
3
 
3
- # before(:all) do
4
- # @expected_image =
5
- # @page_to_capture =
6
- #
7
- # end
4
+
5
+ describe 'Gatling' do
6
+
7
+
8
+ before(:all) do
9
+
10
+ include Rack::Test::Methods
11
+
12
+ def app
13
+ Sinatra::Application
14
+ end
15
+
16
+ #expected image to compare with
17
+ @example_good_image = 'smiley-faceicon.png'
18
+
19
+ @spec_support_root = spec_support_root
20
+ end
21
+
22
+
23
+ after(:each) do
24
+ remove_refs(@ref_path)
25
+ end
8
26
 
9
27
 
28
+
10
29
  describe 'creating an initial reference (expected) image' do
11
- pending
30
+
31
+ before(:each) do
32
+ @ref_path = Gatling::Configuration.reference_image_path = File.join(@spec_support_root, 'ref_path')
33
+ end
34
+
35
+ it "should notify that no reference exists for image and create a candidate" do
36
+ gatling = gatling_for_spec('smiley-faceicon.png')
37
+ expect {gatling.matches?}.should raise_error(RuntimeError, "The design reference #{@example_good_image} does not exist, #{@ref_path}/candidate/#{@example_good_image} is now available to be used as a reference. Copy candidate to root reference_image_path to use as reference")
38
+ File.exists?(File.join(@ref_path,'candidate','smiley-faceicon.png')).should be_true
39
+ end
40
+ end
41
+
42
+
43
+
44
+ describe 'image comparison' do
45
+
46
+ before(:each) do
47
+ # @ready_ref = Gatling::Configuration.reference_image_path = File.join(@spec_support_root, 'ready_candidate_ref')
48
+ @ref_path = Gatling::Configuration.reference_image_path = File.join(@spec_support_root, 'ref_path')
49
+ save_element_for_test
50
+ end
51
+
52
+ it 'images match' do
53
+ @gatling = gatling_for_spec('smiley-faceicon.png')
54
+ @gatling.matches?.should be_true
55
+ end
56
+
57
+ it 'images do not match and diff created' do
58
+ #convert -fill none -stroke black -strokewidth 5 smiley-faceicon.png -draw 'arc 155,25 185,45 180' sad-faceicon.png
59
+ convert_element_to_bad_element(File.join(@ref_path,"#{@example_good_image}"))
60
+ gatling = gatling_for_spec('smiley-faceicon.png')
61
+ expect {gatling.matches?}.should raise_error(RuntimeError, "element did not match #{@example_good_image}. A diff image: smiley-faceicon_diff.png was created in #{@ref_path}/diff. A new reference #{@ref_path}/candidate/#{@example_good_image} can be used to fix the test")
62
+ File.exists?(File.join(@ref_path,'diff','smiley-faceicon_diff.png')).should be_true
63
+ end
12
64
  end
13
-
14
- describe 'captured and referenced images match' do
15
- pending
65
+
66
+
67
+
68
+ describe 'trainer toggle' do
69
+
70
+ before(:each) do
71
+ @ref_path = Gatling::Configuration.reference_image_path = File.join(@spec_support_root, 'ref_path')
72
+ end
73
+
74
+ it 'should save a reference file to the nominated folder without raising an exception' do
75
+ Gatling::Configuration.trainer_toggle = true
76
+ gatling = gatling_for_spec('smiley-faceicon.png')
77
+
78
+ expect {gatling.matches?}.should_not raise_error
79
+ File.exists?(File.join(@ref_path,'smiley-faceicon.png')).should be_true
80
+ end
81
+
82
+ it 'should alert that the file should be deleted if a reference already exists and not overwrite file' do
83
+ save_element_for_test
84
+ Gatling::Configuration.trainer_toggle = true
85
+ gatling = gatling_for_spec('smiley-faceicon.png')
86
+
87
+ reference_file_ctime = File.ctime(File.join(@ref_path,'smiley-faceicon.png'))
88
+ sleep(1)
89
+ expect {gatling.matches?}.should_not raise_error
90
+
91
+ #checks if file was overwritten by comparing the time stamps
92
+ reference_file_ctime.eql?(File.ctime(File.join(@ref_path,'smiley-faceicon.png'))).should be_true
93
+ end
94
+
16
95
  end
17
96
 
18
- describe 'captured and referenced images do NOT match' do
19
- pending
20
- end
21
97
 
22
98
 
23
99
 
100
+ # MOCK SELENIUM ELEMENT
101
+ # correct size (340px*42px)
102
+ # image magick saves screenshot
103
+ #create diff creates the correct candidate
104
+
105
+
106
+ end
24
107
 
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+ include Capybara::DSL
3
+
4
+
5
+ describe 'rspec matcher' do
6
+
7
+ before(:all) do
8
+
9
+ include Rack::Test::Methods
10
+
11
+ def app
12
+ Sinatra::Application
13
+ end
14
+
15
+ #expected image to compare with
16
+ @example_good_image = 'smiley-faceicon.png'
17
+
18
+ @spec_support_root = spec_support_root
19
+
20
+ @ref_path = Gatling::Configuration.reference_image_path = File.join(@spec_support_root, 'ref_path')
21
+ end
22
+
23
+
24
+ after(:each) do
25
+ remove_refs(@ref_path)
26
+ end
27
+
28
+ it 'should initialize and run gatling' do
29
+
30
+ save_element_for_test
31
+
32
+ visit('/')
33
+ @element = page.find(:css, "#smiley")
34
+ @element.should look_like('smiley-faceicon.png')
35
+ end
36
+
37
+ it 'should initialize and run training mode when GATLING_TRAINER is toggled' do
38
+ ENV['GATLING_TRAINER'] = 'true'
39
+
40
+ visit('/')
41
+ @element = page.find(:css, "#smiley")
42
+ @element.should look_like('smiley-faceicon.png')
43
+ File.exists?(File.join(@ref_path,'smiley-faceicon.png')).should be_true
44
+ end
45
+
46
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --require rubygems
3
+ --require rspec/instafail
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,69 @@
1
+ require File.join(File.dirname(__FILE__), '/support/assets/smiley_app')
2
+
3
+ require 'rubygems'
4
+ require 'sinatra'
5
+ Sinatra::Application.environment = :test
6
+ require 'rack/test'
7
+ # require 'spec'
8
+ # require 'spec/autorun'
9
+ # require 'spec/interop/test'
1
10
  require 'capybara'
2
11
  require 'capybara/dsl'
12
+ require 'capybara/rspec'
3
13
  require 'gatling'
4
14
  require 'gatling/matchers/look_like_matcher'
15
+ require 'fileutils'
16
+ require 'gatling/config'
17
+
18
+ RSpec.configure do |config|
19
+ config.color_enabled = true
20
+ config.formatter = 'documentation'
21
+ end
5
22
 
23
+ Capybara.app = Sinatra::Application
6
24
  Capybara.default_driver = :selenium
7
- Capybara.app_host = 'http://www.google.com'
25
+
26
+ def app
27
+ @app ||= Sinatra::Application
28
+ end
29
+
30
+ set :run, false
31
+ set :environment, :test
32
+
33
+ def remove_refs(dir)
34
+ FileUtils.rm_rf dir.to_s
35
+ end
36
+
37
+ def gatling_for_spec(expected)
38
+ visit('/')
39
+ @element = page.find(:css, "#smiley")
40
+
41
+ @gatling = Gatling::Comparison.new(expected, @element)
42
+ end
43
+
44
+ def spec_support_root
45
+ File.join(File.dirname(__FILE__), 'support')
46
+ end
47
+
48
+ def save_element_for_test
49
+ Gatling::Configuration.trainer_toggle = true
50
+ gatling_for_spec('smiley-faceicon.png').matches?
51
+ Gatling::Configuration.trainer_toggle = false
52
+ end
53
+
54
+ def convert_element_to_bad_element(image_file)
55
+ #convert -fill none -stroke black -strokewidth 5 smiley-faceicon.png -draw 'arc 155,25 185,45 180' sad-faceicon.png
56
+ image = Magick::Image.read(image_file).first
57
+ frown = Magick::Draw.new
58
+ frown.stroke('black')
59
+ frown.stroke_width(5)
60
+ frown.fill_opacity(0)
61
+ frown.stroke_opacity(10)
62
+ frown.arc(155,25,185,45,180,0)
63
+ frown.draw(image)
64
+ bad_element = image.write(image_file)
65
+ end
66
+
67
+ #todo: spec folders clean up method
8
68
 
9
69
 
Binary file
@@ -0,0 +1,18 @@
1
+ require 'sinatra'
2
+
3
+ set :app_file, __FILE__
4
+
5
+ set :root, File.expand_path(File.dirname(__FILE__))
6
+ set :static, true
7
+
8
+ get '/' do
9
+ erb :smiley_site
10
+ end
11
+
12
+ get '/root' do
13
+ 'root is ' + settings.root
14
+ end
15
+
16
+ get '/public' do
17
+ 'root is ' + settings.public_directory
18
+ end
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+ <title>The Smiley Site</title>
6
+ <style type="text/css">
7
+ div {width:100%;}
8
+ img
9
+ {
10
+ border:1
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div style="width:340px;text-align:center;float:left;" id="smiley">
16
+ <img src="smiley-faceicon.jpg" alt="Smiley" height="42" width="42" />
17
+ </div>
18
+ </body>
19
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gatling
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-08 00:00:00.000000000Z
12
+ date: 2012-02-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rmagick
16
- requirement: &70326537150080 !ruby/object:Gem::Requirement
16
+ requirement: &70310393557420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70326537150080
24
+ version_requirements: *70310393557420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec-core
27
- requirement: &70326537149540 !ruby/object:Gem::Requirement
27
+ requirement: &70310393556960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70326537149540
35
+ version_requirements: *70310393556960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70326537148820 !ruby/object:Gem::Requirement
38
+ requirement: &70310393556420 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70326537148820
46
+ version_requirements: *70310393556420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: capybara
49
- requirement: &70326537147960 !ruby/object:Gem::Requirement
49
+ requirement: &70310393555900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70326537147960
57
+ version_requirements: *70310393555900
58
58
  description: Add visual comparison matchers for rspec
59
59
  email:
60
60
  - grotbart@gmail.com
@@ -69,15 +69,24 @@ files:
69
69
  - LICENSE.txt
70
70
  - README.rdoc
71
71
  - Rakefile
72
- - gatling-0.0.3.gem
73
72
  - gatling.gemspec
74
73
  - lib/gatling.rb
74
+ - lib/gatling/capture_element.rb
75
+ - lib/gatling/config.rb
75
76
  - lib/gatling/matchers/look_like_matcher.rb
76
77
  - lib/gatling/version.rb
77
78
  - pkg/gatling-0.0.1.gem
79
+ - reports/rspec_unit_test_output.html
78
80
  - spec/configuration_spec.rb
79
81
  - spec/gatling_spec.rb
82
+ - spec/rspec_matcher_spec.rb
83
+ - spec/spec.opts
80
84
  - spec/spec_helper.rb
85
+ - spec/support/assets/public/smiley-faceicon.jpg
86
+ - spec/support/assets/smiley-bad.jpg
87
+ - spec/support/assets/smiley_app.rb
88
+ - spec/support/assets/views/smiley_site.erb
89
+ - spec/support/ready_candidate_ref/smiley-faceicon.png
81
90
  homepage: http://github.com/GabrielRotbart/gatling
82
91
  licenses: []
83
92
  post_install_message:
@@ -98,11 +107,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
107
  version: '0'
99
108
  requirements: []
100
109
  rubyforge_project: gatling
101
- rubygems_version: 1.8.12
110
+ rubygems_version: 1.8.10
102
111
  signing_key:
103
112
  specification_version: 3
104
113
  summary: Automated visual testing
105
114
  test_files:
106
115
  - spec/configuration_spec.rb
107
116
  - spec/gatling_spec.rb
117
+ - spec/rspec_matcher_spec.rb
118
+ - spec/spec.opts
108
119
  - spec/spec_helper.rb
120
+ - spec/support/assets/public/smiley-faceicon.jpg
121
+ - spec/support/assets/smiley-bad.jpg
122
+ - spec/support/assets/smiley_app.rb
123
+ - spec/support/assets/views/smiley_site.erb
124
+ - spec/support/ready_candidate_ref/smiley-faceicon.png