bwoken 0.0.1 → 1.0.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.
- data/README.md +10 -2
- data/lib/bwoken.rb +21 -3
- data/lib/bwoken/build.rb +9 -17
- data/lib/bwoken/formatter.rb +52 -2
- data/lib/bwoken/formatters/colorful_formatter.rb +50 -3
- data/lib/bwoken/script.rb +14 -8
- data/lib/bwoken/tasks/bwoken.rake +9 -4
- data/lib/bwoken/version.rb +1 -1
- metadata +22 -22
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# Bwoken
|
1
|
+
# Bwoken 
|
2
2
|
|
3
|
-
Runs your UIAutomation tests from the command line for both iPhone and iPad.
|
3
|
+
Runs your UIAutomation tests from the command line for both iPhone and iPad.
|
4
4
|
|
5
5
|
Supports coffeescript.
|
6
6
|
|
@@ -13,6 +13,14 @@ Make sure bwoken is properly installed via one of the methods below. Then, build
|
|
13
13
|
|
14
14
|
$ rake
|
15
15
|
|
16
|
+
To run a single feature, add a RUN variable with the same name as your feature, ignoring the file extension:
|
17
|
+
|
18
|
+
$ RUN=focused_test rake iphone
|
19
|
+
|
20
|
+
Or, to run the feature on both iphone and ipad
|
21
|
+
|
22
|
+
$ RUN=focused_test rake
|
23
|
+
|
16
24
|
|
17
25
|
## Installation with rvm (recommended)
|
18
26
|
|
data/lib/bwoken.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
|
3
|
-
require 'bwoken/version'
|
4
|
-
require 'bwoken/simulator'
|
5
3
|
require 'bwoken/build'
|
6
|
-
require 'bwoken/script'
|
7
4
|
require 'bwoken/coffeescript'
|
5
|
+
require 'bwoken/formatters/colorful_formatter'
|
6
|
+
require 'bwoken/script'
|
7
|
+
require 'bwoken/simulator'
|
8
|
+
require 'bwoken/version'
|
8
9
|
|
9
10
|
module Bwoken
|
10
11
|
class << self
|
@@ -24,6 +25,10 @@ module Bwoken
|
|
24
25
|
File.join(build_path, "#{app_name}.app")
|
25
26
|
end
|
26
27
|
|
28
|
+
def formatter
|
29
|
+
@formatter ||= Bwoken::ColorfulFormatter.new
|
30
|
+
end
|
31
|
+
|
27
32
|
def project_path
|
28
33
|
Dir.pwd
|
29
34
|
end
|
@@ -46,6 +51,19 @@ module Bwoken
|
|
46
51
|
File.join(project_path, "#{app_name}.xcworkspace")
|
47
52
|
end
|
48
53
|
|
54
|
+
def xcodeproj
|
55
|
+
File.join(project_path, "#{app_name}.xcodeproj")
|
56
|
+
end
|
57
|
+
|
58
|
+
def workspace_or_project_flag
|
59
|
+
ws = workspace
|
60
|
+
if File.exists?(ws)
|
61
|
+
"-workspace #{ws}"
|
62
|
+
else
|
63
|
+
"-project #{xcodeproj}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
49
67
|
def results_path
|
50
68
|
File.join(tmp_path, 'results').tap do |dir_name|
|
51
69
|
FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
|
data/lib/bwoken/build.rb
CHANGED
@@ -28,8 +28,8 @@ module Bwoken
|
|
28
28
|
|
29
29
|
def cmd
|
30
30
|
"xcodebuild \
|
31
|
-
|
32
|
-
-scheme #{scheme} \
|
31
|
+
#{Bwoken.workspace_or_project_flag} \
|
32
|
+
#{"-scheme #{scheme}" if Bwoken.workspace} \
|
33
33
|
-configuration #{configuration} \
|
34
34
|
-sdk #{sdk} \
|
35
35
|
#{variables_for_cli} \
|
@@ -37,27 +37,19 @@ module Bwoken
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def compile
|
40
|
+
Bwoken.formatter.before_build_start
|
41
|
+
|
40
42
|
exit_status = 0
|
41
43
|
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
|
42
44
|
|
43
|
-
|
44
|
-
out_string = ""
|
45
|
-
|
46
|
-
stdout.each_line do |line|
|
47
|
-
out_string << line
|
48
|
-
print "."
|
49
|
-
end
|
45
|
+
out_string = Bwoken.formatter.format_build stdout
|
50
46
|
|
51
47
|
exit_status = wait_thr.value if wait_thr
|
52
|
-
puts
|
53
48
|
|
54
|
-
if exit_status == 0
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
else
|
59
|
-
puts out_string
|
60
|
-
puts 'Build failed'
|
49
|
+
if exit_status == 0 # Build Successful
|
50
|
+
Bwoken.formatter.build_successful out_string
|
51
|
+
else # Build Failed
|
52
|
+
Bwoken.formatter.build_failed out_string, stderr.read
|
61
53
|
return exit_status
|
62
54
|
end
|
63
55
|
end
|
data/lib/bwoken/formatter.rb
CHANGED
@@ -6,14 +6,25 @@ module Bwoken
|
|
6
6
|
new.format stdout
|
7
7
|
end
|
8
8
|
|
9
|
+
def format_build stdout
|
10
|
+
new.format_build stdout
|
11
|
+
end
|
12
|
+
|
9
13
|
def on name, &block
|
10
|
-
define_method "_on_#{name}_callback" do
|
11
|
-
block.call(line)
|
14
|
+
define_method "_on_#{name}_callback" do |*line|
|
15
|
+
block.call(*line)
|
12
16
|
end
|
13
17
|
end
|
14
18
|
|
15
19
|
end
|
16
20
|
|
21
|
+
def method_missing(method_name, *args, &block)
|
22
|
+
callback_method_sig = "_on_#{method_name}_callback"
|
23
|
+
if self.respond_to? callback_method_sig.to_sym
|
24
|
+
send(callback_method_sig, *args, &block)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
17
28
|
def line_demuxer line, exit_status
|
18
29
|
if line =~ /Instruments Trace Error/
|
19
30
|
exit_status = 1
|
@@ -23,12 +34,18 @@ module Bwoken
|
|
23
34
|
|
24
35
|
if tokens[3] =~ /Pass/
|
25
36
|
_on_pass_callback(line)
|
37
|
+
elsif tokens[3] =~ /Start/
|
38
|
+
_on_start_callback(line)
|
26
39
|
elsif tokens[3] =~ /Fail/ || line =~ /Script threw an uncaught JavaScript error/
|
27
40
|
exit_status = 1
|
28
41
|
_on_fail_callback(line)
|
42
|
+
elsif tokens[3] =~ /Error/
|
43
|
+
_on_error_callback(line)
|
29
44
|
else
|
30
45
|
_on_debug_callback(line)
|
31
46
|
end
|
47
|
+
elsif line =~ /Instruments Trace Complete/
|
48
|
+
_on_complete_callback(line)
|
32
49
|
else
|
33
50
|
_on_other_callback(line)
|
34
51
|
end
|
@@ -51,5 +68,38 @@ module Bwoken
|
|
51
68
|
exit_status
|
52
69
|
end
|
53
70
|
|
71
|
+
def format_build stdout
|
72
|
+
out_string = ''
|
73
|
+
stdout.each_line do |line|
|
74
|
+
out_string << line
|
75
|
+
if line.length > 1
|
76
|
+
_on_build_line_callback(line)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
out_string
|
80
|
+
end
|
81
|
+
|
82
|
+
on :before_build_start do
|
83
|
+
puts 'Building'
|
84
|
+
end
|
85
|
+
|
86
|
+
on :build_line do |line|
|
87
|
+
print '.'
|
88
|
+
end
|
89
|
+
|
90
|
+
on :build_successful do |build_log|
|
91
|
+
puts
|
92
|
+
puts
|
93
|
+
puts "### Build Successful ###"
|
94
|
+
puts
|
95
|
+
end
|
96
|
+
|
97
|
+
on :build_failed do |build_log, error_log|
|
98
|
+
puts build_log
|
99
|
+
puts "Standard Error:"
|
100
|
+
puts error_log
|
101
|
+
puts '## Build failed ##'
|
102
|
+
end
|
103
|
+
|
54
104
|
end
|
55
105
|
end
|
@@ -5,20 +5,67 @@ require 'bwoken/formatter'
|
|
5
5
|
module Bwoken
|
6
6
|
class ColorfulFormatter < Formatter
|
7
7
|
|
8
|
+
on :complete do |line|
|
9
|
+
tokens = line.split(' ')
|
10
|
+
puts %Q( \n#{"Complete".send(@failed ? :red : :green)}\n Duration: #{tokens[5].sub(';','').underline.bold}\n )
|
11
|
+
end
|
12
|
+
|
8
13
|
on :debug do |line|
|
14
|
+
filtered_line = line.sub(/(target\.frontMostApp.+)\.tap\(\)/, "#{'tap'.yellow} \\1")
|
15
|
+
filtered_line = filtered_line.gsub(/\[("[^\]]*")\]/, "[" + '\1'.magenta + "]")
|
16
|
+
filtered_line = filtered_line.gsub('()', '')
|
17
|
+
filtered_line = filtered_line.sub(/target.frontMostApp.(?:mainWindow.)?/,'')
|
18
|
+
tokens = filtered_line.split(' ')
|
19
|
+
puts "#{tokens[3].cyan}\t#{tokens[4..-1].join(' ')}"
|
20
|
+
end
|
21
|
+
|
22
|
+
on :error do |line|
|
23
|
+
@failed = true
|
9
24
|
tokens = line.split(' ')
|
10
|
-
puts "#{tokens[
|
25
|
+
puts "#{tokens[3].bold.red}\t#{tokens[4..-1].join(' ').underline.bold}"
|
11
26
|
end
|
12
27
|
|
13
28
|
on :fail do |line|
|
29
|
+
@failed = true
|
14
30
|
tokens = line.split(' ')
|
15
|
-
puts "#{tokens[
|
31
|
+
puts "#{tokens[3].bold.red}\t#{tokens[4..-1].join(' ').underline.bold}"
|
32
|
+
end
|
33
|
+
|
34
|
+
on :start do |line|
|
35
|
+
tokens = line.split(' ')
|
36
|
+
puts "#{tokens[3].cyan}\t#{tokens[4..-1].join(' ')}"
|
16
37
|
end
|
17
38
|
|
18
39
|
on :pass do |line|
|
19
40
|
tokens = line.split(' ')
|
20
|
-
puts "#{tokens[
|
41
|
+
puts "#{tokens[3].green}\t#{tokens[4..-1].join(' ')}"
|
21
42
|
end
|
22
43
|
|
44
|
+
on :before_script_run do |path|
|
45
|
+
@failed = false
|
46
|
+
tokens = path.split('/')
|
47
|
+
puts
|
48
|
+
puts "#{tokens[-2]}\t#{tokens[-1]}".cyan
|
49
|
+
end
|
50
|
+
|
51
|
+
on :before_build_start do
|
52
|
+
print "Building".blue
|
53
|
+
end
|
54
|
+
|
55
|
+
on :build_line do |line|
|
56
|
+
print '.'.blue
|
57
|
+
end
|
58
|
+
|
59
|
+
on :build_successful do |line|
|
60
|
+
puts
|
61
|
+
puts 'Build Successful!'.green
|
62
|
+
end
|
63
|
+
|
64
|
+
on :build_failed do |build_log, error_log|
|
65
|
+
puts build_log
|
66
|
+
puts 'Standard Error:'.yellow
|
67
|
+
puts error_log
|
68
|
+
puts 'Build failed!'.red
|
69
|
+
end
|
23
70
|
end
|
24
71
|
end
|
data/lib/bwoken/script.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'open3'
|
3
3
|
|
4
|
-
require 'bwoken/formatters/colorful_formatter'
|
5
|
-
|
6
4
|
module Bwoken
|
7
5
|
|
8
6
|
class ScriptFailedError < RuntimeError; end
|
@@ -16,11 +14,16 @@ module Bwoken
|
|
16
14
|
def run_all device_family
|
17
15
|
Simulator.device_family = device_family
|
18
16
|
|
19
|
-
|
17
|
+
test_files(device_family).each do |javascript|
|
20
18
|
run(javascript)
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
22
|
+
def run_one feature_name, device_family
|
23
|
+
Simulator.device_family = device_family
|
24
|
+
run File.join(Bwoken.test_suite_path, device_family, "#{feature_name}.js")
|
25
|
+
end
|
26
|
+
|
24
27
|
def run javascript_path
|
25
28
|
script = new
|
26
29
|
script.path = javascript_path
|
@@ -31,6 +34,12 @@ module Bwoken
|
|
31
34
|
File.join(Bwoken.tmp_path, 'trace')
|
32
35
|
end
|
33
36
|
|
37
|
+
def test_files device_family
|
38
|
+
all_files_in_test_dir = Dir["#{Bwoken.test_suite_path}/#{device_family}/**/*.js"]
|
39
|
+
helper_files = Dir["#{Bwoken.test_suite_path}/#{device_family}/**/helpers/**/*.js"]
|
40
|
+
all_files_in_test_dir - helper_files
|
41
|
+
end
|
42
|
+
|
34
43
|
end
|
35
44
|
|
36
45
|
def env_variables
|
@@ -52,20 +61,17 @@ module Bwoken
|
|
52
61
|
#{env_variables_for_cli}"
|
53
62
|
end
|
54
63
|
|
55
|
-
def formatter
|
56
|
-
Bwoken::ColorfulFormatter
|
57
|
-
end
|
58
|
-
|
59
64
|
def make_results_path_dir
|
60
65
|
FileUtils.mkdir_p Bwoken.results_path
|
61
66
|
end
|
62
67
|
|
63
68
|
def run
|
69
|
+
Bwoken.formatter.before_script_run path
|
64
70
|
make_results_path_dir
|
65
71
|
|
66
72
|
exit_status = 0
|
67
73
|
Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
|
68
|
-
exit_status = formatter.format stdout
|
74
|
+
exit_status = Bwoken.formatter.format stdout
|
69
75
|
end
|
70
76
|
raise ScriptFailedError.new('Test Script Failed') unless exit_status == 0
|
71
77
|
end
|
@@ -28,8 +28,8 @@ end
|
|
28
28
|
|
29
29
|
desc 'Remove result and trace files'
|
30
30
|
task :clean do
|
31
|
-
print "Removing #{Bwoken.
|
32
|
-
system "rm -rf #{Bwoken.
|
31
|
+
print "Removing #{Bwoken.tmp_path}/* ... "
|
32
|
+
system "rm -rf #{Bwoken.tmp_path}/*"
|
33
33
|
puts 'done.'
|
34
34
|
end
|
35
35
|
|
@@ -40,7 +40,8 @@ end
|
|
40
40
|
|
41
41
|
desc 'Compile the workspace'
|
42
42
|
task :build do
|
43
|
-
Bwoken::Build.new.compile
|
43
|
+
exit_status = Bwoken::Build.new.compile
|
44
|
+
raise unless exit_status == 0
|
44
45
|
end
|
45
46
|
|
46
47
|
task :coffeescript do
|
@@ -54,7 +55,11 @@ device_families.each do |device_family|
|
|
54
55
|
|
55
56
|
namespace device_family do
|
56
57
|
task :test => :coffeescript do
|
57
|
-
|
58
|
+
if ENV['RUN']
|
59
|
+
Bwoken::Script.run_one ENV['RUN'], device_family
|
60
|
+
else
|
61
|
+
Bwoken::Script.run_all device_family
|
62
|
+
end
|
58
63
|
end
|
59
64
|
end
|
60
65
|
|
data/lib/bwoken/version.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: 0.0
|
4
|
+
version: 1.0.0
|
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-04-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: coffee-script-source
|
17
|
-
requirement: &
|
17
|
+
requirement: &70255276428720 !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: *70255276428720
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: colorful
|
28
|
-
requirement: &
|
28
|
+
requirement: &70255276427380 !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: *70255276427380
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: execjs
|
39
|
-
requirement: &
|
39
|
+
requirement: &70255276426320 !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: *70255276426320
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rake
|
50
|
-
requirement: &
|
50
|
+
requirement: &70255276425800 !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: *70255276425800
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rspec
|
61
|
-
requirement: &
|
61
|
+
requirement: &70255276424840 !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: *70255276424840
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: guard-rspec
|
72
|
-
requirement: &
|
72
|
+
requirement: &70255276423820 !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: *70255276423820
|
81
81
|
description: iOS UIAutomation Test Runner
|
82
82
|
email:
|
83
83
|
- brad@bendyworks.com
|
@@ -87,20 +87,20 @@ executables:
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- LICENSE
|
91
|
+
- README.md
|
90
92
|
- bin/unix_instruments.sh
|
91
|
-
- lib/bwoken/formatters/colorful_formatter.rb
|
92
|
-
- lib/bwoken/tasks/bwoken.rake
|
93
93
|
- lib/bwoken/build.rb
|
94
94
|
- lib/bwoken/coffeescript.rb
|
95
95
|
- lib/bwoken/formatter.rb
|
96
|
+
- lib/bwoken/formatters/colorful_formatter.rb
|
96
97
|
- lib/bwoken/script.rb
|
97
98
|
- lib/bwoken/simulator.rb
|
99
|
+
- lib/bwoken/tasks/bwoken.rake
|
98
100
|
- lib/bwoken/tasks.rb
|
99
101
|
- lib/bwoken/version.rb
|
100
102
|
- lib/bwoken.rb
|
101
|
-
|
102
|
-
- README.md
|
103
|
-
homepage: https://github.com/bendyworks/bwoken
|
103
|
+
homepage: https://bendyworks.github.com/bwoken
|
104
104
|
licenses: []
|
105
105
|
post_install_message:
|
106
106
|
rdoc_options: []
|
@@ -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: 1868550205244240029
|
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: 1868550205244240029
|
127
127
|
requirements: []
|
128
128
|
rubyforge_project:
|
129
|
-
rubygems_version: 1.8.
|
129
|
+
rubygems_version: 1.8.17
|
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;
|