snapshot 0.2.4 → 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.
- checksums.yaml +4 -4
- data/README.md +33 -0
- data/lib/assets/SnapfileTemplate +22 -1
- data/lib/assets/SnapshotHelper.js +11 -5
- data/lib/snapshot/dependency_checker.rb +7 -0
- data/lib/snapshot/runner.rb +9 -2
- data/lib/snapshot/screenshot_flatten.rb +4 -1
- data/lib/snapshot/snapshot_config.rb +19 -0
- data/lib/snapshot/snapshot_file.rb +10 -1
- data/lib/snapshot/version.rb +1 -1
- metadata +26 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61213c3f96c8204607fbf018d40e57c4c4499a7a
|
4
|
+
data.tar.gz: 82488176f7d6e23c45392d2fd424da1929605ee3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f02b63a85ef1840d80ca11f0498aae358e6b94b86d5df05a2800b293dda4f38124388a203343ef3f523b4dfc608847da547b8a0a1437baae559319e1f8d2b084
|
7
|
+
data.tar.gz: c5ecae81b1c0f848b3605436b95e58718b74e5b23798aad679feafa99d832f393fffecd4b9a0518c3cb5635235acd5a8a31077464bb1825b6c1ef1f010d1e680
|
data/README.md
CHANGED
@@ -167,12 +167,14 @@ To not be asked which scheme to use, just set it like this:
|
|
167
167
|
```ruby
|
168
168
|
scheme "Name"
|
169
169
|
```
|
170
|
+
You can also use the environment variable ```SNAPSHOT_SCHEME```.
|
170
171
|
|
171
172
|
### Screenshots output path
|
172
173
|
All generated screenshots will be stored in the given path.
|
173
174
|
```ruby
|
174
175
|
screenshots_path './screenshots'
|
175
176
|
```
|
177
|
+
You can also use the environment variable ```SNAPSHOT_SCREENSHOTS_PATH```.
|
176
178
|
|
177
179
|
### Project Path
|
178
180
|
By default, ```snapshot``` will look for your project in the current directory. If it is located somewhere else, pass your custom path:
|
@@ -198,6 +200,37 @@ If for some reason, the default build command does not work for your project, yo
|
|
198
200
|
|
199
201
|
**Make sure** you are setting the output path to ```/tmp/snapshot```.
|
200
202
|
|
203
|
+
```ruby
|
204
|
+
build_command "xcodebuild DSTROOT='/tmp/snapshot' OBJROOT='/tmp/snapshot' SYMROOT='/tmp/snapshot' ... "
|
205
|
+
```
|
206
|
+
|
207
|
+
### Custom callbacks to prepare your app
|
208
|
+
Run your own script when ```snapshot``` switches the simulator type or the language.
|
209
|
+
This can be used to
|
210
|
+
- Logout the user
|
211
|
+
- Reset all user defaults
|
212
|
+
- Pre-fill the database
|
213
|
+
|
214
|
+
To run a shell script, just use ```system('./script.sh')```.
|
215
|
+
```ruby
|
216
|
+
setup_for_device_change do |device|
|
217
|
+
puts "Preparing device: #{device}"
|
218
|
+
end
|
219
|
+
|
220
|
+
setup_for_language_change do |lang, device|
|
221
|
+
puts "Running #{lang} on #{device}"
|
222
|
+
system("./popuplateDatabase.sh")
|
223
|
+
end
|
224
|
+
|
225
|
+
teardown_language do |lang, device|
|
226
|
+
puts "Finished with #{lang} on #{device}"
|
227
|
+
end
|
228
|
+
|
229
|
+
teardown_device do |device|
|
230
|
+
puts "Cleaning device #{device}"
|
231
|
+
system("./cleanup.sh")
|
232
|
+
end
|
233
|
+
```
|
201
234
|
|
202
235
|
# Tips
|
203
236
|
## Available language codes
|
data/lib/assets/SnapfileTemplate
CHANGED
@@ -30,4 +30,25 @@ screenshots_path "./screenshots"
|
|
30
30
|
# ios_version '8.1'
|
31
31
|
|
32
32
|
# The path, on which the HTML file should be exported to
|
33
|
-
# html_path './screenshots.html'
|
33
|
+
# html_path './screenshots.html'
|
34
|
+
|
35
|
+
|
36
|
+
# Custom Callbacks
|
37
|
+
|
38
|
+
# setup_for_device_change do |device|
|
39
|
+
# puts "Preparing device: #{device}"
|
40
|
+
# end
|
41
|
+
|
42
|
+
# setup_for_language_change do |lang, device|
|
43
|
+
# puts "Running #{lang} on #{device}"
|
44
|
+
# system("./popuplateDatabase.sh")
|
45
|
+
# end
|
46
|
+
|
47
|
+
# teardown_language do |lang, device|
|
48
|
+
# puts "Finished with #{lang} on #{device}"
|
49
|
+
# end
|
50
|
+
|
51
|
+
# teardown_device do |device|
|
52
|
+
# puts "Cleaning device #{device}"
|
53
|
+
# system("./cleanup.sh")
|
54
|
+
# end
|
@@ -1,10 +1,14 @@
|
|
1
1
|
function wait_for_loading_indicator_to_be_finished()
|
2
2
|
{
|
3
3
|
re = UIATarget.localTarget().frontMostApp().statusBar().elements()[2].rect()
|
4
|
-
|
4
|
+
re2 = UIATarget.localTarget().frontMostApp().statusBar().elements()[3].rect()
|
5
|
+
while ((re['size']['width'] == 10 && re['size']['height'] == 20) ||
|
6
|
+
(re2['size']['width'] == 10 && re2['size']['height'] == 20))
|
7
|
+
{
|
5
8
|
UIALogger.logMessage("Loading indicator is visible... waiting")
|
6
9
|
UIATarget.localTarget().delay(1)
|
7
10
|
re = UIATarget.localTarget().frontMostApp().statusBar().elements()[2].rect()
|
11
|
+
re2 = UIATarget.localTarget().frontMostApp().statusBar().elements()[3].rect()
|
8
12
|
}
|
9
13
|
}
|
10
14
|
|
@@ -14,14 +18,16 @@ function captureLocalizedScreenshot(name) {
|
|
14
18
|
var target = UIATarget.localTarget();
|
15
19
|
var model = target.model();
|
16
20
|
var rect = target.rect();
|
21
|
+
|
22
|
+
var theSize = (rect.size.width > rect.size.height) ? rect.size.width.toFixed() : rect.size.height.toFixed();
|
17
23
|
|
18
24
|
if (model.match(/iPhone/))
|
19
25
|
{
|
20
|
-
if (
|
26
|
+
if (theSize > 667) {
|
21
27
|
model = "iPhone6Plus";
|
22
|
-
} else if (
|
28
|
+
} else if (theSize == 667) {
|
23
29
|
model = "iPhone6";
|
24
|
-
} else if (
|
30
|
+
} else if (theSize == 568){
|
25
31
|
model = "iPhone5";
|
26
32
|
} else {
|
27
33
|
model = "iPhone4";
|
@@ -40,4 +46,4 @@ function captureLocalizedScreenshot(name) {
|
|
40
46
|
|
41
47
|
var parts = [language, model, orientation, name];
|
42
48
|
target.captureScreenWithName(parts.join("-"));
|
43
|
-
}
|
49
|
+
}
|
@@ -4,6 +4,7 @@ module Snapshot
|
|
4
4
|
self.check_xcode_select
|
5
5
|
self.check_simulators
|
6
6
|
self.check_xctool
|
7
|
+
self.check_for_automation_subfolder
|
7
8
|
end
|
8
9
|
|
9
10
|
def self.check_xcode_select
|
@@ -41,5 +42,11 @@ module Snapshot
|
|
41
42
|
Helper.log.error '#############################################################'
|
42
43
|
end
|
43
44
|
end
|
45
|
+
|
46
|
+
def self.check_for_automation_subfolder
|
47
|
+
if File.directory?"./Automation" or File.exists?"./Automation"
|
48
|
+
raise "Seems like you have an 'Automation' folder in the current directory. You need to delete/rename it!".red
|
49
|
+
end
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
data/lib/snapshot/runner.rb
CHANGED
@@ -16,16 +16,23 @@ module Snapshot
|
|
16
16
|
counter = 0
|
17
17
|
errors = []
|
18
18
|
SnapshotConfig.shared_instance.devices.each do |device|
|
19
|
+
|
20
|
+
SnapshotConfig.shared_instance.blocks[:setup_for_device_change].call(device) # Callback
|
21
|
+
|
19
22
|
SnapshotConfig.shared_instance.languages.each do |language|
|
23
|
+
SnapshotConfig.shared_instance.blocks[:setup_for_language_change].call(language, device) # Callback
|
20
24
|
|
21
25
|
begin
|
22
26
|
errors.concat(run_tests(device, language))
|
23
27
|
counter += copy_screenshots(language)
|
24
|
-
rescue
|
28
|
+
rescue SystemExit, Interrupt => ex
|
29
|
+
raise ex # system interrupted exception (Strg + C)
|
30
|
+
rescue StandardError => ex
|
25
31
|
Helper.log.error(ex)
|
26
32
|
end
|
27
|
-
|
33
|
+
SnapshotConfig.shared_instance.blocks[:teardown_language].call(language, device) # Callback
|
28
34
|
end
|
35
|
+
SnapshotConfig.shared_instance.blocks[:teardown_device].call(device) # Callback
|
29
36
|
end
|
30
37
|
|
31
38
|
ReportsGenerator.new.generate
|
@@ -3,6 +3,7 @@ module Snapshot
|
|
3
3
|
class ScreenshotFlatten
|
4
4
|
# @param (String) The path in which the screenshots are located in
|
5
5
|
def run(path)
|
6
|
+
Helper.log.info "Going to remove the alpha channel from generated png files"
|
6
7
|
if image_magick_installed?
|
7
8
|
flatten(path)
|
8
9
|
else
|
@@ -13,9 +14,11 @@ module Snapshot
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def flatten(path)
|
16
|
-
Dir.glob([path, '
|
17
|
+
Dir.glob([path, '/**/*.png'].join('/')).each do |file|
|
18
|
+
Helper.log.info "Removing alpha channel from '#{file}'"
|
17
19
|
`convert -flatten '#{file}' -alpha off -alpha remove '#{file}'`
|
18
20
|
end
|
21
|
+
Helper.log.info "Finished removing the alpha channel."
|
19
22
|
end
|
20
23
|
|
21
24
|
def image_magick_installed?
|
@@ -31,6 +31,9 @@ module Snapshot
|
|
31
31
|
# @return (String) The build command, wich should build the app to '/tmp/snapshot'
|
32
32
|
attr_accessor :build_command
|
33
33
|
|
34
|
+
# @return (Hash) All the blocks, which are called on specific actions
|
35
|
+
attr_accessor :blocks
|
36
|
+
|
34
37
|
|
35
38
|
# A shared singleton
|
36
39
|
def self.shared_instance
|
@@ -46,6 +49,8 @@ module Snapshot
|
|
46
49
|
else
|
47
50
|
Helper.log.error "Could not find './Snapfile'. It is recommended to create a file using 'snapshot init' into the current directory. Using the defaults now."
|
48
51
|
end
|
52
|
+
|
53
|
+
load_env
|
49
54
|
end
|
50
55
|
|
51
56
|
def set_defaults
|
@@ -69,6 +74,20 @@ module Snapshot
|
|
69
74
|
self.project_path ||= (Dir.glob("./*.xcodeproj").first rescue nil)
|
70
75
|
|
71
76
|
self.html_path = './screenshots.html'
|
77
|
+
|
78
|
+
empty = Proc.new {}
|
79
|
+
self.blocks = {
|
80
|
+
setup_for_device_change: empty,
|
81
|
+
teardown_device: empty,
|
82
|
+
setup_for_language_change: empty,
|
83
|
+
teardown_language: empty
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def load_env
|
88
|
+
# Load environment variables
|
89
|
+
self.manual_scheme = ENV["SNAPSHOT_SCHEME"] if ENV["SNAPSHOT_SCHEME"]
|
90
|
+
self.screenshots_path = ENV["SNAPSHOT_SCREENSHOTS_PATH"] if ENV["SNAPSHOT_SCREENSHOTS_PATH"]
|
72
91
|
end
|
73
92
|
|
74
93
|
# Getters
|
@@ -16,7 +16,11 @@ module Snapshot
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def method_missing(method_sym, *arguments, &block)
|
19
|
-
|
19
|
+
if ["setup", "teardown"].any?{|a| method_sym.to_s.include?a }
|
20
|
+
value = nil # this is a block
|
21
|
+
else
|
22
|
+
value = arguments.first || (block.call if block_given?) # this is either a block or a value
|
23
|
+
end
|
20
24
|
|
21
25
|
case method_sym
|
22
26
|
when :devices
|
@@ -51,6 +55,11 @@ module Snapshot
|
|
51
55
|
else
|
52
56
|
raise "The given project_path '#{value}' could not be found. Make sure to include the extension as well.".red
|
53
57
|
end
|
58
|
+
|
59
|
+
# Blocks
|
60
|
+
when :setup_for_device_change, :teardown_device, :setup_for_language_change, :teardown_language
|
61
|
+
raise "#{method_sym} needs to have a block provided." unless block_given?
|
62
|
+
@config.blocks[method_sym] = block
|
54
63
|
else
|
55
64
|
Helper.log.error "Unknown method #{method_sym}"
|
56
65
|
end
|
data/lib/snapshot/version.rb
CHANGED
metadata
CHANGED
@@ -1,167 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snapshot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
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
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.6.21
|
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
40
|
version: 1.6.21
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: colored
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
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
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: commander
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 4.2.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
68
|
version: 4.2.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: fastimage
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.6.3
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.6.3
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ~>
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 3.1.0
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 3.1.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: pry
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - '>='
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - '>='
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: yard
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ~>
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: 0.8.7.4
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ~>
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 0.8.7.4
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: codeclimate-test-reporter
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - '>='
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - '>='
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
description: Take the pain out of taking iOS app screenshots.
|
@@ -202,12 +202,12 @@ require_paths:
|
|
202
202
|
- lib
|
203
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|
204
204
|
requirements:
|
205
|
-
- -
|
205
|
+
- - '>='
|
206
206
|
- !ruby/object:Gem::Version
|
207
207
|
version: 2.0.0
|
208
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
|
-
- -
|
210
|
+
- - '>='
|
211
211
|
- !ruby/object:Gem::Version
|
212
212
|
version: '0'
|
213
213
|
requirements: []
|