bwoken 1.0.0 → 1.0.1
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 +1 -1
- data/bin/unix_instruments.sh +32 -3
- data/lib/bwoken/coffeescript.rb +16 -70
- data/lib/bwoken/tasks/bwoken.rake +52 -33
- data/lib/bwoken/version.rb +1 -1
- data/lib/bwoken.rb +1 -1
- metadata +17 -17
data/README.md
CHANGED
data/bin/unix_instruments.sh
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
#!/usr/bin/env bash
|
2
2
|
#
|
3
|
+
# Copyright (c) 2012 Jonathan Penn (http://cocoamanifest.net)
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
#
|
23
|
+
|
24
|
+
|
3
25
|
# unix_instruments
|
4
26
|
#
|
5
27
|
# A wrapper around `instruments` that returns a proper unix status code
|
@@ -41,9 +63,12 @@ run_instruments() {
|
|
41
63
|
}
|
42
64
|
|
43
65
|
get_error_status() {
|
44
|
-
# Catch "00-00-00 00:00:00 +000 Fail:"
|
45
66
|
# Catch "Instruments Trace Error"
|
46
|
-
|
67
|
+
# Catch "Instruments Usage Error"
|
68
|
+
# Catch "00-00-00 00:00:00 +000 Fail:"
|
69
|
+
# Catch "00-00-00 00:00:00 +000 Error:"
|
70
|
+
# Catch "00-00-00 00:00:00 +000 None: Script threw an uncaught JavaScript error"
|
71
|
+
ruby -e 'exit 1 if STDIN.read =~ /Instruments Usage Error|Instruments Trace Error|^\d+-\d+-\d+ \d+:\d+:\d+ [-+]\d+ (Fail:|Error:|None: Script threw an uncaught JavaScript error)/'
|
47
72
|
}
|
48
73
|
|
49
74
|
trap cleanup_instruments EXIT
|
@@ -51,10 +76,14 @@ function cleanup_instruments() {
|
|
51
76
|
# Because we fork instruments in this script, we need to clean up if it's
|
52
77
|
# still running because of an error or the user pressed Ctrl-C
|
53
78
|
if [[ $pid_instruments -gt 0 ]]; then
|
54
|
-
|
79
|
+
echo "Cleaning up instruments..."
|
80
|
+
kill -9 $pid_instruments
|
55
81
|
fi
|
56
82
|
}
|
57
83
|
|
84
|
+
# Running this file with "----test" will try to parse an error out of whatever
|
85
|
+
# is handed in to it from stdin. Use this method to double check your work if
|
86
|
+
# you need a custom "get_error_status" function above.
|
58
87
|
if [[ $1 == "----test" ]]; then
|
59
88
|
get_error_status
|
60
89
|
else
|
data/lib/bwoken/coffeescript.rb
CHANGED
@@ -7,14 +7,6 @@ module Bwoken
|
|
7
7
|
class Coffeescript
|
8
8
|
class << self
|
9
9
|
|
10
|
-
def source_folder
|
11
|
-
File.join(Bwoken.path, 'coffeescript')
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_files
|
15
|
-
"#{source_folder}/**/*.coffee"
|
16
|
-
end
|
17
|
-
|
18
10
|
def coffee_script_source
|
19
11
|
IO.read(CoffeeScript::Source.bundled_path)
|
20
12
|
end
|
@@ -23,75 +15,29 @@ module Bwoken
|
|
23
15
|
@context ||= ExecJS.compile(coffee_script_source)
|
24
16
|
end
|
25
17
|
|
26
|
-
def
|
27
|
-
|
28
|
-
Dir[test_files].each do |filename|
|
29
|
-
new(filename).make
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def clean
|
34
|
-
FileUtils.rm_rf compiled_javascript_path
|
18
|
+
def precompile coffeescript
|
19
|
+
coffeescript.lines.partition {|line| line =~ /^#import .*$/}.map(&:join)
|
35
20
|
end
|
36
21
|
|
37
|
-
def
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
attr_accessor :import_strings
|
22
|
+
def compile source, target
|
23
|
+
import_strings, sans_imports = precompile(IO.read source)
|
44
24
|
|
45
|
-
|
46
|
-
@source_file = path
|
47
|
-
end
|
48
|
-
|
49
|
-
def destination_folder
|
50
|
-
subpath = File.dirname(@source_file.sub(Regexp.new(self.class.source_folder + '/'), '')).sub('.','')
|
51
|
-
File.join(self.class.compiled_javascript_path, subpath)
|
52
|
-
end
|
25
|
+
javascript = self.context.call 'CoffeeScript.compile', sans_imports, :bare => true
|
53
26
|
|
54
|
-
|
55
|
-
|
56
|
-
"#{self.destination_folder}/#{basename}.js"
|
57
|
-
end
|
58
|
-
|
59
|
-
def make
|
60
|
-
FileUtils.mkdir_p(destination_folder)
|
61
|
-
javascript = compile
|
62
|
-
save javascript
|
63
|
-
end
|
64
|
-
|
65
|
-
def source_contents
|
66
|
-
IO.read(@source_file)
|
67
|
-
end
|
68
|
-
|
69
|
-
def compile
|
70
|
-
source = precompile(source_contents)
|
71
|
-
self.class.context.call('CoffeeScript.compile', source, :bare => true)
|
72
|
-
end
|
73
|
-
|
74
|
-
def precompile coffeescript
|
75
|
-
capture_imports coffeescript
|
76
|
-
remove_imports coffeescript
|
77
|
-
end
|
78
|
-
|
79
|
-
def capture_imports raw_coffeescript
|
80
|
-
self.import_strings = raw_coffeescript.scan(/#import .*$/)
|
81
|
-
end
|
27
|
+
write import_strings, javascript, :to => target
|
28
|
+
end
|
82
29
|
|
83
|
-
|
84
|
-
|
85
|
-
|
30
|
+
def write *args
|
31
|
+
to_hash = args.last
|
32
|
+
chunks = args[0..-2]
|
86
33
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
io.puts javascript
|
34
|
+
File.open(to_hash[:to], 'w') do |io|
|
35
|
+
chunks.each do |chunk|
|
36
|
+
io.puts chunk unless chunk.nil? || chunk == ''
|
37
|
+
end
|
38
|
+
end
|
93
39
|
end
|
94
|
-
end
|
95
40
|
|
41
|
+
end
|
96
42
|
end
|
97
43
|
end
|
@@ -1,42 +1,41 @@
|
|
1
1
|
require 'bwoken'
|
2
|
+
require 'rake/clean'
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
paths << Bwoken.results_path
|
8
|
-
paths << Bwoken.test_suite_path
|
9
|
-
paths << "#{Bwoken::Coffeescript.source_folder}/iphone"
|
10
|
-
paths << "#{Bwoken::Coffeescript.source_folder}/ipad"
|
11
|
-
|
12
|
-
paths.each do |path|
|
13
|
-
puts "Creating #{path}"
|
14
|
-
FileUtils.mkdir_p path
|
15
|
-
end
|
4
|
+
COFFEESCRIPTS = FileList['integration/coffeescript/**/*.coffee']
|
5
|
+
COMPILED_COFFEE = COFFEESCRIPTS.pathmap('%{^integration/coffeescript,integration/tmp/javascript}d/%n.js')
|
6
|
+
JAVASCRIPTS = FileList['integration/javascript/**/*.js']
|
7
|
+
COPIED_JAVASCRIPTS = JAVASCRIPTS.pathmap('%{^integration/javascript,integration/tmp/javascript}d/%f')
|
16
8
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
9
|
+
IPHONE_DIR = 'integration/coffeescript/iphone'
|
10
|
+
IPAD_DIR = 'integration/coffeescript/ipad'
|
11
|
+
VENDOR_JS_DIR = 'integration/javascript'
|
12
|
+
RESULTS_DIR = 'integration/tmp/results'
|
13
|
+
EXAMPLE_COFFEE = 'integration/coffeescript/iphone/example.coffee'
|
14
|
+
EXAMPLE_VENDOR_JS = 'integration/javascript/example_js.js'
|
25
15
|
|
16
|
+
directory IPHONE_DIR
|
17
|
+
directory IPAD_DIR
|
18
|
+
directory VENDOR_JS_DIR
|
19
|
+
directory RESULTS_DIR
|
20
|
+
|
21
|
+
file EXAMPLE_COFFEE => IPHONE_DIR do |t|
|
22
|
+
open(t.name, 'w') do |io|
|
23
|
+
io.puts '#import ../example_js.js'
|
24
|
+
io.puts 'target = UIATarget.localTarget()'
|
25
|
+
io.puts 'window = target.frontMostApp().mainWindow()'
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
puts 'done.'
|
29
|
+
file EXAMPLE_VENDOR_JS => VENDOR_JS_DIR do |t|
|
30
|
+
open(t.name, 'w') do |io|
|
31
|
+
io.puts '/* Place your javascript here */'
|
32
|
+
end
|
34
33
|
end
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
namespace :bwoken do
|
36
|
+
desc 'Create bwoken skeleton folders'
|
37
|
+
task :init => [IPAD_DIR, RESULTS_DIR, EXAMPLE_COFFEE, EXAMPLE_VENDOR_JS]
|
38
|
+
end
|
40
39
|
|
41
40
|
desc 'Compile the workspace'
|
42
41
|
task :build do
|
@@ -44,11 +43,31 @@ task :build do
|
|
44
43
|
raise unless exit_status == 0
|
45
44
|
end
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
COMPILED_COFFEE.zip(COFFEESCRIPTS).each do |target, source|
|
47
|
+
containing_dir = target.pathmap('%d')
|
48
|
+
directory containing_dir
|
49
|
+
file target => [containing_dir, source] do
|
50
|
+
Bwoken::Coffeescript.compile source, target
|
51
|
+
end
|
50
52
|
end
|
51
53
|
|
54
|
+
COPIED_JAVASCRIPTS.zip(JAVASCRIPTS).each do |target, source|
|
55
|
+
containing_dir = target.pathmap('%d')
|
56
|
+
directory containing_dir
|
57
|
+
file target => [containing_dir, source] do
|
58
|
+
sh "cp #{source} #{target}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
desc 'Compile coffeescript to javascript and copy vendor javascript'
|
63
|
+
task :coffeescript => (COMPILED_COFFEE + COPIED_JAVASCRIPTS)
|
64
|
+
|
65
|
+
CLEAN.include('integration/tmp/javascript')
|
66
|
+
CLOBBER.include('integration/tmp')
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
52
71
|
device_families = %w(iphone ipad)
|
53
72
|
|
54
73
|
device_families.each do |device_family|
|
data/lib/bwoken/version.rb
CHANGED
data/lib/bwoken.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bwoken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-07-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: coffee-script-source
|
17
|
-
requirement: &
|
17
|
+
requirement: &70103534295920 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70103534295920
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: colorful
|
28
|
-
requirement: &
|
28
|
+
requirement: &70103534294320 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70103534294320
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: execjs
|
39
|
-
requirement: &
|
39
|
+
requirement: &70103534293180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70103534293180
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rake
|
50
|
-
requirement: &
|
50
|
+
requirement: &70103534292080 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70103534292080
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rspec
|
61
|
-
requirement: &
|
61
|
+
requirement: &70103534290800 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70103534290800
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: guard-rspec
|
72
|
-
requirement: &
|
72
|
+
requirement: &70103534289600 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70103534289600
|
81
81
|
description: iOS UIAutomation Test Runner
|
82
82
|
email:
|
83
83
|
- brad@bendyworks.com
|
@@ -114,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version: '0'
|
115
115
|
segments:
|
116
116
|
- 0
|
117
|
-
hash:
|
117
|
+
hash: 4357248799734440989
|
118
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
119
|
none: false
|
120
120
|
requirements:
|
@@ -123,10 +123,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
segments:
|
125
125
|
- 0
|
126
|
-
hash:
|
126
|
+
hash: 4357248799734440989
|
127
127
|
requirements: []
|
128
128
|
rubyforge_project:
|
129
|
-
rubygems_version: 1.8.
|
129
|
+
rubygems_version: 1.8.16
|
130
130
|
signing_key:
|
131
131
|
specification_version: 3
|
132
132
|
summary: Runs your UIAutomation tests from the command line for both iPhone and iPad;
|