ruboto/ruboto

View on GitHub
assets/samples/sample_broadcast_receiver_test.rb

Summary

Maintainability
A
20 mins
Test Coverage
# Change this to the activity that will send the broadcast
activity Java::THE_PACKAGE.SampleActivity

# Change this to wait for the activity to be created
setup do |activity|
  start = Time.now
  loop do
    @text_view = activity.findViewById(42)
    break if @text_view || (Time.now - start > 60)
    sleep 1
  end
  assert @text_view
end

# Change this to trigger the sending of broadcast intents
# and assert that the receiver behaves correctly.
test('broadcast changes title', :ui => false) do |activity|
  begin
    @receiver = $package.SampleBroadcastReceiver.new
    action = '__THE_PACKAGE__.SampleBroadcastReceiver.action'
    filter = android.content.IntentFilter.new(action)
    receiver_ready = false
    Thread.start do
      begin
        android.os.Looper.prepare
        activity.registerReceiver(@receiver, filter, nil, android.os.Handler.new)
        receiver_ready = true
        android.os.Looper.loop
      rescue
        puts 'Exception starting receiver'
        puts $!.message
        puts $!.backtrace.join("\n")
      end
    end
    sleep 0.1 until receiver_ready
    intent = android.content.Intent.new
    intent.set_action action
    activity.send_broadcast(intent)
    bc_sent_at = Time.now

    message = 'Broadcast received!'
    sleep 0.1 until activity.title == message || (Time.now - bc_sent_at) > 10
    assert_equal message, activity.title
  ensure
    activity.unregister_receiver(@receiver) if @receiver
  end
end