calabash-android 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +9 -0
- data/bin/calabash-android +7 -0
- data/bin/calabash-android-build.rb +5 -24
- data/bin/calabash-android-helpers.rb +2 -0
- data/features-skeleton/support/app_life_cycle_hooks.rb +1 -4
- data/lib/calabash-android/canned_steps.md +3 -0
- data/lib/calabash-android/helpers.rb +50 -1
- data/lib/calabash-android/lib/TestServer.apk +0 -0
- data/lib/calabash-android/operations.rb +4 -2
- data/lib/calabash-android/steps/enter_text_steps.rb +3 -1
- data/lib/calabash-android/version.rb +1 -1
- data/test-server/instrumentation-backend/project.properties +1 -1
- data/test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/Result.java +1 -2
- metadata +2 -2
data/CHANGES.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
0.3.7:
|
2
|
+
Added calabash-android resign command
|
3
|
+
|
4
|
+
Fixed bug: No longer reuses a single result for every success result
|
5
|
+
|
6
|
+
Will give the app a few seconds to get up and running before failing
|
7
|
+
|
8
|
+
Fixed skeleton app_life_cycle_hook so screenshots are now taken before the app is shut down
|
9
|
+
|
1
10
|
0.3.6:
|
2
11
|
Will fail if the keyguard cannot be disabled when starting the app.
|
3
12
|
|
data/bin/calabash-android
CHANGED
@@ -79,6 +79,13 @@ elsif cmd == 'extract-manifest'
|
|
79
79
|
|
80
80
|
puts manifest ARGV.first
|
81
81
|
exit 0
|
82
|
+
elsif cmd == 'resign'
|
83
|
+
unless File.exist? ARGV.first
|
84
|
+
puts "No such file #{ARGV.first}"
|
85
|
+
exit 1
|
86
|
+
end
|
87
|
+
resign_apk(ARGV.first)
|
88
|
+
|
82
89
|
elsif cmd == 'version'
|
83
90
|
puts Calabash::Android::VERSION
|
84
91
|
exit 0
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'zip/zip'
|
2
1
|
def calabash_build(app)
|
3
2
|
keystore = read_keystore_info()
|
4
3
|
|
@@ -23,34 +22,16 @@ def calabash_build(app)
|
|
23
22
|
|
24
23
|
Zip::ZipFile.new("dummy.apk").extract("AndroidManifest.xml","customAndroidManifest.xml")
|
25
24
|
Zip::ZipFile.open("TestServer.apk") do |zip_file|
|
26
|
-
zip_file.add("AndroidManifest.xml", "customAndroidManifest.xml")
|
25
|
+
zip_file.add("AndroidManifest.xml", "customAndroidManifest.xml")
|
27
26
|
end
|
28
27
|
end
|
29
|
-
|
30
|
-
|
31
|
-
else
|
32
|
-
jarsigner_path = "jarsigner"
|
33
|
-
end
|
28
|
+
sign_apk("#{workspace_dir}/TestServer.apk", test_server_file_name)
|
29
|
+
begin
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
puts "jarsigner command: #{cmd}"
|
31
|
+
rescue Exception => e
|
32
|
+
log e
|
38
33
|
raise "Could not sign test server"
|
39
34
|
end
|
40
35
|
end
|
41
36
|
puts "Done signing the test server. Moved it to #{test_server_file_name}"
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
def read_keystore_info
|
46
|
-
if File.exist? ".calabash_settings"
|
47
|
-
JSON.parse(IO.read(".calabash_settings"))
|
48
|
-
else
|
49
|
-
{
|
50
|
-
"keystore_location" => "#{ENV["HOME"]}/.android/debug.keystore",
|
51
|
-
"keystore_password" => "android",
|
52
|
-
"keystore_alias" => "androiddebugkey",
|
53
|
-
"keystore_alias_password" => "android"
|
54
|
-
}
|
55
|
-
end
|
56
37
|
end
|
@@ -19,6 +19,8 @@ def print_usage
|
|
19
19
|
generate a features folder structure.
|
20
20
|
setup
|
21
21
|
sets up a non-default keystore to use with this test project.
|
22
|
+
resign <apk>
|
23
|
+
resigns the app with the currently configured keystore.
|
22
24
|
build <apk>
|
23
25
|
builds the test server that will be used when testing the app.
|
24
26
|
run <apk>
|
@@ -51,6 +51,9 @@ Find the datepicker by content description and changes the date.
|
|
51
51
|
Then /^I enter "([^\"]*)" into input field number (\d+)$/ do |text, number|
|
52
52
|
Enters the specified text into the input field with index `number`.
|
53
53
|
|
54
|
+
Then /^I enter text "([^\"]*)" into field with id "([^\"]*)"$/ do |text, view_id|
|
55
|
+
Enters Text into the input field with id `view_id`.
|
56
|
+
|
54
57
|
Then /^I enter "([^\"]*)" as "([^\"]*)"$/ do |text, target|
|
55
58
|
Then /^I enter "([^\"]*)" into "([^\"]*)"$/ do |text, target|
|
56
59
|
Enters the specified text into the input field that has a content desciption that matches the provided target.
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'rexml/document'
|
2
2
|
require 'rexml/xpath'
|
3
|
+
require 'zip/zip'
|
4
|
+
require 'tempfile'
|
3
5
|
|
4
6
|
include REXML
|
5
7
|
|
@@ -10,7 +12,7 @@ def package_name(app)
|
|
10
12
|
manifest = Document.new(manifest(app))
|
11
13
|
manifest.root.attributes['package']
|
12
14
|
end
|
13
|
-
|
15
|
+
|
14
16
|
def main_activity(app)
|
15
17
|
manifest = Document.new(manifest(app))
|
16
18
|
main_activity = manifest.elements["//action[@name='android.intent.action.MAIN']/../.."].attributes['name']
|
@@ -36,6 +38,53 @@ def test_server_path(apk_file_path)
|
|
36
38
|
"test_servers/#{checksum(apk_file_path)}_#{Calabash::Android::VERSION}.apk"
|
37
39
|
end
|
38
40
|
|
41
|
+
def resign_apk(app_path)
|
42
|
+
log "Resign apk"
|
43
|
+
#Delete META-INF/*
|
44
|
+
unsigned_path = Tempfile.new('unsigned.apk').path
|
45
|
+
FileUtils.cp(app_path, unsigned_path)
|
46
|
+
|
47
|
+
to_remove = Zip::ZipFile.foreach(unsigned_path).find_all { |e| /^META-INF\// =~ e.name}.collect &:name
|
48
|
+
|
49
|
+
Zip::ZipFile.open(unsigned_path) do |zip_file|
|
50
|
+
to_remove.each do |x|
|
51
|
+
log "Removing #{x}"
|
52
|
+
zip_file.remove x
|
53
|
+
end
|
54
|
+
end
|
55
|
+
sign_apk(unsigned_path, app_path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def sign_apk(app_path, dest_path)
|
59
|
+
keystore = read_keystore_info()
|
60
|
+
|
61
|
+
if is_windows?
|
62
|
+
jarsigner_path = "\"#{ENV["JAVA_HOME"]}/bin/jarsigner.exe\""
|
63
|
+
else
|
64
|
+
jarsigner_path = "jarsigner"
|
65
|
+
end
|
66
|
+
|
67
|
+
cmd = "#{jarsigner_path} -sigalg MD5withRSA -digestalg SHA1 -signedjar #{dest_path} -storepass #{keystore["keystore_password"]} -keystore \"#{File.expand_path keystore["keystore_location"]}\" #{app_path} #{keystore["keystore_alias"]}"
|
68
|
+
log cmd
|
69
|
+
unless system(cmd)
|
70
|
+
puts "jarsigner command: #{cmd}"
|
71
|
+
raise "Could not sign app (#{app_path}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def read_keystore_info
|
76
|
+
if File.exist? ".calabash_settings"
|
77
|
+
JSON.parse(IO.read(".calabash_settings"))
|
78
|
+
else
|
79
|
+
{
|
80
|
+
"keystore_location" => "#{ENV["HOME"]}/.android/debug.keystore",
|
81
|
+
"keystore_password" => "android",
|
82
|
+
"keystore_alias" => "androiddebugkey",
|
83
|
+
"keystore_alias_password" => "android"
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
39
88
|
def is_windows?
|
40
89
|
require 'rbconfig'
|
41
90
|
(RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/)
|
Binary file
|
@@ -167,7 +167,7 @@ module Operations
|
|
167
167
|
end
|
168
168
|
|
169
169
|
def app_running?
|
170
|
-
`#{adb_command} shell ps`.include?(package_name(@app_path))
|
170
|
+
`#{adb_command} shell ps`.include?(ENV["PROCESS_NAME"] || package_name(@app_path))
|
171
171
|
end
|
172
172
|
|
173
173
|
def keyguard_enabled?
|
@@ -310,7 +310,9 @@ module Operations
|
|
310
310
|
log cmd
|
311
311
|
raise "Could not execute command to start test server" unless system("#{cmd} 2>&1")
|
312
312
|
|
313
|
-
|
313
|
+
retriable :tries => 10, :interval => 1 do
|
314
|
+
raise "App did not start" unless app_running?
|
315
|
+
end
|
314
316
|
|
315
317
|
begin
|
316
318
|
retriable :tries => 10, :interval => 3 do
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
Then /^I enter "([^\"]*)" as "([^\"]*)"$/ do |text, target|
|
3
2
|
performAction('enter_text_into_named_field', text, target)
|
4
3
|
end
|
@@ -19,3 +18,6 @@ Then /^I clear input field number (\d+)$/ do |number|
|
|
19
18
|
performAction('clear_numbered_field',number)
|
20
19
|
end
|
21
20
|
|
21
|
+
Then /^I enter text "([^\"]*)" into field with id "([^\"]*)"$/ do |text, view_id|
|
22
|
+
performAction('enter_text_into_id_field', text, view_id)
|
23
|
+
end
|
@@ -7,7 +7,6 @@ import java.util.ArrayList;
|
|
7
7
|
import java.util.List;
|
8
8
|
|
9
9
|
public class Result {
|
10
|
-
private static Result successResult = new Result(true);
|
11
10
|
|
12
11
|
boolean success;
|
13
12
|
String message;
|
@@ -62,7 +61,7 @@ public class Result {
|
|
62
61
|
}
|
63
62
|
|
64
63
|
public static Result successResult() {
|
65
|
-
return
|
64
|
+
return new Result(true);
|
66
65
|
}
|
67
66
|
|
68
67
|
public static Result failedResult() {
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calabash-android
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|