ruboto 1.1.2 → 1.2.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -6
- data/RELEASE_CANDICATE_DOC.md +5 -3
- data/RELEASE_DOC.md +32 -11
- data/Rakefile +86 -36
- data/assets/rakelib/ruboto.rake +33 -14
- data/assets/rakelib/ruboto.stdlib.rake +1 -1
- data/assets/res/layout/get_ruboto_core.xml +1 -2
- data/assets/src/RubotoService.java +19 -2
- data/assets/src/org/ruboto/JRubyAdapter.java +4 -0
- data/assets/src/org/ruboto/SplashActivity.java +17 -17
- data/assets/src/ruboto/base.rb +13 -4
- data/assets/src/ruboto/package.rb +12 -3
- data/assets/src/ruboto/service.rb +45 -8
- data/assets/src/ruboto/widget.rb +82 -39
- data/assets/test/src/test_helper.rb +4 -0
- data/lib/ruboto/commands/base.rb +29 -17
- data/lib/ruboto/sdk_versions.rb +1 -1
- data/lib/ruboto/util/emulator.rb +49 -33
- data/lib/ruboto/util/setup.rb +5 -1
- data/lib/ruboto/util/update.rb +68 -22
- data/lib/ruboto/util/xml_element.rb +5 -3
- data/lib/ruboto/version.rb +1 -1
- data/test/activity/call_super_activity.rb +2 -2
- data/test/activity/constants_activity.rb +51 -0
- data/test/activity/constants_activity_test.rb +18 -0
- data/test/activity/margins_activity.rb +12 -7
- data/test/activity/margins_activity_test.rb +10 -6
- data/test/activity/padding_activity.rb +15 -0
- data/test/activity/padding_activity_test.rb +41 -0
- data/test/activity/rss_activity.rb +42 -0
- data/test/activity/rss_activity_test.rb +35 -0
- data/test/activity/spinner_activity.rb +5 -5
- data/test/activity/spinner_activity_test.rb +6 -6
- data/test/activity/stack_activity.rb +7 -8
- data/test/activity/stack_activity_test.rb +7 -5
- data/test/activity/subclass_activity.rb +5 -5
- data/test/activity/subclass_activity_test.rb +8 -6
- data/test/app_test_methods.rb +8 -0
- data/test/arjdbc_test.rb +1 -1
- data/test/minimal_app_test.rb +12 -10
- data/test/rake_test.rb +2 -4
- data/test/ruboto_gen_test.rb +11 -9
- data/test/service_block_test.rb +112 -0
- data/test/{service_test.rb → service_gen_class_test.rb} +9 -4
- data/test/service_infile_class_test.rb +114 -0
- data/test/sqldroid_test.rb +1 -1
- data/test/test_helper.rb +39 -21
- metadata +11 -7
@@ -12,9 +12,11 @@ setup do |activity|
|
|
12
12
|
assert @list_view
|
13
13
|
end
|
14
14
|
|
15
|
-
test('item click sets text') do |activity|
|
16
|
-
activity.run_on_ui_thread
|
17
|
-
|
15
|
+
test('item click sets text', ui: false) do |activity|
|
16
|
+
activity.run_on_ui_thread do
|
17
|
+
@list_view.performItemClick(@list_view, 1, 1)
|
18
|
+
assert_equal '[Record one]', @text_view.text
|
19
|
+
end
|
18
20
|
end
|
19
21
|
|
20
22
|
class MyObject < java.lang.Object
|
@@ -30,12 +32,12 @@ class MyObject < java.lang.Object
|
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
33
|
-
test('add constructor with parameter') do
|
35
|
+
test('add constructor with parameter', ui: false) do
|
34
36
|
o = MyObject.new('It works!')
|
35
37
|
assert_equal 'It works!', o.my_param
|
36
38
|
end
|
37
39
|
|
38
|
-
test('call instance method super') do
|
40
|
+
test('call instance method super', ui: false) do
|
39
41
|
o = MyObject.new('It works!')
|
40
42
|
assert !o.equals(o)
|
41
43
|
end
|
@@ -46,7 +48,7 @@ class MyJRubyAdapter < org.ruboto.JRubyAdapter
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
|
-
test('call super from static subclass method') do
|
51
|
+
test('call super from static subclass method', ui: false) do
|
50
52
|
a = org.ruboto.JRubyAdapter
|
51
53
|
b = MyJRubyAdapter
|
52
54
|
assert a.isDebugBuild != b.isDebugBuild
|
data/test/app_test_methods.rb
CHANGED
@@ -38,6 +38,14 @@ module AppTestMethods
|
|
38
38
|
|
39
39
|
def run_activity_tests(activity_dir)
|
40
40
|
Dir[File.expand_path("#{activity_dir}/*", File.dirname(__FILE__))].each do |file|
|
41
|
+
# FIXME(uwe): Remove when we stop testing JRuby < 1.7.14
|
42
|
+
next if file =~ /rss/ && (JRUBY_JARS_VERSION < Gem::Version.new('1.7.14.dev'))
|
43
|
+
# EMXIF
|
44
|
+
|
45
|
+
# FIXME(uwe): Remove when we release RubotoCore based on JRuby 1.7.14
|
46
|
+
next if file =~ /rss/ && (RUBOTO_PLATFORM == 'CURRENT' || RUBOTO_PLATFORM == 'FROM_GEM')
|
47
|
+
# EMXIF
|
48
|
+
|
41
49
|
# FIXME(uwe): Remove when we stop testing api level < 16
|
42
50
|
# FIXME(uwe): Remove when we release RubotoCore with SSL included
|
43
51
|
next if file =~ /ssl/ && (ANDROID_OS < 16 ||
|
data/test/arjdbc_test.rb
CHANGED
@@ -41,7 +41,7 @@ class RubotoTestAppActivity
|
|
41
41
|
super
|
42
42
|
setTitle File.basename(__FILE__).chomp('_activity.rb').split('_').map { |s| "\#{s[0..0].upcase}\#{s[1..-1]}" }.join(' ')
|
43
43
|
|
44
|
-
@adapter = MyArrayAdapter.new(self, android.R.layout.simple_list_item_1 ,
|
44
|
+
@adapter = MyArrayAdapter.new(self, android.R.layout.simple_list_item_1 , android.R.id.text1, [])
|
45
45
|
|
46
46
|
self.content_view =
|
47
47
|
linear_layout :orientation => LinearLayout::VERTICAL do
|
data/test/minimal_app_test.rb
CHANGED
@@ -12,17 +12,18 @@ if RubotoTest::RUBOTO_PLATFORM == 'STANDALONE'
|
|
12
12
|
cleanup_app
|
13
13
|
end
|
14
14
|
|
15
|
-
# APK was 4.4MB. JRuby: 1.7.4,
|
16
|
-
# APK was 4.3MB. JRuby: 1.7.4,
|
17
|
-
# APK was 4.3MB. JRuby: 1.7.5,
|
18
|
-
# APK was 4.2MB. JRuby: 1.7.5,
|
19
|
-
# APK was 4.3MB. JRuby: 1.7.5,
|
20
|
-
# APK was 8.4MB. JRuby: 1.7.8,
|
21
|
-
# APK was 4.3MB. JRuby: 1.7.8,
|
15
|
+
# APK was 4.4MB. JRuby: 1.7.4, ANDROID_TARGET: 10
|
16
|
+
# APK was 4.3MB. JRuby: 1.7.4, ANDROID_TARGET: 16
|
17
|
+
# APK was 4.3MB. JRuby: 1.7.5, ANDROID_TARGET: 10
|
18
|
+
# APK was 4.2MB. JRuby: 1.7.5, ANDROID_TARGET: 15
|
19
|
+
# APK was 4.3MB. JRuby: 1.7.5, ANDROID_TARGET: 16
|
20
|
+
# APK was 8.4MB. JRuby: 1.7.8, ANDROID_TARGET: 10
|
21
|
+
# APK was 4.3MB. JRuby: 1.7.8, ANDROID_TARGET: 16
|
22
22
|
# APK was 4.4MB. JRuby: 1.7.12, ANDROID_TARGET: 19
|
23
|
+
# APK was 4.4MB. JRuby: 1.7.14.SNAPSHOT, ANDROID_TARGET: 19
|
23
24
|
# APK was 4.2MB. JRuby: 9000.dev, ANDROID_TARGET: 10
|
24
25
|
# APK was 4.2MB. JRuby: 9000.dev, ANDROID_TARGET: 15
|
25
|
-
# APK was 4.
|
26
|
+
# APK was 4.6MB. JRuby: 9000.dev, ANDROID_TARGET: 16
|
26
27
|
def test_minimal_apk_is_within_limits
|
27
28
|
apk_size = BigDecimal(File.size("#{APP_DIR}/bin/RubotoTestApp-debug.apk").to_s) / (1024 * 1024)
|
28
29
|
upper_limit = {
|
@@ -32,8 +33,9 @@ if RubotoTest::RUBOTO_PLATFORM == 'STANDALONE'
|
|
32
33
|
'1.7.10' => 4.4,
|
33
34
|
'1.7.11' => 4.4,
|
34
35
|
'1.7.12' => 4.4,
|
35
|
-
'
|
36
|
-
|
36
|
+
'1.7.14.dev' => 4.4,
|
37
|
+
'9000.dev' => 4.6,
|
38
|
+
}[JRUBY_JARS_VERSION.to_s] || 4.4
|
37
39
|
lower_limit = upper_limit * 0.9
|
38
40
|
version_message ="JRuby: #{JRUBY_JARS_VERSION}, ANDROID_TARGET: #{ANDROID_TARGET}"
|
39
41
|
assert apk_size <= upper_limit, "APK was larger than #{'%.1f' % upper_limit}MB: #{'%.1f' % apk_size.ceil(1)}MB. #{version_message}"
|
data/test/rake_test.rb
CHANGED
@@ -36,7 +36,6 @@ class RakeTest < Test::Unit::TestCase
|
|
36
36
|
# source file instead of rebuilding the apk.
|
37
37
|
def test_that_apk_is_built_if_only_one_ruby_source_file_has_changed
|
38
38
|
Dir.chdir APP_DIR do
|
39
|
-
system 'rake debug'
|
40
39
|
apk_timestamp = File.mtime("bin/#{APP_NAME}-debug.apk")
|
41
40
|
sleep 1
|
42
41
|
FileUtils.touch 'src/ruboto_test_app_activity.rb'
|
@@ -49,7 +48,6 @@ class RakeTest < Test::Unit::TestCase
|
|
49
48
|
|
50
49
|
def test_that_apk_is_built_if_only_one_non_ruby_source_file_has_changed
|
51
50
|
Dir.chdir APP_DIR do
|
52
|
-
system 'rake debug'
|
53
51
|
apk_timestamp = File.mtime("bin/#{APP_NAME}-debug.apk")
|
54
52
|
FileUtils.touch 'src/not_ruby_source.properties'
|
55
53
|
system 'rake debug'
|
@@ -61,8 +59,8 @@ class RakeTest < Test::Unit::TestCase
|
|
61
59
|
def test_that_manifest_is_updated_when_project_properties_are_changed
|
62
60
|
Dir.chdir APP_DIR do
|
63
61
|
manifest = File.read('AndroidManifest.xml')
|
64
|
-
assert_equal "android:minSdkVersion='#{ANDROID_TARGET}'", manifest
|
65
|
-
assert_equal "android:targetSdkVersion='#{ANDROID_TARGET}'", manifest
|
62
|
+
assert_equal "android:minSdkVersion='#{ANDROID_TARGET}'", manifest[/android:minSdkVersion='[^']+'/]
|
63
|
+
assert_equal "android:targetSdkVersion='#{ANDROID_TARGET}'", manifest[/android:targetSdkVersion='[^']+'/]
|
66
64
|
prop_file = File.read('project.properties')
|
67
65
|
File.open('project.properties', 'w') { |f| f << prop_file.sub(/target=android-#{ANDROID_TARGET}/, 'target=android-6') }
|
68
66
|
system 'rake debug'
|
data/test/ruboto_gen_test.rb
CHANGED
@@ -49,7 +49,7 @@ class RubotoGenTest < Test::Unit::TestCase
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
# APK was
|
52
|
+
# APK was 66.3KB. PLATFORM: CURRENT, ANDROID_TARGET: 10
|
53
53
|
# APK was 66.6KB. PLATFORM: CURRENT, ANDROID_TARGET: 15
|
54
54
|
# APK was 74.9KB. PLATFORM: CURRENT, ANDROID_TARGET: 16
|
55
55
|
# APK was 80.4KB. PLATFORM: CURRENT, ANDROID_TARGET: 19
|
@@ -69,10 +69,11 @@ class RubotoGenTest < Test::Unit::TestCase
|
|
69
69
|
# APK was 8793.4KB. PLATFORM: STANDALONE, ANDROID_TARGET: 16, JRuby: 1.7.11
|
70
70
|
# APK was 9743.3KB. PLATFORM: STANDALONE, ANDROID_TARGET: 16, JRuby: 1.7.12
|
71
71
|
# APK was 9123.8KB. PLATFORM: STANDALONE, ANDROID_TARGET: 19, JRuby: 1.7.12
|
72
|
+
# APK was 9745.0KB. PLATFORM: STANDALONE, ANDROID_TARGET: 19, JRuby: 1.7.14.dev
|
72
73
|
# APK was 6689.5KB. PLATFORM: STANDALONE, ANDROID_TARGET: 10, JRuby: 9000.dev
|
73
74
|
# APK was 7012.2KB. PLATFORM: STANDALONE, ANDROID_TARGET: 16, JRuby: 9000.dev
|
74
75
|
# APK was 8015.9KB. PLATFORM: STANDALONE, ANDROID_TARGET: 17, JRuby: 9000.dev
|
75
|
-
# APK was
|
76
|
+
# APK was 8232.4KB. PLATFORM: STANDALONE, ANDROID_TARGET: 19, JRuby: 9000.dev
|
76
77
|
def test_new_apk_size_is_within_limits
|
77
78
|
apk_size = BigDecimal(File.size("#{APP_DIR}/bin/RubotoTestApp-debug.apk").to_s) / 1024
|
78
79
|
version = " PLATFORM: #{RUBOTO_PLATFORM}"
|
@@ -87,19 +88,20 @@ class RubotoGenTest < Test::Unit::TestCase
|
|
87
88
|
'1.7.10' => 8800.0,
|
88
89
|
'1.7.11' => 8800.0,
|
89
90
|
'1.7.12' => 9800.0,
|
90
|
-
'
|
91
|
-
|
91
|
+
'1.7.14.dev' => 9800.0,
|
92
|
+
'9000.dev' => 8300.0,
|
93
|
+
}[JRUBY_JARS_VERSION.to_s] || 9800.0
|
92
94
|
version << ", JRuby: #{JRUBY_JARS_VERSION.to_s}"
|
93
95
|
else
|
94
96
|
upper_limit = {
|
95
|
-
10 =>
|
97
|
+
10 => 67.0,
|
96
98
|
15 => 67.0,
|
97
99
|
16 => 82.0,
|
98
100
|
17 => 81.0,
|
99
101
|
19 => 81.0,
|
100
102
|
}[ANDROID_TARGET] || 75.0
|
101
103
|
end
|
102
|
-
lower_limit = upper_limit * 0.
|
104
|
+
lower_limit = upper_limit * 0.8
|
103
105
|
assert apk_size <= upper_limit, "APK was larger than #{'%.1f' % upper_limit}KB: #{'%.1f' % apk_size.ceil(1)}KB.#{version}"
|
104
106
|
assert apk_size >= lower_limit, "APK was smaller than #{'%.1f' % lower_limit}KB: #{'%.1f' % apk_size.floor(1)}KB. You should lower the limit.#{version}"
|
105
107
|
end
|
@@ -144,7 +146,7 @@ class RubotoTestAppActivity
|
|
144
146
|
set_title 'ListView Example'
|
145
147
|
|
146
148
|
records = [{:text1 => 'First row'}, {:image => resources.get_drawable($package.R::drawable::get_ruboto_core), :text1 => 'Second row'}, 'Third row']
|
147
|
-
adapter = $package.RubotoArrayAdapter.new(self, $package.R::layout::list_item,
|
149
|
+
adapter = $package.RubotoArrayAdapter.new(self, $package.R::layout::list_item, android.R.id.text1, records)
|
148
150
|
puts "adapter: \#{adapter.inspect}"
|
149
151
|
self.content_view =
|
150
152
|
linear_layout :orientation => :vertical do
|
@@ -196,7 +198,7 @@ class RubotoArrayAdapter
|
|
196
198
|
if convert_view
|
197
199
|
row = convert_view
|
198
200
|
row.findViewById(Ruboto::Id.image).image_drawable = nil
|
199
|
-
row.findViewById(
|
201
|
+
row.findViewById(android.R.id.text1).text = nil
|
200
202
|
else
|
201
203
|
row = @inflater.inflate(mResource, nil)
|
202
204
|
end
|
@@ -207,7 +209,7 @@ class RubotoArrayAdapter
|
|
207
209
|
model.each do |field, value|
|
208
210
|
begin
|
209
211
|
field_id = Ruboto::Id.respond_to?(field) && Ruboto::Id.send(field) ||
|
210
|
-
|
212
|
+
android.R.id.respond_to?(field) && android.R.id.send(field)
|
211
213
|
field_view = row.findViewById(field_id)
|
212
214
|
case value
|
213
215
|
when String
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class ServiceBlockTest < Test::Unit::TestCase
|
5
|
+
SRC_DIR = "#{APP_DIR}/src"
|
6
|
+
|
7
|
+
def setup
|
8
|
+
generate_app
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
cleanup_app
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_service_startup
|
16
|
+
# FIXME(uwe): Remove when Android L is released or service start is fixed
|
17
|
+
return if ANDROID_OS == 21
|
18
|
+
# EMXIF
|
19
|
+
|
20
|
+
Dir.chdir APP_DIR do
|
21
|
+
activity_filename = "#{SRC_DIR}/ruboto_test_app_activity.rb"
|
22
|
+
assert File.exists? activity_filename
|
23
|
+
File.open(activity_filename, 'w') { |f| f << <<EOF }
|
24
|
+
require 'ruboto/activity'
|
25
|
+
require 'ruboto/widget'
|
26
|
+
require 'ruboto/service'
|
27
|
+
|
28
|
+
ruboto_import_widgets :Button, :LinearLayout, :TextView
|
29
|
+
|
30
|
+
class RubotoTestAppActivity
|
31
|
+
def onCreate(bundle)
|
32
|
+
super
|
33
|
+
$ruboto_test_app_activity = self
|
34
|
+
set_title 'Domo arigato, Mr Ruboto!'
|
35
|
+
|
36
|
+
self.content_view =
|
37
|
+
linear_layout :orientation => :vertical do
|
38
|
+
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42,
|
39
|
+
:layout => {:width => :fill_parent},
|
40
|
+
:gravity => android.view.Gravity::CENTER, :text_size => 48.0
|
41
|
+
button :text => 'M-x butterfly', :layout => {:width => :fill_parent},
|
42
|
+
:id => 43, :on_click_listener => proc { butterfly }
|
43
|
+
end
|
44
|
+
rescue
|
45
|
+
puts "Exception creating activity: \#{$!}"
|
46
|
+
puts $!.backtrace.join("\\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_text(text)
|
50
|
+
@text_view.text = text
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def butterfly
|
56
|
+
puts 'butterfly'
|
57
|
+
Thread.start do
|
58
|
+
begin
|
59
|
+
start_ruboto_service do
|
60
|
+
def onStartCommand(intent, flags, start_id)
|
61
|
+
puts "service on_start_command(\#{intent}, \#{flags}, \#{start_id})"
|
62
|
+
$ruboto_test_app_activity.set_title 'on_start_command'
|
63
|
+
$ruboto_test_app_activity.set_text 'What hath Matz wrought!'
|
64
|
+
|
65
|
+
android.app.Service::START_STICKY
|
66
|
+
end
|
67
|
+
end
|
68
|
+
rescue Exception
|
69
|
+
puts "Exception starting the service: \#{$!}"
|
70
|
+
puts $!.backtrace.join("\\n")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
puts 'butterfly OK'
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
EOF
|
78
|
+
|
79
|
+
service_test_filename = "#{APP_DIR}/test/src/ruboto_test_app_activity_test.rb"
|
80
|
+
assert File.exists? service_test_filename
|
81
|
+
File.open(service_test_filename, 'w') { |f| f << <<EOF }
|
82
|
+
activity Java::org.ruboto.test_app.RubotoTestAppActivity
|
83
|
+
|
84
|
+
setup do |activity|
|
85
|
+
start = Time.now
|
86
|
+
loop do
|
87
|
+
@text_view = activity.findViewById(42)
|
88
|
+
break if @text_view || (Time.now - start > 60)
|
89
|
+
sleep 1
|
90
|
+
end
|
91
|
+
assert @text_view
|
92
|
+
end
|
93
|
+
|
94
|
+
test 'button changes text', :ui => false do |activity|
|
95
|
+
button = activity.findViewById(43)
|
96
|
+
puts 'Clicking...'
|
97
|
+
activity.run_on_ui_thread{button.performClick}
|
98
|
+
puts 'Clicked!'
|
99
|
+
start = Time.now
|
100
|
+
loop do
|
101
|
+
break if @text_view.text == 'What hath Matz wrought!' || (Time.now - start > 60)
|
102
|
+
sleep 1
|
103
|
+
end
|
104
|
+
assert_equal 'What hath Matz wrought!', @text_view.text
|
105
|
+
end
|
106
|
+
EOF
|
107
|
+
|
108
|
+
end
|
109
|
+
run_app_tests
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
|
-
class
|
4
|
+
class ServiceGenClassTest < Test::Unit::TestCase
|
5
5
|
SRC_DIR = "#{APP_DIR}/src"
|
6
6
|
|
7
7
|
def setup
|
@@ -13,6 +13,10 @@ class ServiceTest < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_service_startup
|
16
|
+
# FIXME(uwe): Remove when Android L is released or service start is fixed
|
17
|
+
return if ANDROID_OS == 21
|
18
|
+
# EMXIF
|
19
|
+
|
16
20
|
Dir.chdir APP_DIR do
|
17
21
|
system "#{RUBOTO_CMD} gen class Service --name RubotoTestService"
|
18
22
|
|
@@ -21,6 +25,7 @@ class ServiceTest < Test::Unit::TestCase
|
|
21
25
|
File.open(activity_filename, 'w') { |f| f << <<EOF }
|
22
26
|
require 'ruboto/activity'
|
23
27
|
require 'ruboto/widget'
|
28
|
+
require 'ruboto/service'
|
24
29
|
|
25
30
|
ruboto_import_widgets :Button, :LinearLayout, :TextView
|
26
31
|
|
@@ -53,7 +58,9 @@ class RubotoTestAppActivity
|
|
53
58
|
puts 'butterfly'
|
54
59
|
Thread.start do
|
55
60
|
begin
|
56
|
-
|
61
|
+
puts 'activity start service...'
|
62
|
+
start_ruboto_service("RubotoTestService")
|
63
|
+
puts 'activity start service...OK'
|
57
64
|
rescue Exception
|
58
65
|
puts "Exception starting the service: \#{$!}"
|
59
66
|
puts $!.backtrace.join("\\n")
|
@@ -68,8 +75,6 @@ EOF
|
|
68
75
|
service_filename = "#{SRC_DIR}/ruboto_test_service.rb"
|
69
76
|
assert File.exists? service_filename
|
70
77
|
File.open(service_filename, 'w') { |f| f << <<EOF }
|
71
|
-
require 'ruboto/service'
|
72
|
-
|
73
78
|
class RubotoTestService
|
74
79
|
TARGET_TEXT = 'What hath Matz wrought!'
|
75
80
|
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class ServiceInfileClassTest < Test::Unit::TestCase
|
5
|
+
SRC_DIR = "#{APP_DIR}/src"
|
6
|
+
|
7
|
+
def setup
|
8
|
+
generate_app
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
cleanup_app
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_service_startup
|
16
|
+
# FIXME(uwe): Remove when Android L is released or service start is fixed
|
17
|
+
return if ANDROID_OS == 21
|
18
|
+
# EMXIF
|
19
|
+
|
20
|
+
Dir.chdir APP_DIR do
|
21
|
+
activity_filename = "#{SRC_DIR}/ruboto_test_app_activity.rb"
|
22
|
+
assert File.exists? activity_filename
|
23
|
+
File.open(activity_filename, 'w') { |f| f << <<EOF }
|
24
|
+
require 'ruboto/activity'
|
25
|
+
require 'ruboto/widget'
|
26
|
+
require 'ruboto/service'
|
27
|
+
|
28
|
+
ruboto_import_widgets :Button, :LinearLayout, :TextView
|
29
|
+
|
30
|
+
class RubotoServiceClass
|
31
|
+
def onStartCommand(intent, flags, start_id)
|
32
|
+
puts "service on_start_command(\#{intent}, \#{flags}, \#{start_id})"
|
33
|
+
$ruboto_test_app_activity.set_title 'on_start_command'
|
34
|
+
$ruboto_test_app_activity.set_text 'What hath Matz wrought!'
|
35
|
+
|
36
|
+
android.app.Service::START_STICKY
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class RubotoTestAppActivity
|
41
|
+
def onCreate(bundle)
|
42
|
+
super
|
43
|
+
$ruboto_test_app_activity = self
|
44
|
+
set_title 'Domo arigato, Mr Ruboto!'
|
45
|
+
|
46
|
+
self.content_view =
|
47
|
+
linear_layout :orientation => :vertical do
|
48
|
+
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42,
|
49
|
+
:layout => {:width => :fill_parent},
|
50
|
+
:gravity => android.view.Gravity::CENTER, :text_size => 48.0
|
51
|
+
button :text => 'M-x butterfly', :layout => {:width => :fill_parent},
|
52
|
+
:id => 43, :on_click_listener => proc { butterfly }
|
53
|
+
end
|
54
|
+
rescue
|
55
|
+
puts "Exception creating activity: \#{$!}"
|
56
|
+
puts $!.backtrace.join("\\n")
|
57
|
+
end
|
58
|
+
|
59
|
+
def set_text(text)
|
60
|
+
@text_view.text = text
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def butterfly
|
66
|
+
puts 'butterfly'
|
67
|
+
Thread.start do
|
68
|
+
begin
|
69
|
+
start_ruboto_service "RubotoServiceClass"
|
70
|
+
rescue Exception
|
71
|
+
puts "Exception starting the service: \#{$!}"
|
72
|
+
puts $!.backtrace.join("\\n")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
puts 'butterfly OK'
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
EOF
|
80
|
+
|
81
|
+
service_test_filename = "#{APP_DIR}/test/src/ruboto_test_app_activity_test.rb"
|
82
|
+
assert File.exists? service_test_filename
|
83
|
+
File.open(service_test_filename, 'w') { |f| f << <<EOF }
|
84
|
+
activity Java::org.ruboto.test_app.RubotoTestAppActivity
|
85
|
+
|
86
|
+
setup do |activity|
|
87
|
+
start = Time.now
|
88
|
+
loop do
|
89
|
+
@text_view = activity.findViewById(42)
|
90
|
+
break if @text_view || (Time.now - start > 60)
|
91
|
+
sleep 1
|
92
|
+
end
|
93
|
+
assert @text_view
|
94
|
+
end
|
95
|
+
|
96
|
+
test 'button changes text', :ui => false do |activity|
|
97
|
+
button = activity.findViewById(43)
|
98
|
+
puts 'Clicking...'
|
99
|
+
activity.run_on_ui_thread{button.performClick}
|
100
|
+
puts 'Clicked!'
|
101
|
+
start = Time.now
|
102
|
+
loop do
|
103
|
+
break if @text_view.text == 'What hath Matz wrought!' || (Time.now - start > 60)
|
104
|
+
sleep 1
|
105
|
+
end
|
106
|
+
assert_equal 'What hath Matz wrought!', @text_view.text
|
107
|
+
end
|
108
|
+
EOF
|
109
|
+
|
110
|
+
end
|
111
|
+
run_app_tests
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|