bwoken 2.0.0.beta.1 → 2.0.0.beta.2
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/README.md +48 -10
- data/bin/unix_instruments.sh +5 -4
- data/lib/bwoken.rb +14 -2
- data/lib/bwoken/cli.rb +4 -0
- data/lib/bwoken/cli/init.rb +15 -13
- data/lib/bwoken/cli/templates/{integration/coffeescript → coffeescript}/ipad/example.coffee +0 -0
- data/lib/bwoken/cli/templates/{integration/coffeescript → coffeescript}/iphone/example.coffee +0 -0
- data/lib/bwoken/cli/templates/{integration/javascript → javascript}/example_vendor.js +0 -0
- data/lib/bwoken/cli/test.rb +22 -14
- data/lib/bwoken/script.rb +7 -7
- data/lib/bwoken/simulator.rb +1 -1
- data/lib/bwoken/version.rb +1 -1
- metadata +5 -10
data/README.md
CHANGED
@@ -22,6 +22,29 @@ $ bwoken test --focus some_test # runs this test on (iphone and ipad) OR (connec
|
|
22
22
|
$ bwoken test --focus some_test --family iphone
|
23
23
|
</code></pre>
|
24
24
|
|
25
|
+
### structuring your test files
|
26
|
+
To add new coffeescript test, add those file to the /integration/coffeescript/iphone or /integration/coffeescript/ipad folder.
|
27
|
+
To add new javascript test, if the iphone and ipad folder don't exist in the /integration/javascript forlder, create them.
|
28
|
+
Then copy your test file inside those folder depending on your target.
|
29
|
+
Your file hierarchy should look something like this
|
30
|
+
<pre><code>
|
31
|
+
| integration
|
32
|
+
| coffeescript
|
33
|
+
| iphone
|
34
|
+
| exemple.coffee
|
35
|
+
| ipad
|
36
|
+
| example.coffee
|
37
|
+
| javascript
|
38
|
+
| iphone
|
39
|
+
| myTest.js
|
40
|
+
| ipad
|
41
|
+
| myiPadtest.js
|
42
|
+
|tmp
|
43
|
+
</code></pre>
|
44
|
+
|
45
|
+
Note that your test scripts inside the coffeescript and javascript folder will be copied to their equivalent folder in the /tmp folder(ie: /tmp/javascript/iphone/myTest.js),
|
46
|
+
so all your import statement should be relative to that location (ie: #import "../filetoImport.js" for file in the javascript folder)
|
47
|
+
|
25
48
|
### Simulator or Device?
|
26
49
|
|
27
50
|
To run bwoken tests on your device, just plug it in! And if you want to run tests in the simulator, just unplug it!
|
@@ -80,15 +103,17 @@ Here's a list of all the switches that bwoken takes for the `test` command:
|
|
80
103
|
<pre><code>
|
81
104
|
$ bwoken test -h
|
82
105
|
[...]
|
83
|
-
--simulator
|
84
|
-
--family
|
85
|
-
--scheme
|
86
|
-
--
|
87
|
-
--
|
88
|
-
--
|
89
|
-
--
|
90
|
-
--
|
91
|
-
|
106
|
+
--simulator Use simulator, even when an iDevice is connected
|
107
|
+
--family Test only one device type, either ipad or iphone. Default is to test on both
|
108
|
+
--scheme Specify a custom scheme
|
109
|
+
--product-name Specify a custom product name (e.g. --product-name="My Product"). Default is the name of of the xcodeproj file
|
110
|
+
--integration-path Specify a custom directory to store your test scripts in (e.g. --integration-path=uiautomation/path/dir). Note that this folder still expects the same directory structure as the one create by `bwoken init`.
|
111
|
+
--formatter Specify a custom formatter (e.g., --formatter=passthru)
|
112
|
+
--focus Specify particular tests to run
|
113
|
+
--clobber Remove any generated file
|
114
|
+
--skip-build Do not build the iOS binary
|
115
|
+
--verbose Be verbose
|
116
|
+
-h, --help Display this help message.
|
92
117
|
</code></pre>
|
93
118
|
|
94
119
|
## In Your Code
|
@@ -149,7 +174,7 @@ $ bundle init
|
|
149
174
|
|
150
175
|
This will create a <code>Gemfile</code>. Add bwoken to it and bundle:
|
151
176
|
|
152
|
-
<pre><code>$ echo "gem 'bwoken'" >> Gemfile
|
177
|
+
<pre><code>$ echo "gem 'bwoken', '2.0.0.beta.1'" >> Gemfile
|
153
178
|
$ bundle
|
154
179
|
</code></pre>
|
155
180
|
|
@@ -164,6 +189,19 @@ Now, you can start <a href="#usage">using it!</a>
|
|
164
189
|
|
165
190
|
Technically, you can skip this entire Installation section and just run `sudo gem install bwoken && bwoken init`. This is listed here for completeness, but you really shouldn't install gems this way.
|
166
191
|
|
192
|
+
## Contributors
|
193
|
+
|
194
|
+
Special thank you goes out to everyone who's helped with bwoken. Here's a (probably incomplete) list of those folks:
|
195
|
+
|
196
|
+
* Brad Grzesiak ([listrophy](https://github.com/listrophy))
|
197
|
+
* Jaymes Waters ([jaym3s](https://github.com/jaym3s))
|
198
|
+
* Jonathan Penn ([jonathanpenn](https://github.com/jonathanpenn))
|
199
|
+
* Ryland Herrick ([rylnd](https://github.com/rylnd))
|
200
|
+
* Whitney Young ([wbyoung](https://github.com/wbyoung))
|
201
|
+
* David Gagnon ([mrdavidgagnon](https://github.com/mrdavidgagnon))
|
202
|
+
* [otusweb](https://github.com/otusweb)
|
203
|
+
* Alec Gorge ([alecgorge](https://github.com/alecgorge))
|
204
|
+
|
167
205
|
## Contributing
|
168
206
|
|
169
207
|
1. Fork it
|
data/bin/unix_instruments.sh
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
#
|
3
|
-
# Copyright (c)
|
3
|
+
# Copyright (c) 2013 Jonathan Penn (http://cocoamanifest.net)
|
4
4
|
#
|
5
5
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
# of this software and associated documentation files (the "Software"), to deal
|
@@ -47,7 +47,8 @@ run_instruments() {
|
|
47
47
|
# to make this cleaner?
|
48
48
|
|
49
49
|
output=$(mktemp -t unix-instruments)
|
50
|
-
instruments $@ &> /dev/ttyvf &
|
50
|
+
instruments "$@" &> /dev/ttyvf &
|
51
|
+
pid_instruments=$!
|
51
52
|
|
52
53
|
# Cat the instruments output to tee which outputs to stdout and saves to
|
53
54
|
# $output at the same time
|
@@ -72,7 +73,7 @@ get_error_status() {
|
|
72
73
|
}
|
73
74
|
|
74
75
|
trap cleanup_instruments EXIT
|
75
|
-
|
76
|
+
cleanup_instruments() {
|
76
77
|
# Because we fork instruments in this script, we need to clean up if it's
|
77
78
|
# still running because of an error or the user pressed Ctrl-C
|
78
79
|
if [[ $pid_instruments -gt 0 ]]; then
|
@@ -87,5 +88,5 @@ function cleanup_instruments() {
|
|
87
88
|
if [[ $1 == "----test" ]]; then
|
88
89
|
get_error_status
|
89
90
|
else
|
90
|
-
run_instruments $@
|
91
|
+
run_instruments "$@"
|
91
92
|
fi
|
data/lib/bwoken.rb
CHANGED
@@ -5,7 +5,15 @@ module Bwoken
|
|
5
5
|
DEVICE_FAMILIES = %w(iphone ipad)
|
6
6
|
|
7
7
|
def path
|
8
|
-
File.join(project_path,
|
8
|
+
File.join(project_path, integration_path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def integration_path
|
12
|
+
@integration_path || 'integration'
|
13
|
+
end
|
14
|
+
|
15
|
+
def integration_path= new_integration_path
|
16
|
+
@integration_path = new_integration_path
|
9
17
|
end
|
10
18
|
|
11
19
|
def tmp_path
|
@@ -13,7 +21,11 @@ module Bwoken
|
|
13
21
|
end
|
14
22
|
|
15
23
|
def app_name
|
16
|
-
File.basename(File.basename(workspace_or_project, '.xcodeproj'), '.xcworkspace')
|
24
|
+
@name || File.basename(File.basename(workspace_or_project, '.xcodeproj'), '.xcworkspace')
|
25
|
+
end
|
26
|
+
|
27
|
+
def app_name= name
|
28
|
+
@name = name
|
17
29
|
end
|
18
30
|
|
19
31
|
def project_path
|
data/lib/bwoken/cli.rb
CHANGED
@@ -14,6 +14,7 @@ opts = Slop.parse :help => true do
|
|
14
14
|
|
15
15
|
command 'init' do
|
16
16
|
banner Bwoken::CLI::Init.help_banner
|
17
|
+
on :'integration-path=', 'Specify a custom directory to store your test scripts in (e.g. --integration-path=uiautomation/path/dir). Default: integration. If you use the non-default value here, you will need to always run bwoken with the `--integration-path=your/integration/dir` option.', :default => 'integration'
|
17
18
|
|
18
19
|
run { ran_command = 'init' }
|
19
20
|
end
|
@@ -26,12 +27,15 @@ opts = Slop.parse :help => true do
|
|
26
27
|
on :family=, 'Test only one device type, either ipad or iphone. Default is to test on both',
|
27
28
|
:match => /\A(?:ipad|iphone|all)\Z/i, :default => 'all'
|
28
29
|
on :scheme=, 'Specify a custom scheme'
|
30
|
+
on :'product-name=', 'Specify a custom product name (e.g. --product-name="My Product"). Default is the name of of the xcodeproj file'
|
31
|
+
on :'integration-path=', 'Specify a custom directory to store your test scripts in (e.g. --integration-path=uiautomation/path/dir). Note that this folder still expects the same directory structure as the one create by `bwoken init`.', :default => 'integration'
|
29
32
|
#on :flags=, 'Specify custom build flags (e.g., --flags="-arch=i386,foo=bar")', :as => Array, :default => [] # TODO: implement
|
30
33
|
on :formatter=, 'Specify a custom formatter (e.g., --formatter=passthru)', :default => 'colorful'
|
31
34
|
on :focus=, 'Specify particular tests to run', :as => Array, :default => []
|
32
35
|
on :clobber, 'Remove any generated file'
|
33
36
|
on :'skip-build', 'Do not build the iOS binary'
|
34
37
|
on :verbose, 'Be verbose'
|
38
|
+
on :configuration=, 'The build configruation to use (e.g., --configuration=Release)', :default => 'Debug'
|
35
39
|
|
36
40
|
run { ran_command = 'test' }
|
37
41
|
end
|
data/lib/bwoken/cli/init.rb
CHANGED
@@ -18,29 +18,31 @@ BANNER
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# opts - A slop command object (acts like super-hash)
|
21
|
-
#
|
21
|
+
# Only allowed option is 'integration-path' which should
|
22
|
+
# have defaulted to 'integration'
|
22
23
|
def initialize opts
|
23
|
-
|
24
|
+
opts = opts.to_hash if opts.is_a?(Slop)
|
25
|
+
Bwoken.integration_path = opts[:'integration-path']
|
24
26
|
end
|
25
27
|
|
26
28
|
def run
|
27
|
-
directory
|
28
|
-
directory
|
29
|
-
directory
|
30
|
-
directory
|
31
|
-
template
|
32
|
-
template
|
33
|
-
template
|
29
|
+
directory "coffeescript/iphone"
|
30
|
+
directory "coffeescript/ipad"
|
31
|
+
directory "javascript"
|
32
|
+
directory "tmp/results"
|
33
|
+
template "coffeescript/iphone/example.coffee"
|
34
|
+
template "coffeescript/ipad/example.coffee"
|
35
|
+
template "javascript/example_vendor.js"
|
34
36
|
end
|
35
37
|
|
36
38
|
def directory dirname
|
37
|
-
FileUtils.mkdir_p dirname
|
39
|
+
FileUtils.mkdir_p "#{Bwoken.integration_path}/#{dirname}"
|
38
40
|
end
|
39
41
|
|
40
42
|
def template filename
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
source = File.expand_path("../templates/#{filename}", __FILE__)
|
44
|
+
destination = "#{Bwoken.integration_path}/#{filename}"
|
45
|
+
FileUtils.cp source, destination
|
44
46
|
end
|
45
47
|
|
46
48
|
end
|
File without changes
|
data/lib/bwoken/cli/templates/{integration/coffeescript → coffeescript}/iphone/example.coffee
RENAMED
File without changes
|
File without changes
|
data/lib/bwoken/cli/test.rb
CHANGED
@@ -17,7 +17,7 @@ module Bwoken
|
|
17
17
|
class Test
|
18
18
|
|
19
19
|
def self.help_banner
|
20
|
-
|
20
|
+
<<-BANNER
|
21
21
|
Run your tests. If you don't specify which tests, bwoken will run them all
|
22
22
|
|
23
23
|
bwoken test --simulator # runs all tests in the simulator
|
@@ -38,15 +38,18 @@ BANNER
|
|
38
38
|
attr_accessor :options
|
39
39
|
|
40
40
|
# opts - A slop command object (acts like super-hash)
|
41
|
-
# :clobber
|
42
|
-
# :family
|
43
|
-
# :flags
|
44
|
-
# :focus
|
45
|
-
# :formatter
|
46
|
-
# :scheme
|
47
|
-
# :simulator
|
48
|
-
# :skip-build
|
49
|
-
# :verbose
|
41
|
+
# :clobber - remove all generated files, including iOS build
|
42
|
+
# :family - enum of [nil, 'iphone', 'ipad'] (case-insensitive)
|
43
|
+
# :flags - custom build flag array (default: []) TODO: not yet implmented
|
44
|
+
# :focus - which tests to run (default: [], meaning "all")
|
45
|
+
# :formatter - custom formatter (default: 'colorful')
|
46
|
+
# :scheme - custom scheme (default: nil)
|
47
|
+
# :simulator - should force simulator use (default: nil)
|
48
|
+
# :skip-build - do not build the iOS binary
|
49
|
+
# :verbose - be verbose
|
50
|
+
# :integration-path - the base directory for all the integration files
|
51
|
+
# :product-name - the name of the generated .app file if it is different from the name of the project/workspace
|
52
|
+
# :configuration - typically "Debug" or "Release"
|
50
53
|
def initialize opts
|
51
54
|
opts = opts.to_hash if opts.is_a?(Slop)
|
52
55
|
self.options = opts.to_hash.tap do |o|
|
@@ -55,6 +58,9 @@ BANNER
|
|
55
58
|
o[:simulator] = use_simulator?(o[:simulator])
|
56
59
|
o[:family] = o[:family]
|
57
60
|
end
|
61
|
+
|
62
|
+
Bwoken.integration_path = options[:'integration-path']
|
63
|
+
Bwoken.app_name = options[:'product-name']
|
58
64
|
end
|
59
65
|
|
60
66
|
def run
|
@@ -71,14 +77,16 @@ BANNER
|
|
71
77
|
b.formatter = options[:formatter]
|
72
78
|
b.scheme = options[:scheme] if options[:scheme]
|
73
79
|
b.simulator = options[:simulator]
|
80
|
+
b.configuration = options[:configuration]
|
74
81
|
end.compile
|
75
82
|
end
|
76
83
|
|
77
84
|
def transpile
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
85
|
+
integration_dir = Bwoken.integration_path
|
86
|
+
coffeescripts = Rake::FileList["#{integration_dir}/coffeescript/**/*.coffee"]
|
87
|
+
compiled_coffee = coffeescripts.pathmap("%{^#{integration_dir}/coffeescript,#{integration_dir}/tmp/javascript}d/%n.js")
|
88
|
+
javascripts = Rake::FileList["#{integration_dir}/javascript/**/*.js"]
|
89
|
+
copied_javascripts = javascripts.pathmap("%{^#{integration_dir}/javascript,#{integration_dir}/tmp/javascript}d/%f")
|
82
90
|
|
83
91
|
compiled_coffee.zip(coffeescripts).each do |target, source|
|
84
92
|
containing_dir = target.pathmap('%d')
|
data/lib/bwoken/script.rb
CHANGED
@@ -25,8 +25,8 @@ module Bwoken
|
|
25
25
|
|
26
26
|
def env_variables
|
27
27
|
{
|
28
|
-
'UIASCRIPT' => path
|
29
|
-
'UIARESULTSPATH' => Bwoken.results_path
|
28
|
+
'UIASCRIPT' => %Q|"#{path}"|,
|
29
|
+
'UIARESULTSPATH' => %Q|"#{Bwoken.results_path}"|
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
@@ -35,12 +35,12 @@ module Bwoken
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def cmd
|
38
|
-
"#{File.expand_path('../../../bin', __FILE__)}/unix_instruments.sh \
|
38
|
+
%Q|"#{File.expand_path('../../../bin', __FILE__)}/unix_instruments.sh" \
|
39
39
|
#{device_flag} \
|
40
|
-
-D #{self.class.trace_file_path} \
|
41
|
-
-t #{Bwoken.path_to_automation_template} \
|
42
|
-
#{app_dir} \
|
43
|
-
#{env_variables_for_cli}
|
40
|
+
-D "#{self.class.trace_file_path}" \
|
41
|
+
-t "#{Bwoken.path_to_automation_template}" \
|
42
|
+
"#{app_dir}" \
|
43
|
+
#{env_variables_for_cli}|
|
44
44
|
end
|
45
45
|
|
46
46
|
def device_flag
|
data/lib/bwoken/simulator.rb
CHANGED
@@ -11,7 +11,7 @@ module Bwoken
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.update_device_family_in_plist action, args = nil
|
14
|
-
system_cmd = lambda {|command| Kernel.system "#{plist_buddy} -c '#{command}' #{plist_file}" }
|
14
|
+
system_cmd = lambda {|command| Kernel.system "#{plist_buddy} -c '#{command}' \"#{plist_file}\"" }
|
15
15
|
|
16
16
|
case action
|
17
17
|
when :delete_array then system_cmd['Delete :UIDeviceFamily']
|
data/lib/bwoken/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bwoken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.beta.
|
4
|
+
version: 2.0.0.beta.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brad Grzesiak
|
9
|
-
- Jaymes Waters
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-11-01 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: coffee-script-source
|
@@ -143,7 +142,6 @@ dependencies:
|
|
143
142
|
description: iOS UIAutomation Test Runner
|
144
143
|
email:
|
145
144
|
- brad@bendyworks.com
|
146
|
-
- jaymes@bendyworks.com
|
147
145
|
executables:
|
148
146
|
- unix_instruments.sh
|
149
147
|
- bwoken
|
@@ -156,9 +154,9 @@ files:
|
|
156
154
|
- bin/unix_instruments.sh
|
157
155
|
- lib/bwoken/build.rb
|
158
156
|
- lib/bwoken/cli/init.rb
|
159
|
-
- lib/bwoken/cli/templates/
|
160
|
-
- lib/bwoken/cli/templates/
|
161
|
-
- lib/bwoken/cli/templates/
|
157
|
+
- lib/bwoken/cli/templates/coffeescript/ipad/example.coffee
|
158
|
+
- lib/bwoken/cli/templates/coffeescript/iphone/example.coffee
|
159
|
+
- lib/bwoken/cli/templates/javascript/example_vendor.js
|
162
160
|
- lib/bwoken/cli/test.rb
|
163
161
|
- lib/bwoken/cli.rb
|
164
162
|
- lib/bwoken/coffeescript/github_import_string.rb
|
@@ -190,9 +188,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
188
|
- - ! '>='
|
191
189
|
- !ruby/object:Gem::Version
|
192
190
|
version: '0'
|
193
|
-
segments:
|
194
|
-
- 0
|
195
|
-
hash: -2275845528582836031
|
196
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
192
|
none: false
|
198
193
|
requirements:
|