calabash-android 0.4.9 → 0.4.10.pre1
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/Gemfile +1 -0
- data/Gemfile.lock +62 -0
- data/Rakefile +2 -5
- data/bin/calabash-android +2 -0
- data/bin/calabash-android-build.rb +21 -6
- data/bin/calabash-android-setup.rb +1 -1
- data/calabash-android.gemspec +2 -0
- data/lib/calabash-android/env.rb +27 -0
- data/lib/calabash-android/helpers.rb +10 -75
- data/lib/calabash-android/java_keystore.rb +91 -0
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/operations.rb +2 -1
- data/lib/calabash-android/version.rb +1 -1
- metadata +36 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d3a23228157e56e511aa96bdbdb7947d65d4ca5
|
4
|
+
data.tar.gz: 19d05bb6a38811caeb1dba9faadbe259cf64f681
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50c4753229d9d7ad0ca8341289c084af3557d772acc9c7d6b3558c271bfd9029ffddcc010578550668e37e82324f69c7a8add8fd56e89e31a47505afcde65866
|
7
|
+
data.tar.gz: 5b0b9a43deb710ab276af9db66a52437022d6bf49d295b9012eea65f5cf0f07166c7447bd0243402c928fac72878cc8191d54ad0ec3db3a20349c42e171c83dc
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
calabash-android (0.4.10.pre1)
|
5
|
+
awesome_print
|
6
|
+
cucumber
|
7
|
+
escape (~> 0.0.4)
|
8
|
+
httpclient (~> 2.3.2)
|
9
|
+
json
|
10
|
+
popen4 (~> 0.1.2)
|
11
|
+
retriable
|
12
|
+
rubyzip (~> 0.9.9)
|
13
|
+
slowhandcuke
|
14
|
+
xamarin-test-cloud (>= 0.9.23)
|
15
|
+
|
16
|
+
GEM
|
17
|
+
remote: http://rubygems.org/
|
18
|
+
specs:
|
19
|
+
Platform (0.4.0)
|
20
|
+
awesome_print (1.1.0)
|
21
|
+
builder (3.2.2)
|
22
|
+
cucumber (1.3.6)
|
23
|
+
builder (>= 2.1.2)
|
24
|
+
diff-lcs (>= 1.1.3)
|
25
|
+
gherkin (~> 2.12.0)
|
26
|
+
multi_json (~> 1.7.5)
|
27
|
+
multi_test (>= 0.0.2)
|
28
|
+
diff-lcs (1.2.4)
|
29
|
+
escape (0.0.4)
|
30
|
+
gherkin (2.12.1)
|
31
|
+
multi_json (~> 1.3)
|
32
|
+
httpclient (2.3.4.1)
|
33
|
+
json (1.8.0)
|
34
|
+
mime-types (1.25)
|
35
|
+
multi_json (1.7.9)
|
36
|
+
multi_test (0.0.2)
|
37
|
+
open4 (1.3.0)
|
38
|
+
popen4 (0.1.2)
|
39
|
+
Platform (>= 0.4.0)
|
40
|
+
open4 (>= 0.4.0)
|
41
|
+
rake (10.1.0)
|
42
|
+
rest-client (1.6.7)
|
43
|
+
mime-types (>= 1.16)
|
44
|
+
retriable (1.3.3.1)
|
45
|
+
rubyzip (0.9.9)
|
46
|
+
slowhandcuke (0.0.3)
|
47
|
+
cucumber
|
48
|
+
thor (0.18.1)
|
49
|
+
xamarin-test-cloud (0.9.23)
|
50
|
+
bundler (>= 1.3.0, < 2.0)
|
51
|
+
json
|
52
|
+
rest-client (~> 1.6.7)
|
53
|
+
retriable (~> 1.3.3.1)
|
54
|
+
rubyzip (~> 0.9.9)
|
55
|
+
thor (>= 0.18.1)
|
56
|
+
|
57
|
+
PLATFORMS
|
58
|
+
ruby
|
59
|
+
|
60
|
+
DEPENDENCIES
|
61
|
+
calabash-android!
|
62
|
+
rake (= 10.1.0)
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
load 'lib/calabash-android/helpers.rb'
|
3
|
+
load 'lib/calabash-android/env.rb'
|
3
4
|
|
4
5
|
def build
|
5
6
|
test_server_template_dir = File.join(File.dirname(__FILE__), 'test-server')
|
@@ -9,9 +10,8 @@ def build
|
|
9
10
|
@test_server_dir = File.join(workspace_dir, 'test-server')
|
10
11
|
FileUtils.cp_r(test_server_template_dir, workspace_dir)
|
11
12
|
|
12
|
-
ant_executable = (is_windows? ? "ant.bat" : "ant")
|
13
13
|
args = [
|
14
|
-
|
14
|
+
Env.ant_path,
|
15
15
|
"clean",
|
16
16
|
"package",
|
17
17
|
"-debug",
|
@@ -44,9 +44,6 @@ task :build do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
build
|
47
|
-
|
48
|
-
Rake::Task["install"].execute
|
49
|
-
|
50
47
|
end
|
51
48
|
|
52
49
|
|
data/bin/calabash-android
CHANGED
@@ -1,11 +1,26 @@
|
|
1
1
|
def calabash_build(app)
|
2
|
-
|
3
|
-
|
4
|
-
puts "#{app} is not signed with the configured keystore '#{keystore["keystore_location"]}' Aborting!"
|
5
|
-
exit 1
|
6
|
-
end
|
2
|
+
apk_fingerprint = fingerprint_from_apk(app)
|
3
|
+
log "#{app} was signed with a certificate with fingerprint #{apk_fingerprint}"
|
7
4
|
|
5
|
+
keystores = JavaKeystore.get_keystores
|
6
|
+
keystore = keystores.find { |k| k.fingerprint == apk_fingerprint}
|
7
|
+
|
8
|
+
unless keystore
|
9
|
+
puts "#{app} is not signed with any of the available keystores."
|
10
|
+
puts "Tried the following keystores:"
|
11
|
+
keystores.each do |k|
|
12
|
+
puts k.location
|
13
|
+
end
|
14
|
+
puts ""
|
15
|
+
puts "You can resign the app with #{keystores.first.location} by running:
|
16
|
+
calabash-android resign #{app}"
|
8
17
|
|
18
|
+
puts ""
|
19
|
+
puts "Notice that resigning an app might break some functionality."
|
20
|
+
puts "Getting a copy of the certificate used when the app was build will in general be more reliable."
|
21
|
+
|
22
|
+
exit 1
|
23
|
+
end
|
9
24
|
|
10
25
|
test_server_file_name = test_server_path(app)
|
11
26
|
FileUtils.mkdir_p File.dirname(test_server_file_name) unless File.exist? File.dirname(test_server_file_name)
|
@@ -36,7 +51,7 @@ def calabash_build(app)
|
|
36
51
|
zip_file.add("AndroidManifest.xml", "customAndroidManifest.xml")
|
37
52
|
end
|
38
53
|
end
|
39
|
-
sign_apk("#{workspace_dir}/TestServer.apk", test_server_file_name)
|
54
|
+
keystore.sign_apk("#{workspace_dir}/TestServer.apk", test_server_file_name)
|
40
55
|
begin
|
41
56
|
|
42
57
|
rescue Exception => e
|
@@ -13,7 +13,7 @@ def calabash_setup
|
|
13
13
|
ask_for_setting(:keystore_password, "Please enter the password for the keystore")
|
14
14
|
ask_for_setting(:keystore_alias, "Please enter the alias")
|
15
15
|
|
16
|
-
open('
|
16
|
+
open('calabash_settings', 'w') do |f|
|
17
17
|
f.puts @settings.to_json
|
18
18
|
end
|
19
19
|
puts "Saved your settings to .calabash_settings. You can edit the settings manually or run this setup script again"
|
data/calabash-android.gemspec
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
class Env
|
3
|
+
|
4
|
+
def self.keytool_path
|
5
|
+
if is_windows?
|
6
|
+
"\"#{ENV["JAVA_HOME"]}/bin/keytool.exe\""
|
7
|
+
else
|
8
|
+
"keytool"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.jarsigner_path
|
13
|
+
if is_windows?
|
14
|
+
"\"#{ENV["JAVA_HOME"]}/bin/jarsigner.exe\""
|
15
|
+
else
|
16
|
+
"jarsigner"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.ant_path
|
21
|
+
is_windows? ? "ant.bat" : "ant"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.is_windows?
|
25
|
+
(RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
|
26
|
+
end
|
27
|
+
end
|
@@ -1,7 +1,12 @@
|
|
1
|
+
require "stringio"
|
1
2
|
require 'rexml/document'
|
2
3
|
require 'rexml/xpath'
|
3
4
|
require 'zip/zip'
|
4
5
|
require 'tempfile'
|
6
|
+
require 'popen4'
|
7
|
+
require 'escape'
|
8
|
+
require 'rbconfig'
|
9
|
+
require 'calabash-android/java_keystore'
|
5
10
|
|
6
11
|
include REXML
|
7
12
|
|
@@ -81,20 +86,8 @@ def resign_apk(app_path)
|
|
81
86
|
end
|
82
87
|
|
83
88
|
def sign_apk(app_path, dest_path)
|
84
|
-
|
85
|
-
|
86
|
-
if is_windows?
|
87
|
-
jarsigner_path = "\"#{ENV["JAVA_HOME"]}/bin/jarsigner.exe\""
|
88
|
-
else
|
89
|
-
jarsigner_path = "jarsigner"
|
90
|
-
end
|
91
|
-
|
92
|
-
cmd = "#{jarsigner_path} -sigalg MD5withRSA -digestalg SHA1 -signedjar #{dest_path} -storepass #{keystore["keystore_password"]} -keystore #{keystore["keystore_location"]} \"#{app_path}\" #{keystore["keystore_alias"]}"
|
93
|
-
log cmd
|
94
|
-
unless system(cmd)
|
95
|
-
puts "jarsigner command: #{cmd}"
|
96
|
-
raise "Could not sign app (#{app_path}"
|
97
|
-
end
|
89
|
+
java_keystore = JavaKeystore.get_keystores.first
|
90
|
+
java_keystore.sign_apk(app_path, dest_path)
|
98
91
|
end
|
99
92
|
|
100
93
|
def tools_dir
|
@@ -107,60 +100,8 @@ def android_home_path
|
|
107
100
|
ENV["ANDROID_HOME"].gsub("\\", "/")
|
108
101
|
end
|
109
102
|
|
110
|
-
def read_keystore_info
|
111
|
-
keystore = default_keystore
|
112
|
-
|
113
|
-
if File.exist? ".calabash_settings"
|
114
|
-
keystore = JSON.parse(IO.read(".calabash_settings"))
|
115
|
-
fail_if_key_missing(keystore, "keystore_location")
|
116
|
-
fail_if_key_missing(keystore, "keystore_password")
|
117
|
-
fail_if_key_missing(keystore, "keystore_alias")
|
118
|
-
keystore["keystore_location"] = File.expand_path(keystore["keystore_location"])
|
119
|
-
end
|
120
|
-
keystore["keystore_location"] = put_in_quotes(remove_quotes(keystore["keystore_location"]))
|
121
|
-
keystore
|
122
|
-
end
|
123
|
-
|
124
|
-
def default_keystore
|
125
|
-
{
|
126
|
-
"keystore_location" => File.expand_path(File.join(ENV["HOME"], "/.android/debug.keystore")),
|
127
|
-
"keystore_password" => "android",
|
128
|
-
"keystore_alias" => "androiddebugkey",
|
129
|
-
}
|
130
|
-
end
|
131
|
-
|
132
|
-
def fail_if_key_missing(map, key)
|
133
|
-
raise "Found .calabash_settings but no #{key} defined." unless map[key]
|
134
|
-
end
|
135
|
-
|
136
|
-
def remove_quotes(s)
|
137
|
-
s.gsub(/"/, "")
|
138
|
-
end
|
139
|
-
|
140
|
-
def put_in_quotes(s)
|
141
|
-
%Q{"#{s}"}
|
142
|
-
end
|
143
|
-
|
144
|
-
def keytool_path
|
145
|
-
if is_windows?
|
146
|
-
"\"#{ENV["JAVA_HOME"]}/bin/keytool.exe\""
|
147
|
-
else
|
148
|
-
"keytool"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
def fingerprint_from_keystore
|
153
|
-
keystore_info = read_keystore_info
|
154
|
-
cmd = "#{keytool_path} -v -list -alias #{keystore_info["keystore_alias"]} -keystore #{keystore_info["keystore_location"]} -storepass #{keystore_info["keystore_password"]}"
|
155
|
-
|
156
|
-
log cmd
|
157
|
-
fingerprints = `#{cmd}`
|
158
|
-
md5_fingerprint = extract_md5_fingerprint(fingerprints)
|
159
|
-
log "MD5 fingerprint for keystore (#{keystore_info["keystore_location"]}): #{md5_fingerprint}"
|
160
|
-
md5_fingerprint
|
161
|
-
end
|
162
|
-
|
163
103
|
def fingerprint_from_apk(app_path)
|
104
|
+
app_path = File.expand_path(app_path)
|
164
105
|
Dir.mktmpdir do |tmp_dir|
|
165
106
|
Dir.chdir(tmp_dir) do
|
166
107
|
FileUtils.cp(app_path, "app.apk")
|
@@ -169,10 +110,11 @@ def fingerprint_from_apk(app_path)
|
|
169
110
|
z.extract if /^META-INF\/\w+.(RSA|rsa)/ =~ z.name
|
170
111
|
end
|
171
112
|
rsa_files = Dir["#{tmp_dir}/META-INF/*"]
|
113
|
+
|
172
114
|
raise "No RSA file found in META-INF. Cannot proceed." if rsa_files.empty?
|
173
115
|
raise "More than one RSA file found in META-INF. Cannot proceed." if rsa_files.length > 1
|
174
116
|
|
175
|
-
cmd = "#{keytool_path} -v -printcert -file \"#{rsa_files.first}\""
|
117
|
+
cmd = "#{Env.keytool_path} -v -printcert -file \"#{rsa_files.first}\""
|
176
118
|
log cmd
|
177
119
|
fingerprints = `#{cmd}`
|
178
120
|
md5_fingerprint = extract_md5_fingerprint(fingerprints)
|
@@ -183,18 +125,11 @@ def fingerprint_from_apk(app_path)
|
|
183
125
|
end
|
184
126
|
|
185
127
|
def extract_md5_fingerprint(fingerprints)
|
186
|
-
log fingerprints
|
187
|
-
|
188
128
|
m = fingerprints.scan(/MD5.*((?:[a-fA-F\d]{2}:){15}[a-fA-F\d]{2})/).flatten
|
189
129
|
raise "No MD5 fingerprint found:\n #{fingerprints}" if m.empty?
|
190
130
|
m.first
|
191
131
|
end
|
192
132
|
|
193
|
-
def is_windows?
|
194
|
-
require 'rbconfig'
|
195
|
-
(RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
|
196
|
-
end
|
197
|
-
|
198
133
|
def log(message, error = false)
|
199
134
|
$stdout.puts "#{Time.now.strftime("%Y-%m-%d %H:%M:%S")} - #{message}" if (error or ARGV.include? "-v" or ARGV.include? "--verbose")
|
200
135
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
class JavaKeystore
|
2
|
+
attr_reader :errors, :location, :keystore_alias, :password, :fingerprint
|
3
|
+
def initialize(location, keystore_alias, password)
|
4
|
+
raise "No such file #{location}" unless File.exists?(File.expand_path(location))
|
5
|
+
|
6
|
+
keystore_data = system_with_stdout_on_success(Env.keytool_path, '-list', '-v', '-alias', keystore_alias, '-keystore', location, '-storepass', password)
|
7
|
+
unless keystore_data
|
8
|
+
error = "Could not list certificates in keystore. Probably because the password was incorrect."
|
9
|
+
@errors = [message: error]
|
10
|
+
log error
|
11
|
+
#TODO: Handle the case where password is correct but the alias is missing.
|
12
|
+
end
|
13
|
+
@location = location
|
14
|
+
@keystore_alias = keystore_alias
|
15
|
+
@password = password
|
16
|
+
@fingerprint = extract_md5_fingerprint(keystore_data)
|
17
|
+
end
|
18
|
+
|
19
|
+
def sign_apk(apk_path, dest_path)
|
20
|
+
raise "Cannot sign with a miss configured keystore" if errors
|
21
|
+
raise "No such file: #{apk_path}" unless File.exists?(apk_path)
|
22
|
+
|
23
|
+
unless system_with_stdout_on_success(Env.jarsigner_path, '-sigalg', 'MD5withRSA', '-digestalg', 'SHA1', '-signedjar', dest_path, '-storepass', password, '-keystore', location, apk_path, keystore_alias)
|
24
|
+
raise "Could not sign app: #{apk_path}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def system_with_stdout_on_success(cmd, *args)
|
29
|
+
args = args.clone.unshift cmd
|
30
|
+
|
31
|
+
out, err = nil, nil
|
32
|
+
cmd = Escape.shell_command(args)
|
33
|
+
log "Command: #{cmd}"
|
34
|
+
status = POpen4::popen4(cmd) do |stdout, stderr, stdin, pid|
|
35
|
+
out = stdout.read
|
36
|
+
err = stderr.read
|
37
|
+
end
|
38
|
+
if status.exitstatus == 0
|
39
|
+
out
|
40
|
+
else
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.read_keystore_with_default_password_and_alias(path)
|
46
|
+
path = File.expand_path path
|
47
|
+
|
48
|
+
if File.exists? path
|
49
|
+
keystore = JavaKeystore.new(path, 'androiddebugkey', 'android')
|
50
|
+
if keystore.errors
|
51
|
+
log "Trying to "
|
52
|
+
nil
|
53
|
+
else
|
54
|
+
log "Unlocked keystore at #{path} - fingerprint: #{keystore.fingerprint}"
|
55
|
+
keystore
|
56
|
+
end
|
57
|
+
else
|
58
|
+
log "Trying to read keystore from: #{path} - no such file"
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.get_keystores
|
64
|
+
if keystore = keystore_from_settings
|
65
|
+
keystore
|
66
|
+
else
|
67
|
+
[
|
68
|
+
read_keystore_with_default_password_and_alias(File.join(ENV["HOME"], "/.android/debug.keystore")),
|
69
|
+
read_keystore_with_default_password_and_alias("debug.keystore"),
|
70
|
+
read_keystore_with_default_password_and_alias(File.join(ENV["HOME"], ".local/share/Xamarin/Mono\ for\ Android/debug.keystore")),
|
71
|
+
read_keystore_with_default_password_and_alias(File.join(ENV["HOME"], "AppData/Local/Xamarin/Mono for Android/debug.keystore")),
|
72
|
+
].compact
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.keystore_from_settings
|
77
|
+
keystore = JSON.parse(IO.read(".calabash_settings")) if File.exist? ".calabash_settings"
|
78
|
+
keystore = JSON.parse(IO.read("calabash_settings")) if File.exist? "calabash_settings"
|
79
|
+
return unless keystore
|
80
|
+
fail_if_key_missing(keystore, "keystore_location")
|
81
|
+
fail_if_key_missing(keystore, "keystore_password")
|
82
|
+
fail_if_key_missing(keystore, "keystore_alias")
|
83
|
+
keystore["keystore_location"] = File.expand_path(keystore["keystore_location"])
|
84
|
+
JavaKeystore.new(keystore["keystore_location"], keystore["keystore_alias"], keystore["keystore_password"])
|
85
|
+
end
|
86
|
+
|
87
|
+
def fail_if_key_missing(map, key)
|
88
|
+
raise "Found .calabash_settings but no #{key} defined." unless map[key]
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
Binary file
|
@@ -10,6 +10,7 @@ require 'calabash-android/helpers'
|
|
10
10
|
require 'calabash-android/wait_helpers'
|
11
11
|
require 'calabash-android/touch_helpers'
|
12
12
|
require 'calabash-android/version'
|
13
|
+
require 'calabash-android/env'
|
13
14
|
require 'retriable'
|
14
15
|
require 'cucumber'
|
15
16
|
|
@@ -405,7 +406,7 @@ module Operations
|
|
405
406
|
end
|
406
407
|
|
407
408
|
def adb
|
408
|
-
if is_windows?
|
409
|
+
if Env.is_windows?
|
409
410
|
%Q("#{ENV["ANDROID_HOME"]}\\platform-tools\\adb.exe")
|
410
411
|
else
|
411
412
|
%Q("#{ENV["ANDROID_HOME"]}/platform-tools/adb")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calabash-android
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.10.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Maturana Larsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -122,6 +122,34 @@ dependencies:
|
|
122
122
|
- - '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 0.9.23
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: popen4
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ~>
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.1.2
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ~>
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.1.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: escape
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.0.4
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ~>
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.0.4
|
125
153
|
description: 'calabash-android drives tests for native and hybrid Android apps. '
|
126
154
|
email:
|
127
155
|
- jonas@lesspainful.com
|
@@ -133,6 +161,7 @@ files:
|
|
133
161
|
- .calabash_settings
|
134
162
|
- CHANGES.txt
|
135
163
|
- Gemfile
|
164
|
+
- Gemfile.lock
|
136
165
|
- LICENSE
|
137
166
|
- Rakefile
|
138
167
|
- bin/calabash-android
|
@@ -158,7 +187,9 @@ files:
|
|
158
187
|
- lib/calabash-android/canned_steps.md
|
159
188
|
- lib/calabash-android/color_helper.rb
|
160
189
|
- lib/calabash-android/cucumber.rb
|
190
|
+
- lib/calabash-android/env.rb
|
161
191
|
- lib/calabash-android/helpers.rb
|
192
|
+
- lib/calabash-android/java_keystore.rb
|
162
193
|
- lib/calabash-android/lib/AXMLPrinter2.jar
|
163
194
|
- lib/calabash-android/lib/apktool-cli-1.5.3-SNAPSHOT.jar
|
164
195
|
- lib/calabash-android/lib/manifest_extractor.jar
|
@@ -874,14 +905,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
874
905
|
version: '0'
|
875
906
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
876
907
|
requirements:
|
877
|
-
- - '
|
908
|
+
- - '>'
|
878
909
|
- !ruby/object:Gem::Version
|
879
|
-
version:
|
910
|
+
version: 1.3.1
|
880
911
|
requirements: []
|
881
912
|
rubyforge_project:
|
882
|
-
rubygems_version: 2.0.
|
913
|
+
rubygems_version: 2.0.5
|
883
914
|
signing_key:
|
884
915
|
specification_version: 4
|
885
916
|
summary: Client for calabash-android for automated functional testing on Android
|
886
917
|
test_files: []
|
887
|
-
has_rdoc:
|