/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.os; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.RemoteException; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.Messenger; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; public class MessengerTest extends AndroidTestCase { private Messenger mServiceMessenger; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { synchronized (MessengerTest.this) { mServiceMessenger = new Messenger(service); MessengerTest.this.notifyAll(); } } public void onServiceDisconnected(ComponentName name) { mServiceMessenger = null; } }; private class TestThread extends TestHandlerThread { private Handler mTestHandler; private Messenger mTestMessenger; public void go() { synchronized (MessengerTest.this) { mTestHandler = new Handler() { public void handleMessage(Message msg) { TestThread.this.handleMessage(msg); } }; mTestMessenger = new Messenger(mTestHandler); TestThread.this.executeTest(); } } public void executeTest() { Message msg = Message.obtain(); msg.arg1 = 100; msg.arg2 = 1000; msg.replyTo = mTestMessenger; try { mServiceMessenger.send(msg); } catch (RemoteException e) { } } public void handleMessage(Message msg) { if (msg.arg1 != 100) { failure(new RuntimeException( "Message.arg1 is not 100: " + msg.arg1)); return; } if (msg.arg2 != 1000) { failure(new RuntimeException( "Message.arg2 is not 1000: " + msg.arg2)); return; } if (!mTestMessenger.equals(msg.replyTo)) { failure(new RuntimeException( "Message.replyTo is not me: " + msg.replyTo)); return; } success(); } }; @Override protected void setUp() throws Exception { super.setUp(); getContext().bindService(new Intent(mContext, MessengerService.class), mConnection, Context.BIND_AUTO_CREATE); synchronized (this) { while (mServiceMessenger == null) { try { wait(); } catch (InterruptedException e) { } } } } @Override protected void tearDown() throws Exception { super.tearDown(); getContext().unbindService(mConnection); } @MediumTest public void testSend() { (new TestThread()).doTest(1000); } }