snapshot 0.2.4 → 0.3.0

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: 5fb8551c6c185df8ccba72657f78aed84d5970fc
4
- data.tar.gz: 80bac1bdfc3f0d1f0a682267f781a32416b7a94a
3
+ metadata.gz: 61213c3f96c8204607fbf018d40e57c4c4499a7a
4
+ data.tar.gz: 82488176f7d6e23c45392d2fd424da1929605ee3
5
5
  SHA512:
6
- metadata.gz: bab34e72bc1436f0d5ff95e0acfa78518b87101d9ceed42308233741539de56aa01a0f93614772400ed3d88344ffb7f62ad5cc42ab98e4916eeb892cf66c4215
7
- data.tar.gz: 53ee98138bc60617066898664f37f26a5a252c7ffc635ec826fa54d177249944e4509372a2e7d6e02fcc250ea7d9a8440dbeb9274a77f6996596c22b2c9203c3
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
@@ -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
- while (re['size']['width'] == 10 && re['size']['height'] == 20) {
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 (rect.size.height > 667) {
26
+ if (theSize > 667) {
21
27
  model = "iPhone6Plus";
22
- } else if (rect.size.height == 667) {
28
+ } else if (theSize == 667) {
23
29
  model = "iPhone6";
24
- } else if (rect.size.height == 568){
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
@@ -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 Exception => ex
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, '**/*.png'].join('/')).each do |file|
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
- value = arguments.first || (block.call if block_given?)
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
@@ -1,3 +1,3 @@
1
1
  module Snapshot
2
- VERSION = "0.2.4"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.4
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-14 00:00:00.000000000 Z
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: []