rubotium 0.0.17 → 0.0.18
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/lib/rubotium/adb/commands/command.rb +1 -1
- data/lib/rubotium/adb/devices.rb +9 -5
- data/lib/rubotium/apk/android_apk.rb +3 -3
- data/lib/rubotium/cmd.rb +30 -2
- data/lib/rubotium/cmd_result.rb +10 -0
- data/lib/rubotium/version.rb +1 -1
- data/lib/rubotium.rb +1 -0
- data/spec/fixtures/adb_devices_results.rb +10 -6
- data/spec/lib/rubotium/adb/adb_devices_spec.rb +18 -5
- data/spec/lib/rubotium/adb/commands/command_spec.rb +4 -4
- data/spec/lib/rubotium/apk/android_apk_spec.rb +4 -4
- data/test.rb +8 -39
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b9bfc8633530e1490ee76cc637163c96b6b3dbc
|
4
|
+
data.tar.gz: 4d65fbd91f0bd74450d76258881a35a680238f86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8ce8e1a7e9f348fb2d6cc6fa6760a322e984dde2f73177f7a9987fdb08df5404394dd147a2b2bf435d130e313f0c61a3b96abe9cd1d2ed81538c50b0d15c7b9
|
7
|
+
data.tar.gz: 08b5304e3cac70a3db5270e6fe175075206049afb01fd4c15fb4ea84651882cff8279308a4485bb2fec750a5284bab0faca744a9933325e7fefc9430c014fd05
|
data/lib/rubotium/adb/devices.rb
CHANGED
@@ -3,7 +3,7 @@ module Rubotium
|
|
3
3
|
class Devices
|
4
4
|
|
5
5
|
def attached
|
6
|
-
|
6
|
+
get_device_list.map{|device_serial|
|
7
7
|
create_device(device_serial)
|
8
8
|
}
|
9
9
|
end
|
@@ -14,12 +14,16 @@ module Rubotium
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def adb_devices_command
|
17
|
-
CMD.run_command('adb
|
17
|
+
CMD.run_command('adb kill-server')
|
18
|
+
CMD.run_command('adb start-server')
|
19
|
+
CMD.run_command('adb devices', { :timeout => 5 } ).result
|
18
20
|
end
|
19
21
|
|
20
|
-
def
|
21
|
-
|
22
|
-
list.
|
22
|
+
def get_device_list
|
23
|
+
tries = 4
|
24
|
+
while ((list = adb_devices_command.split("\n")[1..-1]).empty? && tries > 0)
|
25
|
+
tries -= 1
|
26
|
+
end
|
23
27
|
attached_devices list
|
24
28
|
end
|
25
29
|
|
@@ -26,15 +26,15 @@ module Rubotium
|
|
26
26
|
|
27
27
|
def results
|
28
28
|
@results ||= aapt.dump(@path)
|
29
|
-
if
|
30
|
-
raise(RuntimeError, @results)
|
29
|
+
if @results.status_code != 0
|
30
|
+
raise(RuntimeError, @results.result)
|
31
31
|
end
|
32
32
|
@results
|
33
33
|
end
|
34
34
|
|
35
35
|
def parsed_aapt
|
36
36
|
vars = Hash.new
|
37
|
-
results.split("\n").each do |line|
|
37
|
+
results.result.split("\n").each do |line|
|
38
38
|
key, value = _parse_line(line)
|
39
39
|
next if key.nil?
|
40
40
|
if vars.key?(key)
|
data/lib/rubotium/cmd.rb
CHANGED
@@ -1,17 +1,45 @@
|
|
1
1
|
require 'timeout'
|
2
2
|
module Rubotium
|
3
3
|
class CMD
|
4
|
+
attr_reader :read, :write
|
5
|
+
attr_reader :command_to_run, :buffer, :pid
|
6
|
+
|
4
7
|
class << self
|
8
|
+
|
5
9
|
def run_command(command_to_run, opts = {})
|
6
10
|
begin
|
7
|
-
Timeout::timeout(opts[:timeout] ||
|
11
|
+
Timeout::timeout(opts[:timeout] || 150) {
|
8
12
|
Rubotium.logger.debug "[EXECUTING]: #{command_to_run}"
|
9
|
-
|
13
|
+
new(command_to_run).execute
|
10
14
|
}
|
11
15
|
rescue Timeout::Error
|
12
16
|
""
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
20
|
+
|
21
|
+
def initialize(command_to_run)
|
22
|
+
@command_to_run = command_to_run
|
23
|
+
@read, @write = IO.pipe
|
24
|
+
@buffer = ''
|
25
|
+
end
|
26
|
+
|
27
|
+
def execute
|
28
|
+
spawn_process
|
29
|
+
read_buffer
|
30
|
+
_, status = Process.waitpid2(pid)
|
31
|
+
CmdResult.new(status, buffer)
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_buffer
|
35
|
+
while (!read.closed? && !read.eof? && line=read.readline)
|
36
|
+
buffer << line
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def spawn_process
|
41
|
+
@pid = spawn(command_to_run, out: write, err: write)
|
42
|
+
write.close
|
43
|
+
end
|
16
44
|
end
|
17
45
|
end
|
data/lib/rubotium/version.rb
CHANGED
data/lib/rubotium.rb
CHANGED
@@ -3,19 +3,23 @@ module Fixtures
|
|
3
3
|
module Devices
|
4
4
|
class << self
|
5
5
|
def two_devices_attached_one_is_offline
|
6
|
-
"List of devices attached \nemulator-5554\toffline\nemulator-5556\tdevice\n\n"
|
6
|
+
Rubotium::CmdResult.new(0,"List of devices attached \nemulator-5554\toffline\nemulator-5556\tdevice\n\n")
|
7
7
|
end
|
8
8
|
|
9
9
|
def two_devices_attached
|
10
|
-
"List of devices attached \nemulator-5554\tdevice\nemulator-5556\tdevice\n\n"
|
10
|
+
Rubotium::CmdResult.new(0, "List of devices attached \nemulator-5554\tdevice\nemulator-5556\tdevice\n\n")
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
"List of devices attached \nemulator-5554\toffline\n\n"
|
13
|
+
def one_device_attached_and_offline
|
14
|
+
Rubotium::CmdResult.new(0, "List of devices attached \nemulator-5554\toffline\n\n")
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
"List of devices attached \nemulator-5554\tdevice\n\n"
|
17
|
+
def one_device_attached
|
18
|
+
Rubotium::CmdResult.new(0, "List of devices attached \nemulator-5554\tdevice\n\n")
|
19
|
+
end
|
20
|
+
|
21
|
+
def no_devices_attached
|
22
|
+
Rubotium::CmdResult.new(0, "List of devices attached \n\n")
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
@@ -9,9 +9,9 @@ describe Rubotium::Adb::Devices do
|
|
9
9
|
}
|
10
10
|
end
|
11
11
|
|
12
|
-
context '
|
12
|
+
context 'when one device is attached' do
|
13
13
|
before do
|
14
|
-
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.
|
14
|
+
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.one_device_attached)
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should return one device' do
|
@@ -32,7 +32,7 @@ describe Rubotium::Adb::Devices do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
context '
|
35
|
+
context 'when two devices are attached and one is offline' do
|
36
36
|
before do
|
37
37
|
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.two_devices_attached_one_is_offline)
|
38
38
|
end
|
@@ -45,11 +45,24 @@ describe Rubotium::Adb::Devices do
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
context '
|
48
|
+
context 'when one device is attached and offline' do
|
49
49
|
before do
|
50
|
-
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.
|
50
|
+
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.one_device_attached_and_offline)
|
51
51
|
end
|
52
|
+
it 'should return zero devices if none are online' do
|
53
|
+
devices.attached.should == []
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when no devices are attached' do
|
58
|
+
it 'should run adb_devices_command 5 times' do
|
59
|
+
devices.should_receive(:adb_devices_command).exactly(5).times
|
60
|
+
.and_return(Fixtures::Adb::Devices.no_devices_attached.result)
|
61
|
+
devices.attached
|
62
|
+
end
|
63
|
+
|
52
64
|
it 'should return zero devices if none are attached' do
|
65
|
+
Rubotium::CMD.stub(:run_command).and_return(Fixtures::Adb::Devices.no_devices_attached)
|
53
66
|
devices.attached.should == []
|
54
67
|
end
|
55
68
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Rubotium::Adb::Commands::Command do
|
4
4
|
let(:subject) { described_class.new(serial) }
|
5
5
|
let(:adb_command) { 'the command' }
|
6
|
-
let(:result) { 'result' }
|
6
|
+
let(:result) { Rubotium::CmdResult.new(0, 'result') }
|
7
7
|
let(:command_to_run) { double(Object) }
|
8
8
|
|
9
9
|
before do
|
@@ -16,7 +16,7 @@ describe Rubotium::Adb::Commands::Command do
|
|
16
16
|
let(:shell_command) { "adb #{adb_command}" }
|
17
17
|
|
18
18
|
it 'executes the command without a serial' do
|
19
|
-
expect(subject.execute(command_to_run)).to eq result
|
19
|
+
expect(subject.execute(command_to_run)).to eq 'result'
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -25,7 +25,7 @@ describe Rubotium::Adb::Commands::Command do
|
|
25
25
|
let(:shell_command) { "adb #{adb_command}" }
|
26
26
|
|
27
27
|
it 'executes the command without a serial' do
|
28
|
-
expect(subject.execute(command_to_run)).to eq result
|
28
|
+
expect(subject.execute(command_to_run)).to eq 'result'
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -34,7 +34,7 @@ describe Rubotium::Adb::Commands::Command do
|
|
34
34
|
let(:shell_command) { "adb -s #{serial} #{adb_command}" }
|
35
35
|
|
36
36
|
it 'executes the command with a serial' do
|
37
|
-
expect(subject.execute(command_to_run)).to eq result
|
37
|
+
expect(subject.execute(command_to_run)).to eq 'result'
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -24,8 +24,8 @@ describe Rubotium::Apk::AndroidApk do
|
|
24
24
|
let(:apk) { described_class.new(aapt, dummy_file_path) }
|
25
25
|
|
26
26
|
it 'should raise exception' do
|
27
|
-
expect(aapt).to receive(:dump).and_return "W/zipro (77199): Error opening archive spec/lib/rubotium/apk/mock/dummy.apk: Invalid file
|
28
|
-
ERROR: dump failed because assets could not be loaded"
|
27
|
+
expect(aapt).to receive(:dump).and_return Rubotium::CmdResult.new(1, "W/zipro (77199): Error opening archive spec/lib/rubotium/apk/mock/dummy.apk: Invalid file
|
28
|
+
ERROR: dump failed because assets could not be loaded")
|
29
29
|
expect{apk.package_name}.to raise_error(RuntimeError)
|
30
30
|
end
|
31
31
|
end
|
@@ -34,7 +34,7 @@ ERROR: dump failed because assets could not be loaded"
|
|
34
34
|
let(:apk) { described_class.new(aapt, sample_file_path) }
|
35
35
|
|
36
36
|
it 'should read package_name' do
|
37
|
-
expect(aapt).to receive(:dump).and_return "package: name='com.example.sample' versionCode='1' versionName='1.0' platformBuildVersionName=''
|
37
|
+
expect(aapt).to receive(:dump).and_return Rubotium::CmdResult.new(0, "package: name='com.example.sample' versionCode='1' versionName='1.0' platformBuildVersionName=''
|
38
38
|
sdkVersion:'7'
|
39
39
|
targetSdkVersion:'15'
|
40
40
|
application-label:'sample'
|
@@ -50,7 +50,7 @@ feature-group: label=''
|
|
50
50
|
supports-screens: 'small' 'normal' 'large' 'xlarge'
|
51
51
|
supports-any-density: 'true'
|
52
52
|
locales: '--_--' 'ja'
|
53
|
-
densities: '160' '240' '320'"
|
53
|
+
densities: '160' '240' '320'")
|
54
54
|
expect(apk.package_name).to eql 'com.example.sample'
|
55
55
|
end
|
56
56
|
|
data/test.rb
CHANGED
@@ -1,42 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require 'parallel'
|
2
2
|
|
3
|
-
|
4
|
-
include Observable
|
3
|
+
q = Queue.new
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
(0..10).to_a.each{|e| q.push(e)}
|
6
|
+
b = (1..4).to_a
|
7
|
+
Parallel.map(b, :in_processes => 10){|executor|
|
8
|
+
until(q.empty?)
|
9
|
+
puts q.pop
|
8
10
|
end
|
9
|
-
|
10
|
-
def test_notify(msg)
|
11
|
-
notify_observers(msg)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Observer
|
16
|
-
def initialize(ticker, name)
|
17
|
-
@ticker = ticker
|
18
|
-
@name = name
|
19
|
-
ticker.add_observer(self)
|
20
|
-
end
|
21
|
-
|
22
|
-
def unsubscribe
|
23
|
-
@ticker.delete_observer(self)
|
24
|
-
end
|
25
|
-
|
26
|
-
def update(*args)
|
27
|
-
puts @name
|
28
|
-
p *args
|
29
|
-
end
|
30
|
-
|
31
|
-
def message_missing(*args)
|
32
|
-
puts @name
|
33
|
-
p args
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
ticker = Ticker.new()
|
40
|
-
observer = Observer.new(ticker, "observer1")
|
41
|
-
|
42
|
-
|
11
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubotium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Slawomir Smiechura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -160,6 +160,7 @@ files:
|
|
160
160
|
- lib/rubotium/apk/aapt.rb
|
161
161
|
- lib/rubotium/apk/android_apk.rb
|
162
162
|
- lib/rubotium/cmd.rb
|
163
|
+
- lib/rubotium/cmd_result.rb
|
163
164
|
- lib/rubotium/device.rb
|
164
165
|
- lib/rubotium/devices.rb
|
165
166
|
- lib/rubotium/formatters/html_formatter.css
|