require File.expand_path("test_helper", File.dirname(__FILE__)) require 'bigdecimal' require 'test/app_test_methods' class RubotoGenTest < Test::Unit::TestCase include AppTestMethods def setup generate_app end def teardown cleanup_app end def test_gitignore_is_included_in_new_project Dir.chdir APP_DIR do assert File.exists? '.gitignore' end end def test_icons_are_updated Dir.chdir APP_DIR do assert_equal 4032, File.size('res/drawable-hdpi/ic_launcher.png') assert_equal 2548, File.size('res/drawable-mdpi/ic_launcher.png') assert_equal 1748, File.size('res/drawable-ldpi/ic_launcher.png') end end def test_activity_with_number_in_name Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen class Activity --name App1Activity" assert_equal 0, $?.exitstatus assert File.exists?('src/org/ruboto/test_app/App1Activity.java') assert File.exists?('src/app1_activity.rb') assert File.exists?('test/src/app1_activity_test.rb') end run_app_tests end def test_gen_class_activity_with_lowercase_should_fail Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen class activity --name VeryNewActivity" assert_equal 1, $?.exitstatus assert !File.exists?('src/org/ruboto/test_app/VeryNewActivity.java') assert !File.exists?('src/very_new_activity.rb') assert !File.exists?('test/src/very_new_activity_test.rb') assert File.read('AndroidManifest.xml') !~ /VeryNewActivity/ end end # APK was smaller than 277.2KB: 61.9KB. PLATFORM: CURRENT, ANDROID_TARGET: 10. # APK was smaller than 278.1KB: 67.2KB. PLATFORM: CURRENT, ANDROID_TARGET: 15. # APK was larger than 5800.0KB: 5879.2KB. PLATFORM: STANDALONE, ANDROID_TARGET: 15, JRuby: 1.6.7. # APK was larger than 7100.0KB: 7341.1KB. PLATFORM: STANDALONE, ANDROID_TARGET: 10, JRuby: 1.7.0.preview2. # APK was larger than 7308.0KB: 7558.3KB. PLATFORM: STANDALONE, ANDROID_TARGET: 15, JRuby: 1.7.0.preview2. # APK was larger than 4200.0KB: 7380.0KB. PLATFORM: STANDALONE, ANDROID_TARGET: 15, JRuby: 1.7.0. # APK was larger than 7600.0KB: 9962.1KB. PLATFORM: STANDALONE, ANDROID_TARGET: 10, JRuby: 1.7.2.dev. def test_new_apk_size_is_within_limits apk_size = BigDecimal(File.size("#{APP_DIR}/bin/RubotoTestApp-debug.apk").to_s) / 1024 version = " PLATFORM: #{RUBOTO_PLATFORM}" version << ", ANDROID_TARGET: #{ANDROID_TARGET}" if RUBOTO_PLATFORM == 'STANDALONE' upper_limit = { '1.6.7' => 5900.0, '1.6.8' => 5900.0, '1.7.0' => ANDROID_TARGET < 15 ? 7400.0 : 7600.0, '1.7.1.dev' => ANDROID_TARGET < 15 ? 7400.0 : 7600.0, '1.7.2.dev' => 9970.0, }[JRUBY_JARS_VERSION.to_s] || 7600.0 version << ", JRuby: #{JRUBY_JARS_VERSION.to_s}" else upper_limit = { 10 => 62.0, 15 => 63.0, }[ANDROID_TARGET] || 64.0 end lower_limit = upper_limit * 0.9 assert apk_size <= upper_limit, "APK was larger than #{'%.1f' % upper_limit}KB: #{'%.1f' % apk_size.ceil(1)}KB.#{version}" 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}" end def test_gen_subclass Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen subclass android.database.sqlite.SQLiteOpenHelper --name MyDatabaseHelper --method_base on" assert_equal 0, $?.exitstatus assert File.exists?('src/org/ruboto/test_app/MyDatabaseHelper.java') assert File.exists?('src/my_database_helper.rb') assert File.exists?('test/src/my_database_helper_test.rb') system 'rake debug' assert_equal 0, $? end end def test_gen_subclass_of_array_adapter Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen subclass android.widget.ArrayAdapter --name RubotoArrayAdapter --method_base all" assert_equal 0, $?.exitstatus java_source_file = 'src/org/ruboto/test_app/RubotoArrayAdapter.java' assert File.exists?(java_source_file) # FIXME(uwe): Workaround for Ruboto Issue #246 java_source = File.read(java_source_file) File.open(java_source_file, 'w'){|f| f << java_source.gsub(/^(public class .*ArrayAdapter) (.*ArrayAdapter)/, '\1\2').gsub(/T.class/, 'Object.class')} # EMXIF assert File.exists?('src/ruboto_array_adapter.rb') assert File.exists?('test/src/ruboto_array_adapter_test.rb') File.open('src/ruboto_test_app_activity.rb', 'w'){|f| f << < 'First row'}, {:image => resources.get_drawable($package.R::drawable::get_ruboto_core), :text1 => 'Second row'}, 'Third row'] adapter = $package.RubotoArrayAdapter.new(self, $package.R::layout::list_item, AndroidIds::text1, records) puts "adapter: \#{adapter.inspect}" self.content_view = linear_layout :orientation => :vertical do @text_view = text_view :text => 'What hath Matz wrought?', :id => 42, :width => :match_parent, :gravity => :center, :text_size => 48.0 list_view :adapter => adapter, :id => 43, :on_item_click_listener => proc{|parent, view, position, id| @text_view.text = 'List item clicked!'} end end end EOF File.open('test/src/ruboto_test_app_activity_test.rb', 'w'){|f| f << < 60) puts "Waiting for adapter: \#{@list_view && @list_view.adapter.inspect}" sleep 1 end assert @text_view assert @list_view assert @list_view.adapter end test('Item click changes text') do |activity| text_view = activity.findViewById(42) list_view = activity.findViewById(43) list_view.perform_item_click(list_view.adapter.get_view(1, nil, nil), 1, 1) assert_equal 'List item clicked!', text_view.text end EOF File.open('src/ruboto_array_adapter.rb', 'w'){|f| f << < EOF end run_app_tests end def test_activity_with_first_letter_lower_case_in_name Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen class Activity --name appActivity" assert_equal 0, $?.exitstatus assert File.exists?('src/org/ruboto/test_app/AppActivity.java') assert File.exists?('src/app_activity.rb') assert File.exists?('test/src/app_activity_test.rb') end end if RUBOTO_PLATFORM == 'FROM_GEM' def test_gen_jruby Dir.chdir APP_DIR do system "#{RUBOTO_CMD} gen jruby" assert_equal 0, $?.exitstatus assert_equal ["libs/jruby-core-#{JRUBY_JARS_VERSION.to_s.downcase}.jar"], Dir["libs/jruby-core-*.jar"].map(&:downcase) assert_equal ["libs/jruby-stdlib-#{JRUBY_JARS_VERSION.to_s.downcase}.jar"], Dir["libs/jruby-stdlib-*.jar"].map(&:downcase) end end end end