motion-juxtapose 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 164ece95d30c7dc4d2ffa8b9598cd3d6151820a5
4
- data.tar.gz: 79a2467b97e83c21f77841c3901c1b41b0125483
3
+ metadata.gz: 0543dfe3a91b130a2a8faf863307dd63e3ba619d
4
+ data.tar.gz: b12e0a693f99ef3d63eb0a73674f0ab94a232142
5
5
  SHA512:
6
- metadata.gz: db4f4693c8d26620690a2066ab72d0b6f50a2687bf1d99af5bb3f6c9fb47bb7024901153aba953c3ebf100210c044137e7289942aa5bed8b10b1b7cd53eabd9b
7
- data.tar.gz: 04c41f7fab50c2fff3d41b49b27c6228cca9f0850af6ecf9b37011d154810af34990c1bc256d70b02a94c8e4ed971af6be6f1c6825e54d4b01c6cfe73c40128e
6
+ metadata.gz: f676239c5499c311ed923ab84de8aadd96092459db5a563136352be7d828d986bbf336973313d95192910446d3e5f461268976b48782c3ec775c7a353108fd33
7
+ data.tar.gz: 013fe557fbbe9ebdcbc0a8dd1d5920a3fd89d312cca5f140936ec35fe97a989e57f96e96d92e3cf157278c2d4b92dea4c7cc855ec8cc9fc31d7a363767a40736
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ build
data/README.md CHANGED
@@ -76,6 +76,24 @@ Juxtapose comes with a small webapp that you can use to view your screenshot spe
76
76
 
77
77
  To start it, run `bundle exec juxtapose` in the root of your project and browse to localhost:4567.
78
78
 
79
+ ## Release Notes
80
+
81
+ #### v.0.1.1
82
+
83
+ * Raise error if screenshot sizes don't match ([@mdenomy](http://github.com/mdenomy))
84
+ * Bug fix: Differentiate image status by filename, not full path. Fixes #8.
85
+
86
+ #### v.0.1.0
87
+
88
+ * Initial release.
89
+
90
+ ## Contributors
91
+
92
+ * [Joe Lind](http://github.com/joelind)
93
+ * [Thomas Mayfield](http://github.com/thegreatape )
94
+ * [Jeffrey Chupp](http://github.com/semanticart)
95
+ * [Michael Denomy](http://github.com/mdenomy)
96
+
79
97
 
80
98
  ## Contributing
81
99
 
data/Rakefile CHANGED
@@ -1 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift('/Library/RubyMotion/lib')
3
+ require 'motion/project/template/ios'
1
4
  require "bundler/gem_tasks"
5
+ Bundler.setup
6
+ Bundler.require
7
+
8
+ require 'motion-juxtapose'
9
+
10
+ Motion::Project::App.setup do |app|
11
+ app.name = 'juxtapose-tests'
12
+ app.detect_dependencies = false
13
+ end
@@ -0,0 +1,8 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
4
+ @window.rootViewController = TestController.alloc.init
5
+ @window.makeKeyAndVisible
6
+ true
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ class TestController < UIViewController
2
+ def viewDidLoad
3
+ super
4
+ self.view.backgroundColor = UIColor.whiteColor
5
+ @label = UILabel.alloc.initWithFrame(CGRectZero)
6
+ @label.text = "Juxtapose"
7
+ @label.sizeToFit
8
+
9
+ @label.center =
10
+ [self.view.frame.size.width / 2,
11
+ self.view.frame.size.height / 2]
12
+ self.view.addSubview(@label)
13
+ end
14
+ end
@@ -7,7 +7,15 @@ class Image
7
7
  end
8
8
 
9
9
  def accepted?
10
- img.match /accepted/
10
+ File.basename(img).match /accepted/
11
+ end
12
+
13
+ def current?
14
+ File.basename(img).match /current/
15
+ end
16
+
17
+ def diff?
18
+ File.basename(img).match /diff/
11
19
  end
12
20
 
13
21
  def path
@@ -21,15 +21,15 @@ class Spec
21
21
  end
22
22
 
23
23
  def accepted
24
- images.select {|i| i.path =~ /accepted/ }.first
24
+ images.select(&:accepted?).first
25
25
  end
26
26
 
27
27
  def current
28
- images.select {|i| i.path =~ /current/ }.first
28
+ images.select(&:current?).first
29
29
  end
30
30
 
31
31
  def diff
32
- images.select {|i| i.path =~ /diff/ }.first
32
+ images.select(&:diff?).first
33
33
  end
34
34
 
35
35
  def as_json
@@ -23,6 +23,17 @@ describe Spec do
23
23
  ]
24
24
  end
25
25
 
26
+ it "only uses the file name to determine accepted/current/diff status" do
27
+ spec_dir ="#{@specs_dir}/ios7.0/currently_logged_in_user"
28
+ FileUtils.mkdir_p(spec_dir)
29
+
30
+ FileUtils.touch("#{spec_dir}/accepted.png")
31
+
32
+ spec = Spec.new @specs_dir, spec_dir
33
+ expect(spec.current).to be_nil
34
+ expect(spec.accepted.img).to eq("#{spec_dir}/accepted.png")
35
+ end
36
+
26
37
  it "serializes to JSON" do
27
38
  spec_dir ="#{@specs_dir}/ios7.0/user_views_home_screen"
28
39
  FileUtils.mkdir_p(spec_dir)
@@ -95,22 +95,38 @@ module Juxtapose
95
95
 
96
96
  success = true
97
97
  if File.exists? filename(:accepted )
98
- compare_command = "compare -fuzz #{fuzz_factor}% -metric AE -dissimilarity-threshold 1 -subimage-search"
99
- out = `#{compare_command} \"#{filename :current}\" \"#{filename :accepted}\" \"#{filename :diff}\" 2>&1`
100
- out.chomp!
101
- (out == '0').tap do |verified|
102
- if verified
103
- `rm #{filename(:current)}`
104
- `rm #{filename(:diff)}`
105
- else
106
- success = false
107
- end
108
- end
98
+ raise "Screenshots are different sizes" unless same_size?
99
+ success = screenshots_match?
109
100
  else
110
101
  raise "No accepted screen shot for #{filename :accepted}"
111
102
  end
112
103
 
113
104
  success
114
105
  end
106
+
107
+ private
108
+
109
+ def same_size?
110
+ identify_command = "identify -format '%wx%h '"
111
+ out = `#{identify_command} \"#{filename :current}\" \"#{filename :accepted}\" 2>&1`
112
+ sizes = out.split
113
+ sizes.length == 2 && sizes.uniq.length == 1
114
+ end
115
+
116
+ def screenshots_match?
117
+ match = true
118
+ compare_command = "compare -fuzz #{fuzz_factor}% -metric AE -dissimilarity-threshold 1 -subimage-search"
119
+ out = `#{compare_command} \"#{filename :current}\" \"#{filename :accepted}\" \"#{filename :diff}\" 2>&1`
120
+ out.chomp!
121
+ (out == '0').tap do |verified|
122
+ if verified
123
+ `rm #{filename(:current)}`
124
+ `rm #{filename(:diff)}`
125
+ else
126
+ match = false
127
+ end
128
+ end
129
+ match
130
+ end
115
131
  end
116
132
  end
@@ -1,3 +1,3 @@
1
1
  module Juxtapose
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,53 @@
1
+ describe 'screenshot testing under bacon' do
2
+ extend Juxtapose
3
+
4
+ tests TestController
5
+
6
+ it "raises an error when no accepted screenshot is present" do
7
+ error = nil
8
+ begin
9
+ it_should_look_like "no accepted screenshot"
10
+ rescue RuntimeError => e
11
+ error = e
12
+ end
13
+ error.should.not.be.nil
14
+ error.message.should =~ /No accepted screen shot for/
15
+ end
16
+
17
+ it "passes when there is an identical accepted screenshot" do
18
+ it_should_look_like "accepted screenshot"
19
+ end
20
+
21
+ it "raises an error and produces diffs on failure" do
22
+ Dispatch::Queue.main.async do
23
+ view("Juxtapose").text = "Changed!"
24
+ end
25
+
26
+ wait 1.0 do
27
+ error = nil
28
+ begin
29
+ it_should_look_like "going to differ screenshot"
30
+ rescue RuntimeError => e
31
+ error = e
32
+ end
33
+ error.should.not.be.nil
34
+ error.message.should =~ /Screenshot did not match/
35
+
36
+ spec_dir = "spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-raises-an-error-and-produces-diffs-on-failure/going-to-differ-screenshot"
37
+
38
+ File.should.exist(File.join( ENV["RUBYMOTION_PROJECT_DIR"], spec_dir, "current.png"))
39
+ File.should.exist(File.join( ENV["RUBYMOTION_PROJECT_DIR"], spec_dir, "diff.png"))
40
+ end
41
+ end
42
+
43
+ it "raises an error when screens are different sizes" do
44
+ error = nil
45
+ begin
46
+ it_should_look_like "different sized screenshot"
47
+ rescue RuntimeError => e
48
+ error = e
49
+ end
50
+ error.should.not.be.nil
51
+ error.message.should =~ /Screenshots are different sizes/
52
+ end
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-juxtapose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Lind
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-02-14 00:00:00.000000000 Z
13
+ date: 2014-03-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra
@@ -109,6 +109,8 @@ files:
109
109
  - LICENSE.txt
110
110
  - README.md
111
111
  - Rakefile
112
+ - app/app_delegate.rb
113
+ - app/controllers/test_controller.rb
112
114
  - bin/juxtapose
113
115
  - images/diff-view.png
114
116
  - images/initial-view.png
@@ -155,6 +157,10 @@ files:
155
157
  - lib/juxtapose/version.rb
156
158
  - lib/motion-juxtapose.rb
157
159
  - motion-juxtapose.gemspec
160
+ - spec/controllers/test_controller_spec.rb
161
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-passes-when-there-is-an-identical-accepted-screenshot/accepted-screenshot/accepted.png
162
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-raises-an-error-and-produces-diffs-on-failure/going-to-differ-screenshot/accepted.png
163
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-raises-an-error-when-screens-are-different-sizes/different-sized-screenshot/accepted.png
158
164
  homepage: https://github.com/terriblelabs/motion-juxtapose
159
165
  licenses:
160
166
  - MIT
@@ -175,8 +181,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
181
  version: '0'
176
182
  requirements: []
177
183
  rubyforge_project:
178
- rubygems_version: 2.1.11
184
+ rubygems_version: 2.2.2
179
185
  signing_key:
180
186
  specification_version: 4
181
187
  summary: Screenshot-based assertions for RubyMotion projects
182
- test_files: []
188
+ test_files:
189
+ - spec/controllers/test_controller_spec.rb
190
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-passes-when-there-is-an-identical-accepted-screenshot/accepted-screenshot/accepted.png
191
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-raises-an-error-and-produces-diffs-on-failure/going-to-differ-screenshot/accepted.png
192
+ - spec/screens/iphone-retina/ios_7.0.3/screenshot-testing-under-bacon-raises-an-error-when-screens-are-different-sizes/different-sized-screenshot/accepted.png