ruboto-core 0.1.0 → 0.2.1
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/Gemfile.lock +2 -1
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/assets/Rakefile +181 -60
- data/assets/assets/scripts/ruboto.rb +249 -133
- data/assets/samples/sample_activity.rb +4 -4
- data/assets/src/InheritingActivity.java +8 -6
- data/assets/src/InheritingBroadcastReceiver.java +5 -5
- data/assets/src/InheritingClass.java +3 -3
- data/assets/src/InheritingService.java +3 -4
- data/assets/src/RubotoActivity.java +30 -15
- data/assets/src/RubotoBroadcastReceiver.java +6 -13
- data/assets/src/RubotoService.java +4 -3
- data/assets/src/org/ruboto/Script.java +117 -58
- data/assets/src/org/ruboto/test/ActivityTest.java +23 -17
- data/assets/src/org/ruboto/test/InstrumentationTestRunner.java +10 -6
- data/lib/java_class_gen/InheritingClass.java.erb +0 -1
- data/lib/java_class_gen/android_api.xml +1 -1
- data/lib/ruboto/commands/base.rb +227 -255
- data/lib/ruboto/util/build.rb +33 -22
- data/lib/ruboto/util/update.rb +210 -40
- data/lib/ruboto/util/verify.rb +4 -0
- data/lib/ruboto/util/xml_element.rb +28 -18
- data/test/activity/image_button.rb +21 -0
- data/test/activity/image_button_and_button.rb +31 -0
- data/test/activity/image_button_and_button_test.rb +27 -0
- data/test/activity/image_button_test.rb +21 -0
- data/test/app_test_methods.rb +54 -0
- data/test/rake_test.rb +53 -0
- data/test/ruboto_gen_test.rb +36 -0
- data/test/ruboto_update_test.rb +61 -0
- data/test/service_test.rb +49 -0
- data/test/test_helper.rb +113 -3
- metadata +44 -46
- data/test/app_test.rb +0 -44
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'ruboto'
|
2
|
+
|
3
|
+
ruboto_import_widgets :ImageButton, :LinearLayout, :TextView
|
4
|
+
|
5
|
+
$activity.handle_create do |bundle|
|
6
|
+
setTitle 'This is the Title'
|
7
|
+
|
8
|
+
setup_content do
|
9
|
+
linear_layout :orientation => LinearLayout::VERTICAL do
|
10
|
+
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42
|
11
|
+
image_button :image_resource => $package.R::drawable::icon, :width => :wrap_content, :id => 43
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
handle_click do |view|
|
16
|
+
if view.id == 43
|
17
|
+
@text_view.setText 'What hath Matz wrought!'
|
18
|
+
toast 'Flipped a bit via butterfly'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'ruboto'
|
2
|
+
|
3
|
+
ruboto_import_widgets :Button, :ImageButton, :LinearLayout, :TextView
|
4
|
+
|
5
|
+
$activity.handle_create do |bundle|
|
6
|
+
setTitle 'This is the Title'
|
7
|
+
|
8
|
+
setup_content do
|
9
|
+
linear_layout :orientation => LinearLayout::VERTICAL do
|
10
|
+
@text_view = text_view :text => 'What hath Matz wrought?', :id => 42
|
11
|
+
button :text => 'Button', :width => :wrap_content, :id => 44
|
12
|
+
image_button :image_resource => $package.R::drawable::icon, :width => :wrap_content, :id => 43
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
handle_click do |view|
|
17
|
+
if view.id == 43
|
18
|
+
@text_view.text = 'Image button pressed'
|
19
|
+
elsif view.id == 44
|
20
|
+
@text_view.text = 'Button pressed'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# handle_image_click do |view|
|
25
|
+
# if view.id == 43
|
26
|
+
# @text_view.text = 'Image button pressed'
|
27
|
+
# elsif view.id == 44
|
28
|
+
# @text_view.text = 'Button pressed'
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
activity Java::org.ruboto.test_app.RubotoTestAppActivity
|
2
|
+
|
3
|
+
setup do |activity|
|
4
|
+
start = Time.now
|
5
|
+
loop do
|
6
|
+
@text_view = activity.find_view_by_id 42
|
7
|
+
break if @text_view || (Time.now - start > 60)
|
8
|
+
sleep 1
|
9
|
+
end
|
10
|
+
assert @text_view
|
11
|
+
end
|
12
|
+
|
13
|
+
test('initial setup') do |activity|
|
14
|
+
assert_equal "What hath Matz wrought?", @text_view.text
|
15
|
+
end
|
16
|
+
|
17
|
+
test('button changes text') do |activity|
|
18
|
+
button = activity.find_view_by_id 44
|
19
|
+
button.perform_click
|
20
|
+
assert_equal 'Button pressed', @text_view.text
|
21
|
+
end
|
22
|
+
|
23
|
+
test('image button changes text') do |activity|
|
24
|
+
image_button = activity.find_view_by_id 43
|
25
|
+
image_button.perform_click
|
26
|
+
assert_equal 'Image button pressed', @text_view.text
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
activity Java::org.ruboto.test_app.RubotoTestAppActivity
|
2
|
+
|
3
|
+
setup do |activity|
|
4
|
+
start = Time.now
|
5
|
+
loop do
|
6
|
+
@text_view = activity.findViewById(42)
|
7
|
+
break if @text_view || (Time.now - start > 60)
|
8
|
+
sleep 1
|
9
|
+
end
|
10
|
+
assert @text_view
|
11
|
+
end
|
12
|
+
|
13
|
+
test('initial setup') do |activity|
|
14
|
+
assert_equal "What hath Matz wrought?", @text_view.text
|
15
|
+
end
|
16
|
+
|
17
|
+
test('button changes text') do |activity|
|
18
|
+
button = activity.findViewById(43)
|
19
|
+
button.performClick
|
20
|
+
assert_equal "What hath Matz wrought!", @text_view.text
|
21
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module AppTestMethods
|
4
|
+
include RubotoTest
|
5
|
+
|
6
|
+
if ['android-7', 'android-8'].include? ANDROID_OS
|
7
|
+
def test_nothing
|
8
|
+
puts "Skipping instrumentation tests on #{ANDROID_OS} since they don't work."
|
9
|
+
end
|
10
|
+
else
|
11
|
+
def test_that_tests_work_on_new_project
|
12
|
+
run_app_tests
|
13
|
+
end
|
14
|
+
|
15
|
+
if not ON_JRUBY_JARS_1_5_6
|
16
|
+
def test_that_yaml_loads
|
17
|
+
assert_code "with_large_stack{require 'yaml'}"
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts "Skipping YAML tests on jruby-jars-1.5.6"
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_file_read_source_file
|
24
|
+
assert_code "File.read(__FILE__)"
|
25
|
+
end
|
26
|
+
|
27
|
+
Dir.chdir File.expand_path('activity', File.dirname(__FILE__)) do
|
28
|
+
Dir['*_test.rb'].each do |test|
|
29
|
+
class_eval %Q{
|
30
|
+
def test_#{test.chomp('_test.rb')}
|
31
|
+
filename = "#{APP_DIR}/assets/scripts/ruboto_test_app_activity.rb"
|
32
|
+
test_filename = "#{APP_DIR}/test/assets/scripts/ruboto_test_app_activity_test.rb"
|
33
|
+
File.open(filename, 'w') { |f| f << File.read('#{PROJECT_DIR}/test/activity/#{test.gsub('_test', '')}') }
|
34
|
+
File.open(test_filename, 'w') { |f| f << File.read('#{PROJECT_DIR}/test/activity/#{test}') }
|
35
|
+
run_app_tests
|
36
|
+
end
|
37
|
+
}
|
38
|
+
puts "Creating test from file #{PROJECT_DIR}/test/activity/#{test}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def assert_code(code)
|
45
|
+
filename = "#{APP_DIR}/assets/scripts/ruboto_test_app_activity.rb"
|
46
|
+
s = File.read(filename)
|
47
|
+
s.gsub!(/(require 'ruboto')/, "\\1\n#{code}")
|
48
|
+
File.open(filename, 'w') { |f| f << s }
|
49
|
+
run_app_tests
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/test/rake_test.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
$stdout.sync = true
|
5
|
+
|
6
|
+
class RakeTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
generate_app
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
cleanup_app
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_that_update_scripts_task_copies_files_to_sdcard_if_permissions_are_set
|
16
|
+
manifest = File.read("#{APP_DIR}/AndroidManifest.xml")
|
17
|
+
manifest.gsub! %r{</manifest>}, %Q{ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />\n</manifest>}
|
18
|
+
File.open("#{APP_DIR}/AndroidManifest.xml", 'w') { |f| f << manifest }
|
19
|
+
|
20
|
+
Dir.chdir APP_DIR do
|
21
|
+
system 'rake install:restart:clean'
|
22
|
+
assert_equal 0, $?
|
23
|
+
end
|
24
|
+
|
25
|
+
# wait_for_dir("/mnt/sdcard/Android/data/#{PACKAGE}/files/scripts")
|
26
|
+
wait_for_dir("/sdcard/Android/data/#{PACKAGE}/files/scripts")
|
27
|
+
end
|
28
|
+
|
29
|
+
if ANDROID_OS == 'android-7'
|
30
|
+
puts "Skipping sdcard test since files on sdcard are not removed on android-7 on app uninstall"
|
31
|
+
else
|
32
|
+
def test_that_update_scripts_task_copies_files_to_app_directory_when_permissions_are_not_set
|
33
|
+
Dir.chdir APP_DIR do
|
34
|
+
system 'rake install:restart:clean'
|
35
|
+
assert_equal 0, $?
|
36
|
+
end
|
37
|
+
wait_for_dir("/data/data/#{PACKAGE}/files/scripts")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def wait_for_dir(dir)
|
44
|
+
puts "Waiting for app to generate script directory: #{dir}"
|
45
|
+
start = Time.now
|
46
|
+
loop do
|
47
|
+
break if `adb shell ls -d #{dir}`.chomp =~ %r{^#{dir}$}
|
48
|
+
flunk 'Timeout waiting for scripts directory to appear' if Time.now > start + 60
|
49
|
+
sleep 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
require 'test/app_test_methods'
|
4
|
+
|
5
|
+
class RubotoGenTest < Test::Unit::TestCase
|
6
|
+
include AppTestMethods
|
7
|
+
|
8
|
+
def setup
|
9
|
+
generate_app
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
cleanup_app
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
if not RubotoTest::ON_JRUBY_JARS_1_5_6
|
18
|
+
class RubotoGenWithPsychTest < Test::Unit::TestCase
|
19
|
+
include AppTestMethods
|
20
|
+
|
21
|
+
def setup
|
22
|
+
generate_app :with_psych => true
|
23
|
+
end
|
24
|
+
|
25
|
+
def teardown
|
26
|
+
cleanup_app
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_psych_jar_exists
|
30
|
+
assert File.exists?("#{APP_DIR}/libs/psych.jar"), "Failed to generate psych jar"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
else
|
35
|
+
puts "Skipping Psych tests on jruby-jars-1.5.6"
|
36
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
require 'test/app_test_methods'
|
4
|
+
|
5
|
+
module UpdateTestMethods
|
6
|
+
include RubotoTest
|
7
|
+
|
8
|
+
def setup(with_psych = false)
|
9
|
+
Dir.mkdir TMP_DIR unless File.exists? TMP_DIR
|
10
|
+
FileUtils.rm_rf APP_DIR if File.exists? APP_DIR
|
11
|
+
Dir.chdir TMP_DIR do
|
12
|
+
system "tar xzf #{PROJECT_DIR}/examples/RubotoTestApp_0.1.0_jruby_1.6.3.dev.tgz"
|
13
|
+
end
|
14
|
+
if ENV['ANDROID_HOME']
|
15
|
+
android_home = ENV['ANDROID_HOME']
|
16
|
+
else
|
17
|
+
android_home = File.dirname(File.dirname(`which adb`))
|
18
|
+
end
|
19
|
+
File.open("#{APP_DIR}/local.properties", 'w'){|f| f.puts "sdk.dir=#{android_home}"}
|
20
|
+
File.open("#{APP_DIR}/test/local.properties", 'w'){|f| f.puts "sdk.dir=#{android_home}"}
|
21
|
+
Dir.chdir APP_DIR do
|
22
|
+
FileUtils.touch "libs/psych.jar" if with_psych
|
23
|
+
system "#{RUBOTO_CMD} update app"
|
24
|
+
assert_equal 0, $?, "update app failed with return code #$?"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def teardown
|
29
|
+
cleanup_app
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_properties_and_ant_file_has_no_duplicates
|
33
|
+
Dir.chdir APP_DIR do
|
34
|
+
assert File.readlines('test/build.properties').grep(/\w/).uniq!.nil?, 'Duplicate lines in build.properties'
|
35
|
+
assert_equal 1, File.readlines('test/build.xml').grep(/<macrodef name="run-tests-helper">/).size, 'Duplicate macro in build.xml'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class RubotoUpdateTest < Test::Unit::TestCase
|
41
|
+
include UpdateTestMethods
|
42
|
+
include AppTestMethods
|
43
|
+
end
|
44
|
+
|
45
|
+
if not RubotoTest::ON_JRUBY_JARS_1_5_6
|
46
|
+
class RubotoUpdateWithPsychTest < Test::Unit::TestCase
|
47
|
+
include UpdateTestMethods
|
48
|
+
include AppTestMethods
|
49
|
+
|
50
|
+
def setup
|
51
|
+
super(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_psych_jar_exists
|
55
|
+
assert File.exists?("#{APP_DIR}/libs/psych.jar"), "Failed to generate psych jar"
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
else
|
60
|
+
puts "Skipping Psych tests on jruby-jars-1.5.6"
|
61
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.expand_path("test_helper", File.dirname(__FILE__))
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
class ServiceTest < Test::Unit::TestCase
|
5
|
+
include RubotoTest
|
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
|
+
Dir.chdir APP_DIR do
|
17
|
+
system "#{RUBOTO_CMD} gen class Service --name RubotoTestService"
|
18
|
+
service_filename = "#{APP_DIR}/assets/scripts/ruboto_test_service.rb"
|
19
|
+
assert File.exists? service_filename
|
20
|
+
File.open(service_filename, 'w'){|f| f << <<EOF}
|
21
|
+
require 'ruboto'
|
22
|
+
|
23
|
+
$service.handle_create do
|
24
|
+
Thread.start do
|
25
|
+
loop do
|
26
|
+
sleep 1
|
27
|
+
puts "\#{self.class} running..."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
puts "\#{self.class} started."
|
31
|
+
android.app.Service::START_STICKY
|
32
|
+
end
|
33
|
+
|
34
|
+
$service.handle_start_command do
|
35
|
+
android.app.Service::START_STICKY
|
36
|
+
end
|
37
|
+
EOF
|
38
|
+
|
39
|
+
activity_filename = "#{APP_DIR}/assets/scripts/ruboto_test_app_activity.rb"
|
40
|
+
s = File.read(activity_filename)
|
41
|
+
s.gsub!(/^(end)$/, "
|
42
|
+
startService(android.content.Intent.new($activity.application_context, $package.RubotoTestService.java_class))
|
43
|
+
\\1\n")
|
44
|
+
File.open(activity_filename, 'w') { |f| f << s }
|
45
|
+
end
|
46
|
+
run_app_tests
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,114 @@
|
|
1
|
-
require
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
module RubotoTest
|
5
|
+
PROJECT_DIR = File.expand_path('..', File.dirname(__FILE__))
|
6
|
+
$LOAD_PATH << PROJECT_DIR
|
7
|
+
|
8
|
+
gem_spec = Gem.searcher.find('jruby-jars')
|
9
|
+
raise StandardError.new("Can't find Gem specification jruby-jars.") unless gem_spec
|
10
|
+
JRUBY_JARS_VERSION = gem_spec.version
|
11
|
+
ON_JRUBY_JARS_1_5_6 = JRUBY_JARS_VERSION == Gem::Version.new('1.5.6')
|
12
|
+
|
13
|
+
PACKAGE = 'org.ruboto.test_app'
|
14
|
+
APP_NAME = 'RubotoTestApp'
|
15
|
+
TMP_DIR = File.join PROJECT_DIR, 'tmp'
|
16
|
+
APP_DIR = File.join TMP_DIR, APP_NAME
|
17
|
+
ANDROID_TARGET = ENV['ANDROID_TARGET'] || 'android-7'
|
18
|
+
|
19
|
+
VERSION_TO_API_LEVEL = {
|
20
|
+
'2.1' => 'android-7', '2.1-update1' => 'android-7', '2.2' => 'android-8',
|
21
|
+
'2.3' => 'android-9', '2.3.1' => 'android-9', '2.3.2' => 'android-9',
|
22
|
+
'2.3.3' => 'android-10', '2.3.4' => 'android-10',
|
23
|
+
'3.0' => 'android-11', '3.1' => 'android-12', '3.2' => 'android-13'
|
24
|
+
}
|
25
|
+
|
26
|
+
def self.version_from_device
|
27
|
+
puts "Reading OS version from device/emulator"
|
28
|
+
system "adb wait-for-device"
|
29
|
+
start = Time.now
|
30
|
+
IO.popen('adb bugreport').each_line do |line|
|
31
|
+
if line =~ /sdk-eng (.*?) .*? .*? test-keys/
|
32
|
+
version = $1
|
33
|
+
api_level = VERSION_TO_API_LEVEL[version]
|
34
|
+
raise "Unknown version: #{version}" if api_level.nil?
|
35
|
+
puts "Getting version from device/emulator took #{(Time.now - start).to_i}s"
|
36
|
+
return api_level
|
37
|
+
end
|
38
|
+
end
|
39
|
+
raise "Unable to read device/emulator apilevel"
|
40
|
+
end
|
41
|
+
|
42
|
+
ANDROID_OS = ENV['ANDROID_OS'] || version_from_device
|
43
|
+
RUBOTO_CMD = "ruby -rubygems -I #{PROJECT_DIR}/lib #{PROJECT_DIR}/bin/ruboto"
|
44
|
+
|
45
|
+
puts "ANDROID_OS: #{ANDROID_OS}"
|
46
|
+
end
|
47
|
+
|
48
|
+
class Test::Unit::TestCase
|
49
|
+
include RubotoTest
|
50
|
+
alias old_run run
|
51
|
+
|
52
|
+
def run(*args, &block)
|
53
|
+
mark_test_start("#{self.class.name}\##{method_name}")
|
54
|
+
old_run(*args, &block)
|
55
|
+
mark_test_end("#{self.class.name}\##{method_name}")
|
56
|
+
end
|
57
|
+
|
58
|
+
def mark_test_start(test_name)
|
59
|
+
@start_time = Time.now
|
60
|
+
log
|
61
|
+
log '=' * 80
|
62
|
+
log "Starting test #{test_name} at #{@start_time.strftime('%Y-%m-%d %H:%M:%S')}:"
|
63
|
+
log
|
64
|
+
end
|
65
|
+
|
66
|
+
def mark_test_end(test_name)
|
67
|
+
log
|
68
|
+
log "Ended test #{test_name}: #{passed? ? 'PASSED' : 'FAILED'} after #{(Time.now - @start_time).to_i}s"
|
69
|
+
log '=' * 80
|
70
|
+
log
|
71
|
+
end
|
72
|
+
|
73
|
+
def log(message = '')
|
74
|
+
puts message
|
75
|
+
system "adb shell log -t 'RUBOTO TEST' '#{message}'"
|
76
|
+
end
|
77
|
+
|
78
|
+
def generate_app(options = {})
|
79
|
+
with_psych = options.delete(:with_psych) || false
|
80
|
+
raise "Unknown options: #{options.inspect}" unless options.empty?
|
81
|
+
Dir.mkdir TMP_DIR unless File.exists? TMP_DIR
|
82
|
+
FileUtils.rm_rf APP_DIR if File.exists? APP_DIR
|
83
|
+
template_dir = "#{APP_DIR}_template_#{$$}#{'_with_psych' if with_psych}"
|
84
|
+
if File.exists?(template_dir)
|
85
|
+
puts "Copying app from template #{template_dir}"
|
86
|
+
FileUtils.cp_r template_dir, APP_DIR, :preserve => true
|
87
|
+
else
|
88
|
+
puts "Generating app #{APP_DIR}"
|
89
|
+
system "#{RUBOTO_CMD} gen app --package #{PACKAGE} --path #{APP_DIR} --name #{APP_NAME} --min_sdk #{ANDROID_TARGET} #{'--with-psych' if with_psych}"
|
90
|
+
if $? != 0
|
91
|
+
FileUtils.rm_rf template_dir
|
92
|
+
raise "gen app failed with return code #$?"
|
93
|
+
end
|
94
|
+
Dir.chdir APP_DIR do
|
95
|
+
system 'rake debug'
|
96
|
+
assert_equal 0, $?
|
97
|
+
end
|
98
|
+
puts "Storing app as template #{template_dir}"
|
99
|
+
FileUtils.cp_r APP_DIR, template_dir, :preserve => true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def cleanup_app
|
104
|
+
# FileUtils.rm_rf APP_DIR if File.exists? APP_DIR
|
105
|
+
end
|
106
|
+
|
107
|
+
def run_app_tests
|
108
|
+
Dir.chdir "#{APP_DIR}/test" do
|
109
|
+
system 'rake test:quick'
|
110
|
+
assert_equal 0, $?, "tests failed with return code #$?"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|