simulacrum 0.1.1 → 0.3.0

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +9 -0
  3. data/.env.example +2 -0
  4. data/.gitignore +10 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +14 -0
  7. data/.travis.yml +28 -0
  8. data/Gemfile +2 -0
  9. data/README.md +78 -19
  10. data/Rakefile +20 -0
  11. data/examples/README.md +3 -0
  12. data/examples/basic/Gemfile +4 -0
  13. data/examples/basic/README.md +13 -0
  14. data/examples/basic/config.ru +3 -0
  15. data/examples/basic/example_app.rb +7 -0
  16. data/examples/basic/public/button.html +13 -0
  17. data/examples/basic/public/index.html +22 -0
  18. data/examples/basic/public/panel.html +13 -0
  19. data/examples/basic/public/stylesheets/button.css +15 -0
  20. data/examples/basic/public/stylesheets/main.css +3 -0
  21. data/examples/basic/public/stylesheets/normalize.css +425 -0
  22. data/examples/basic/script/start +4 -0
  23. data/examples/basic/spec/simulacrum_helper.rb +9 -0
  24. data/examples/basic/spec/ui/button_spec.rb +10 -0
  25. data/exe/simulacrum +5 -0
  26. data/features/command_line/help.feature +8 -0
  27. data/features/exit_codes/failing.feature +24 -0
  28. data/features/exit_codes/passing.feature +24 -0
  29. data/features/exit_codes/pending.feature +22 -0
  30. data/features/output/candidate.feature +32 -0
  31. data/features/output/diff.feature +5 -0
  32. data/features/step_definitions/dummy_steps.rb +15 -0
  33. data/features/step_definitions/file_steps.rb +19 -0
  34. data/features/support/env.rb +15 -0
  35. data/fixtures/a1.png +0 -0
  36. data/fixtures/app/fixture_app.rb +12 -0
  37. data/fixtures/app/public/images/a1.png +0 -0
  38. data/fixtures/app/public/ui_component.html +10 -0
  39. data/fixtures/app/spec/component_spec.rb +9 -0
  40. data/fixtures/app/spec/simulacrum_helper.rb +37 -0
  41. data/fixtures/app/spec/ui/references/ui_component/test_driver/candidate.png +0 -0
  42. data/fixtures/diff.png +0 -0
  43. data/lib/simulacrum.rb +74 -15
  44. data/lib/simulacrum/cli.rb +38 -0
  45. data/lib/simulacrum/cli/parser.rb +152 -0
  46. data/lib/simulacrum/comparator.rb +15 -15
  47. data/lib/simulacrum/component.rb +22 -11
  48. data/lib/simulacrum/configuration.rb +20 -13
  49. data/lib/simulacrum/diff.rb +2 -0
  50. data/lib/simulacrum/diff/rmagick.rb +8 -6
  51. data/lib/simulacrum/driver.rb +45 -0
  52. data/lib/simulacrum/matchers.rb +6 -16
  53. data/lib/simulacrum/methods.rb +1 -0
  54. data/lib/simulacrum/renderer.rb +23 -8
  55. data/lib/simulacrum/runner.rb +44 -0
  56. data/lib/simulacrum/version.rb +2 -1
  57. data/rubocop-todo.yml +29 -0
  58. data/script/bootstrap +3 -0
  59. data/script/quality +7 -0
  60. data/script/spec +10 -0
  61. data/simulacrum.gemspec +52 -0
  62. data/spec/lib/simulacrum/cli/parser_spec.rb +113 -0
  63. data/spec/lib/simulacrum/cli_spec.rb +18 -0
  64. data/spec/lib/simulacrum/comparator_spec.rb +75 -0
  65. data/spec/lib/simulacrum/component_spec.rb +208 -0
  66. data/spec/lib/simulacrum/driver/local_spec.rb +11 -0
  67. data/spec/lib/simulacrum/version_spec.rb +12 -0
  68. data/spec/lib/simulacrum_spec.rb +53 -0
  69. data/spec/spec_helper.rb +13 -8
  70. data/spec/use_codeclimate.rb +3 -0
  71. data/spec/use_simplecov.rb +5 -12
  72. metadata +217 -32
  73. data/lib/simulacrum/diff/pdiff.rb +0 -47
  74. data/spec/fixtures/a.png +0 -0
  75. data/spec/fixtures/a2.png +0 -0
  76. data/spec/use_coveralls.rb +0 -2
@@ -0,0 +1,208 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'simulacrum/component'
4
+ require 'ostruct'
5
+
6
+ describe Simulacrum::Component do
7
+ let(:name) { 'MyComponent' }
8
+ let(:driver_name) { 'MyDriver' }
9
+ let(:references_path) { 'references' }
10
+ let(:configuration) { OpenStruct.new references_path: references_path }
11
+ let(:options) do
12
+ options = OpenStruct.new
13
+ options.url = 'http://localhost'
14
+ options
15
+ end
16
+ let(:renderer) { double('Simulacrum::Renderer') }
17
+
18
+ subject(:component) { described_class.new(name, options) }
19
+
20
+ before do
21
+ allow(Simulacrum).to receive(:configuration) { configuration }
22
+ allow(Capybara).to receive(:current_driver) { driver_name }
23
+ expect(Simulacrum::Renderer).to receive(:new).with(options.url) { renderer }
24
+ end
25
+
26
+ describe '#render' do
27
+ subject { component.render }
28
+
29
+ before do
30
+ configuration.candidate_filename = 'candidate'
31
+ expect(FileUtils).to receive(:mkdir_p).with('references/MyComponent/MyDriver')
32
+ expect(renderer).to receive(:render) { '/tmp/rendered_component.png' }
33
+ expect(FileUtils).to receive(:mv).with('/tmp/rendered_component.png', 'references/MyComponent/MyDriver/candidate.png')
34
+ expect(renderer).to receive(:cleanup)
35
+ end
36
+
37
+ it { is_expected.to eq(true) }
38
+
39
+ describe 'when a selector is set the candidate is cropped' do
40
+ let(:capture_selector) { '.widget' }
41
+ let(:images) { double }
42
+ let(:image) { double('Magick::Image') }
43
+ let(:selector_bounds) { [0, 0, 100, 100] }
44
+
45
+ before do
46
+ options.capture_selector = capture_selector
47
+ expect(Magick::Image).to receive(:read).with('references/MyComponent/MyDriver/candidate.png') { images }
48
+ expect(images).to receive(:first) { image }
49
+ expect(renderer).to receive(:get_bounds_for_selector).with(capture_selector) { selector_bounds }
50
+ expect(image).to receive(:crop!).with(*selector_bounds)
51
+ expect(image).to receive(:write).with('references/MyComponent/MyDriver/candidate.png')
52
+ end
53
+
54
+ it { is_expected.to eq(true) }
55
+ end
56
+ end
57
+
58
+ describe '#reference?' do
59
+ let(:reference_filename) { 'reference' }
60
+ subject { component.reference? }
61
+
62
+ before do
63
+ configuration.reference_filename = reference_filename
64
+ end
65
+
66
+ it { is_expected.to eq(false) }
67
+
68
+ context 'when a reference image exists' do
69
+ before do
70
+ expect(File).to receive(:exist?).with('references/MyComponent/MyDriver/reference.png') { true }
71
+ end
72
+
73
+ it { is_expected.to eq(true) }
74
+ end
75
+ end
76
+
77
+ describe '#candidate?' do
78
+ let(:candidate_filename) { 'candidate' }
79
+ subject { component.candidate? }
80
+
81
+ before(:each) do
82
+ configuration.candidate_filename = 'candidate'
83
+ end
84
+
85
+ it { is_expected.to eq(false) }
86
+
87
+ context 'when a candidate image exists' do
88
+ before(:each) do
89
+ allow(File).to receive(:exist?).with('references/MyComponent/MyDriver/candidate.png') { true }
90
+ end
91
+
92
+ it { is_expected.to eq(true) }
93
+ end
94
+ end
95
+
96
+ describe '#diff?' do
97
+ let(:diff_filename) { 'diff' }
98
+ subject { component.diff? }
99
+
100
+ before(:each) do
101
+ configuration.diff_filename = diff_filename
102
+ end
103
+
104
+ it { is_expected.to eq(false) }
105
+
106
+ context 'when a diff image exists' do
107
+ before(:each) do
108
+ expect(File).to receive(:exist?).with('references/MyComponent/MyDriver/diff.png') { true }
109
+ end
110
+
111
+ it { is_expected.to eq(true) }
112
+ end
113
+ end
114
+
115
+ describe '#delta_threshold' do
116
+ subject { component.delta_threshold }
117
+
118
+ let(:configuration) { OpenStruct.new delta_threshold: 99 }
119
+
120
+ it { is_expected.to eq(99) }
121
+
122
+ context 'when the delta_threshold option has been passed in' do
123
+ let(:options) { Struct.new(:url, :delta_threshold).new('http://localhost', 1) }
124
+
125
+ it 'uses the option value' do
126
+ is_expected.to eq(1)
127
+ end
128
+ end
129
+ end
130
+
131
+ describe '#reference_path' do
132
+ subject { component.reference_path }
133
+
134
+ before do
135
+ configuration.reference_filename = 'reference'
136
+ end
137
+
138
+ it { is_expected.to eq('references/MyComponent/MyDriver/reference.png') }
139
+ end
140
+
141
+ describe '#candidate_path' do
142
+ subject { component.candidate_path }
143
+
144
+ before do
145
+ configuration.candidate_filename = 'candidate'
146
+ end
147
+
148
+ it { is_expected.to eq('references/MyComponent/MyDriver/candidate.png') }
149
+ end
150
+
151
+ describe '#diff_path' do
152
+ subject { component.diff_path }
153
+
154
+ before do
155
+ configuration.diff_filename = 'diff'
156
+ end
157
+
158
+ it { is_expected.to eq('references/MyComponent/MyDriver/diff.png') }
159
+ end
160
+
161
+ describe '#remove_candidate' do
162
+ subject { component.remove_candidate }
163
+
164
+ before do
165
+ expect(File).to receive(:exist?) { has_candidate }
166
+ end
167
+
168
+ context 'when a candidate exists' do
169
+ let(:has_candidate) { true }
170
+
171
+ before do
172
+ expect(FileUtils).to receive(:rm)
173
+ end
174
+
175
+ it { is_expected.to be_nil }
176
+ end
177
+
178
+ context 'when there is no candidate exists' do
179
+ let(:has_candidate) { false }
180
+
181
+ it { is_expected.to be_nil }
182
+ end
183
+ end
184
+
185
+ describe '#remove_diff' do
186
+ subject { component.remove_diff }
187
+
188
+ before do
189
+ expect(File).to receive(:exist?) { has_diff }
190
+ end
191
+
192
+ context 'when a diff exists' do
193
+ let(:has_diff) { true }
194
+
195
+ before do
196
+ expect(FileUtils).to receive(:rm)
197
+ end
198
+
199
+ it { is_expected.to be_nil }
200
+ end
201
+
202
+ context 'when there is no diff exists' do
203
+ let(:has_diff) { false }
204
+
205
+ it { is_expected.to be_nil }
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'simulacrum/driver'
4
+
5
+ describe Simulacrum::Driver do
6
+ describe '.use' do
7
+ subject { described_class.use }
8
+
9
+ it { is_expected.to be_a described_class }
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: UTF-8
2
+ require 'simulacrum/version'
3
+
4
+ describe Simulacrum do
5
+ describe 'PACKAGE' do
6
+ it { expect(Simulacrum::PACKAGE).to eq('simulacrum') }
7
+ end
8
+
9
+ describe 'VERSION' do
10
+ it { expect(Simulacrum::VERSION).to eq('0.3.0') }
11
+ end
12
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+ require 'simulacrum'
4
+
5
+ describe Simulacrum do
6
+ let(:driver) { double }
7
+ let(:current_browser) { double }
8
+ let(:configuration) { double }
9
+
10
+ describe '.components' do
11
+ pending
12
+ end
13
+
14
+ describe '.configuration' do
15
+ pending
16
+ end
17
+
18
+ describe '.runner_options' do
19
+ pending
20
+ end
21
+
22
+ describe '.root' do
23
+ pending
24
+ end
25
+
26
+ describe '.run' do
27
+ pending
28
+ end
29
+
30
+ describe '.configure' do
31
+ pending
32
+ end
33
+
34
+ describe '.included' do
35
+ pending
36
+ end
37
+
38
+ describe '.config_file' do
39
+ pending
40
+ end
41
+
42
+ describe '.config_file?' do
43
+ pending
44
+ end
45
+
46
+ describe '.config_file_path' do
47
+ pending
48
+ end
49
+
50
+ describe '.configure_runner' do
51
+ pending
52
+ end
53
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,17 @@
1
- if ENV['COVERAGE']
2
- require_relative 'use_coveralls' if ENV['TRAVIS']
3
- require_relative 'use_simplecov' unless ENV['TRAVIS']
4
- end
5
-
1
+ # encoding: UTF-8
2
+ require 'use_codeclimate'
3
+ require 'use_simplecov'
6
4
  require 'bundler/setup'
7
- require 'Simulacrum'
8
- require 'rspec/autorun'
5
+ require 'simulacrum'
9
6
 
10
7
  RSpec.configure do |config|
11
- config.order = "random"
8
+ config.order = 'random'
9
+
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :expect
12
+ end
13
+
14
+ config.mock_with :rspec do |c|
15
+ c.syntax = :expect
16
+ end
12
17
  end
@@ -0,0 +1,3 @@
1
+ # encoding: UTF-8
2
+ require 'codeclimate-test-reporter'
3
+ CodeClimate::TestReporter.start
@@ -1,14 +1,7 @@
1
- puts "[Simplecov] enabled"
1
+ # encoding: UTF-8
2
+ puts '[Simplecov] enabled'
2
3
  require 'simplecov'
3
4
 
4
- class SimpleCov::Formatter::QualityFormatter
5
- def format(result)
6
- SimpleCov::Formatter::HTMLFormatter.new.format(result)
7
- File.open("coverage/covered_percent", "w") do |f|
8
- f.puts result.source_files.covered_percent.to_f
9
- end
10
- end
11
- end
12
-
13
- SimpleCov.formatter = SimpleCov::Formatter::QualityFormatter
14
- SimpleCov.start
5
+ SimpleCov.minimum_coverage 53
6
+ SimpleCov.refuse_coverage_drop
7
+ SimpleCov.start { add_filter '/spec/' }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simulacrum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Morris
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2014-03-31 00:00:00.000000000 Z
11
+ date: 2014-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -16,58 +16,58 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 2.2.1
19
+ version: 2.4.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 2.2.1
26
+ version: 2.4.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: rmagick
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 2.14.1
33
+ version: 2.13.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 2.14.1
40
+ version: 2.13.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: rmagick
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
- version: 2.13.2
47
+ version: 2.14.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 2.13.2
54
+ version: 2.14.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: selenium-webdriver
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 2.40.0
61
+ version: 2.42.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 2.40.0
68
+ version: 2.42.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: coveralls
70
+ name: appraisal
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: pry
84
+ name: aruba
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '>='
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: rake
98
+ name: cane
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rspec-nc
112
+ name: codeclimate-test-reporter
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '>='
@@ -123,7 +123,21 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: rubocop
126
+ name: cucumber
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - '>='
@@ -136,6 +150,90 @@ dependencies:
136
150
  - - '>='
137
151
  - !ruby/object:Gem::Version
138
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 3.0.0
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: 3.0.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ~>
186
+ - !ruby/object:Gem::Version
187
+ version: 0.20.1
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ~>
193
+ - !ruby/object:Gem::Version
194
+ version: 0.20.1
195
+ - !ruby/object:Gem::Dependency
196
+ name: sauce
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ~>
200
+ - !ruby/object:Gem::Version
201
+ version: 3.4.8
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ~>
207
+ - !ruby/object:Gem::Version
208
+ version: 3.4.8
209
+ - !ruby/object:Gem::Dependency
210
+ name: sauce-connect
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ~>
214
+ - !ruby/object:Gem::Version
215
+ version: 3.4.1
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ~>
221
+ - !ruby/object:Gem::Version
222
+ version: 3.4.1
223
+ - !ruby/object:Gem::Dependency
224
+ name: sauce-cucumber
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ~>
228
+ - !ruby/object:Gem::Version
229
+ version: 3.4.0
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ~>
235
+ - !ruby/object:Gem::Version
236
+ version: 3.4.0
139
237
  - !ruby/object:Gem::Dependency
140
238
  name: shoulda-matchers
141
239
  requirement: !ruby/object:Gem::Requirement
@@ -164,31 +262,113 @@ dependencies:
164
262
  - - '>='
165
263
  - !ruby/object:Gem::Version
166
264
  version: '0'
167
- description: An opinionated UI component regression testing tool built to be tightly
168
- integrated with RSpec, Selenium and tools you already use.
265
+ - !ruby/object:Gem::Dependency
266
+ name: sinatra
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '>='
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - '>='
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: dotenv
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - '>='
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ description: "\n An opinionated UI component regression testing tool built to be
294
+ tightly\n integrated with RSpec, Selenium and tools you already use.\n "
169
295
  email:
170
296
  - desk@pixelbloom.com
171
- executables: []
297
+ executables:
298
+ - simulacrum
172
299
  extensions: []
173
300
  extra_rdoc_files: []
174
301
  files:
302
+ - .cane
303
+ - .env.example
304
+ - .gitignore
305
+ - .rspec
306
+ - .rubocop.yml
307
+ - .travis.yml
308
+ - Gemfile
175
309
  - LICENSE
176
310
  - README.md
311
+ - Rakefile
312
+ - examples/README.md
313
+ - examples/basic/Gemfile
314
+ - examples/basic/README.md
315
+ - examples/basic/config.ru
316
+ - examples/basic/example_app.rb
317
+ - examples/basic/public/button.html
318
+ - examples/basic/public/index.html
319
+ - examples/basic/public/panel.html
320
+ - examples/basic/public/stylesheets/button.css
321
+ - examples/basic/public/stylesheets/main.css
322
+ - examples/basic/public/stylesheets/normalize.css
323
+ - examples/basic/script/start
324
+ - examples/basic/spec/simulacrum_helper.rb
325
+ - examples/basic/spec/ui/button_spec.rb
326
+ - exe/simulacrum
327
+ - features/command_line/help.feature
328
+ - features/exit_codes/failing.feature
329
+ - features/exit_codes/passing.feature
330
+ - features/exit_codes/pending.feature
331
+ - features/output/candidate.feature
332
+ - features/output/diff.feature
333
+ - features/step_definitions/dummy_steps.rb
334
+ - features/step_definitions/file_steps.rb
335
+ - features/support/env.rb
336
+ - fixtures/a1.png
337
+ - fixtures/app/fixture_app.rb
338
+ - fixtures/app/public/images/a1.png
339
+ - fixtures/app/public/ui_component.html
340
+ - fixtures/app/spec/component_spec.rb
341
+ - fixtures/app/spec/simulacrum_helper.rb
342
+ - fixtures/app/spec/ui/references/ui_component/test_driver/candidate.png
343
+ - fixtures/diff.png
177
344
  - lib/simulacrum.rb
345
+ - lib/simulacrum/cli.rb
346
+ - lib/simulacrum/cli/parser.rb
178
347
  - lib/simulacrum/comparator.rb
179
348
  - lib/simulacrum/component.rb
180
349
  - lib/simulacrum/configuration.rb
181
350
  - lib/simulacrum/diff.rb
182
- - lib/simulacrum/diff/pdiff.rb
183
351
  - lib/simulacrum/diff/rmagick.rb
352
+ - lib/simulacrum/driver.rb
184
353
  - lib/simulacrum/matchers.rb
185
354
  - lib/simulacrum/methods.rb
186
355
  - lib/simulacrum/renderer.rb
356
+ - lib/simulacrum/runner.rb
187
357
  - lib/simulacrum/version.rb
188
- - spec/fixtures/a.png
189
- - spec/fixtures/a2.png
358
+ - rubocop-todo.yml
359
+ - script/bootstrap
360
+ - script/quality
361
+ - script/spec
362
+ - simulacrum.gemspec
363
+ - spec/lib/simulacrum/cli/parser_spec.rb
364
+ - spec/lib/simulacrum/cli_spec.rb
365
+ - spec/lib/simulacrum/comparator_spec.rb
366
+ - spec/lib/simulacrum/component_spec.rb
367
+ - spec/lib/simulacrum/driver/local_spec.rb
368
+ - spec/lib/simulacrum/version_spec.rb
369
+ - spec/lib/simulacrum_spec.rb
190
370
  - spec/spec_helper.rb
191
- - spec/use_coveralls.rb
371
+ - spec/use_codeclimate.rb
192
372
  - spec/use_simplecov.rb
193
373
  homepage: https://github.com/plasticine/simulacrum
194
374
  licenses:
@@ -202,7 +382,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
382
  requirements:
203
383
  - - '>='
204
384
  - !ruby/object:Gem::Version
205
- version: '0'
385
+ version: 1.9.3
206
386
  required_rubygems_version: !ruby/object:Gem::Requirement
207
387
  requirements:
208
388
  - - '>='
@@ -210,13 +390,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
390
  version: '0'
211
391
  requirements: []
212
392
  rubyforge_project:
213
- rubygems_version: 2.2.2
393
+ rubygems_version: 2.0.14
214
394
  signing_key:
215
395
  specification_version: 4
216
396
  summary: A gem for visually testing and inspecting user interface components.
217
397
  test_files:
218
- - spec/fixtures/a.png
219
- - spec/fixtures/a2.png
398
+ - spec/lib/simulacrum/cli/parser_spec.rb
399
+ - spec/lib/simulacrum/cli_spec.rb
400
+ - spec/lib/simulacrum/comparator_spec.rb
401
+ - spec/lib/simulacrum/component_spec.rb
402
+ - spec/lib/simulacrum/driver/local_spec.rb
403
+ - spec/lib/simulacrum/version_spec.rb
404
+ - spec/lib/simulacrum_spec.rb
220
405
  - spec/spec_helper.rb
221
- - spec/use_coveralls.rb
406
+ - spec/use_codeclimate.rb
222
407
  - spec/use_simplecov.rb