ADB 0.2 → 0.3
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/ADB.gemspec +2 -2
- data/ChangeLog +7 -0
- data/features/ADB.feature +21 -0
- data/features/step_definitions/adb_steps.rb +49 -1
- data/features/support/env.rb +1 -1
- data/lib/ADB.rb +52 -0
- data/lib/ADB/version.rb +1 -1
- data/spec/lib/ADB_spec.rb +20 -0
- metadata +4 -8
data/ADB.gemspec
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
require File.expand_path('../lib/ADB/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Jeffrey S. Morgan"]
|
6
|
-
gem.email = ["jeff.morgan@leandog.com"]
|
5
|
+
gem.authors = ["Jeffrey S. Morgan", "Joel Byler"]
|
6
|
+
gem.email = ["jeff.morgan@leandog.com", "joelbyler@gmail.com"]
|
7
7
|
gem.description = %q{Simple wrapper over Android Debug Bridge command-line tool}
|
8
8
|
gem.summary = %q{Simple wrapper over Android Debug Bridge command-line tool}
|
9
9
|
gem.homepage = "http://github.com/cheezy/ADB"
|
data/ChangeLog
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== Release 0.3 / 2012-8-22
|
2
|
+
* Enhancements
|
3
|
+
* Added remount method (mounts /system as root)
|
4
|
+
* Added push method to push files to a device
|
5
|
+
* Added pull method to pull files from a device
|
6
|
+
* Added root method
|
7
|
+
|
1
8
|
=== Release 0.2 / 2012-8-18
|
2
9
|
* Enhancements
|
3
10
|
* Added forward method
|
data/features/ADB.feature
CHANGED
@@ -33,3 +33,24 @@ Feature: Using the ADB module
|
|
33
33
|
Given the adb server is started
|
34
34
|
And I am connected to the local device
|
35
35
|
Then I should be able to forward "tcp:7777" to "tcp:5555"
|
36
|
+
|
37
|
+
Scenario: Remount the system partition for read-write access
|
38
|
+
Given the adb server is started
|
39
|
+
And I am connected to the local device
|
40
|
+
Then I can remount the system partition
|
41
|
+
|
42
|
+
Scenario: Restart adb in root mode
|
43
|
+
Given the adb server is started
|
44
|
+
And I am connected to the local device
|
45
|
+
Then I can attain root privileges
|
46
|
+
|
47
|
+
Scenario: Push a file
|
48
|
+
Given the adb server is started
|
49
|
+
And I am connected to the local device
|
50
|
+
Then I should be able to push a file to the local device
|
51
|
+
|
52
|
+
Scenario: Pull a file
|
53
|
+
Given the adb server is started
|
54
|
+
Then I should be able to pull a file from the local device
|
55
|
+
|
56
|
+
|
@@ -7,6 +7,8 @@ Then /^the adb server should be running$/ do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
Then /^I should be able to connect to a local device$/ do
|
10
|
+
sn = devices[0]
|
11
|
+
wait_for_device({:serial => sn}, 60)
|
10
12
|
connect('localhost')
|
11
13
|
last_stdout.should include "connected to localhost"
|
12
14
|
disconnect('localhost')
|
@@ -39,7 +41,7 @@ When /^I change the devices date and time to (.*?)$/ do |date_arg|
|
|
39
41
|
shell("date -s #{format_date_for_adb(date)}", {:serial => sn}, 60)
|
40
42
|
end
|
41
43
|
|
42
|
-
Then /^the device time should be
|
44
|
+
Then /^the device time should be (.*?)$/ do |date_str|
|
43
45
|
last_stdout.should include date_str
|
44
46
|
end
|
45
47
|
|
@@ -47,3 +49,49 @@ Then /^I should be able to forward "(.*?)" to "(.*?)"$/ do |source, target|
|
|
47
49
|
sn = devices[0]
|
48
50
|
forward(source, target, {:serial => sn})
|
49
51
|
end
|
52
|
+
|
53
|
+
Then /^I can remount the system partition$/ do
|
54
|
+
sn = devices[0]
|
55
|
+
wait_for_device({:serial => sn}, 60)
|
56
|
+
remount({:serial => sn})
|
57
|
+
last_stdout.should include 'remount succeeded'
|
58
|
+
end
|
59
|
+
|
60
|
+
Then /^I can attain root privileges$/ do
|
61
|
+
sn = devices[0]
|
62
|
+
wait_for_device({:serial => sn}, 60)
|
63
|
+
root({:serial => sn})
|
64
|
+
#TODO: how to assert?
|
65
|
+
#last_stdout.should include 'remount succeeded'
|
66
|
+
end
|
67
|
+
|
68
|
+
Then /^I should be able to push a file to the local device$/ do
|
69
|
+
# confirm that the file doesn't already exist
|
70
|
+
sn = devices[0]
|
71
|
+
wait_for_device({:serial => sn}, 60)
|
72
|
+
remount({:serial => sn})
|
73
|
+
shell('ls /system/cuke_test_file.txt', {:serial => sn})
|
74
|
+
last_stdout.should include 'No such file or directory'
|
75
|
+
|
76
|
+
# create the temp file
|
77
|
+
File.open('cuke_test_file.txt', 'w'){ |f| f.write('Temporary file for adb testing. If found, please delete.') }
|
78
|
+
|
79
|
+
# push the file
|
80
|
+
push('cuke_test_file.txt', '/system/cuke_test_file.txt', {:serial => sn})
|
81
|
+
last_stderr.should_not include 'failed to copy'
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
Then /^I should be able to pull a file from the local device$/ do
|
86
|
+
# confirm that the file exists on the device and not locally
|
87
|
+
sn = devices[0]
|
88
|
+
wait_for_device({:serial => sn}, 60)
|
89
|
+
remount({:serial => sn})
|
90
|
+
shell("touch /system/cuke_test_file.txt", {:serial => sn})
|
91
|
+
|
92
|
+
# pull the file
|
93
|
+
pull('/system/cuke_test_file.txt', 'cuke_test_file.txt', {:serial => sn})
|
94
|
+
|
95
|
+
# confirm that the file was created
|
96
|
+
File.exists?('cuke_test_file.txt').should == true
|
97
|
+
end
|
data/features/support/env.rb
CHANGED
data/lib/ADB.rb
CHANGED
@@ -146,6 +146,58 @@ module ADB
|
|
146
146
|
execute_adb_with(timeout, "#{which_one(target)} forward #{source} #{destination}")
|
147
147
|
end
|
148
148
|
|
149
|
+
#
|
150
|
+
# push a file
|
151
|
+
#
|
152
|
+
# @param the fully quanified source (local) file name
|
153
|
+
# @param the fully quanified destination (device) file name
|
154
|
+
# @param [Hash] which device to wait for. Valid keys are :device,
|
155
|
+
# :emulator, and :serial.
|
156
|
+
# @param timeout value for the command to complete. Defaults to 30
|
157
|
+
# seconds.
|
158
|
+
#
|
159
|
+
def push(source, destination, target={}, timeout=30)
|
160
|
+
execute_adb_with(timeout, "#{which_one(target)} push #{source} #{destination}")
|
161
|
+
end
|
162
|
+
|
163
|
+
#
|
164
|
+
# push a file
|
165
|
+
#
|
166
|
+
# @param the fully quanified source (device) file name
|
167
|
+
# @param the fully quanified destination (local) file name
|
168
|
+
# @param [Hash] which device to wait for. Valid keys are :device,
|
169
|
+
# :emulator, and :serial.
|
170
|
+
# @param timeout value for the command to complete. Defaults to 30
|
171
|
+
# seconds.
|
172
|
+
#
|
173
|
+
def pull(source, destination, target={}, timeout=30)
|
174
|
+
execute_adb_with(timeout, "#{which_one(target)} pull #{source} #{destination}")
|
175
|
+
end
|
176
|
+
|
177
|
+
#
|
178
|
+
# remount /system as read-write
|
179
|
+
#
|
180
|
+
# @param [Hash] which device to wait for. Valid keys are :device,
|
181
|
+
# :emulator, and :serial.
|
182
|
+
# @param timeout value for the command to complete. Defaults to 30
|
183
|
+
# seconds.
|
184
|
+
#
|
185
|
+
def remount(target={}, timeout=30)
|
186
|
+
execute_adb_with(timeout, "#{which_one(target)} remount")
|
187
|
+
end
|
188
|
+
|
189
|
+
#
|
190
|
+
# restarts the adb daemon with root permissions
|
191
|
+
#
|
192
|
+
# @param [Hash] which device to wait for. Valid keys are :device,
|
193
|
+
# :emulator, and :serial.
|
194
|
+
# @param timeout value for the command to complete. Defaults to 30
|
195
|
+
# seconds.
|
196
|
+
#
|
197
|
+
def root(target={}, timeout=30)
|
198
|
+
execute_adb_with(timeout, "#{which_one(target)} root")
|
199
|
+
end
|
200
|
+
|
149
201
|
private
|
150
202
|
|
151
203
|
def execute_adb_with(timeout, arguments)
|
data/lib/ADB/version.rb
CHANGED
data/spec/lib/ADB_spec.rb
CHANGED
@@ -45,7 +45,27 @@ describe ADB do
|
|
45
45
|
should_call_adb_with('forward', 'src', 'dest')
|
46
46
|
ADB.forward('src', 'dest')
|
47
47
|
end
|
48
|
+
|
49
|
+
it "should push a file" do
|
50
|
+
should_call_adb_with('push', '/usr/foo.txt', '/sdcard/bar.txt')
|
51
|
+
ADB.push('/usr/foo.txt', '/sdcard/bar.txt')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should pull a file" do
|
55
|
+
should_call_adb_with('pull', '/usr/foo.txt', '/sdcard/bar.txt')
|
56
|
+
ADB.pull('/usr/foo.txt', '/sdcard/bar.txt')
|
57
|
+
end
|
48
58
|
|
59
|
+
it "should be able to remount the /system drive" do
|
60
|
+
should_call_adb_with('remount')
|
61
|
+
ADB.remount
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be able to provide root access" do
|
65
|
+
should_call_adb_with('root')
|
66
|
+
ADB.root
|
67
|
+
end
|
68
|
+
|
49
69
|
context "when connecting to a device" do
|
50
70
|
before(:each) do
|
51
71
|
ADB.should_receive(:last_stdout).and_return("connected to localhost")
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ADB
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jeffrey S. Morgan
|
9
|
+
- Joel Byler
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: childprocess
|
@@ -62,6 +63,7 @@ dependencies:
|
|
62
63
|
description: Simple wrapper over Android Debug Bridge command-line tool
|
63
64
|
email:
|
64
65
|
- jeff.morgan@leandog.com
|
66
|
+
- joelbyler@gmail.com
|
65
67
|
executables: []
|
66
68
|
extensions: []
|
67
69
|
extra_rdoc_files: []
|
@@ -98,18 +100,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
100
|
- - ! '>='
|
99
101
|
- !ruby/object:Gem::Version
|
100
102
|
version: '0'
|
101
|
-
segments:
|
102
|
-
- 0
|
103
|
-
hash: -1607274235838869715
|
104
103
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
104
|
none: false
|
106
105
|
requirements:
|
107
106
|
- - ! '>='
|
108
107
|
- !ruby/object:Gem::Version
|
109
108
|
version: '0'
|
110
|
-
segments:
|
111
|
-
- 0
|
112
|
-
hash: -1607274235838869715
|
113
109
|
requirements: []
|
114
110
|
rubyforge_project:
|
115
111
|
rubygems_version: 1.8.24
|