| /* |
| * 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.os.Broadcaster; |
| import android.os.Handler; |
| import android.os.Message; |
| import android.test.suitebuilder.annotation.MediumTest; |
| import android.test.suitebuilder.annotation.SmallTest; |
| import junit.framework.TestCase; |
| |
| public class BroadcasterTest extends TestCase { |
| private static final int MESSAGE_A = 23234; |
| private static final int MESSAGE_B = 3; |
| private static final int MESSAGE_C = 14; |
| private static final int MESSAGE_D = 95; |
| |
| @MediumTest |
| public void test1() throws Exception { |
| /* |
| * One handler requestes one message, with a translation |
| */ |
| HandlerTester tester = new HandlerTester() { |
| Handler h; |
| |
| public void go() { |
| Broadcaster b = new Broadcaster(); |
| h = new H(); |
| |
| b.request(MESSAGE_A, h, MESSAGE_B); |
| |
| Message msg = new Message(); |
| msg.what = MESSAGE_A; |
| |
| b.broadcast(msg); |
| } |
| |
| public void handleMessage(Message msg) { |
| if (msg.what == MESSAGE_B) { |
| success(); |
| } else { |
| failure(); |
| } |
| } |
| }; |
| tester.doTest(1000); |
| } |
| |
| private static class Tests2and3 extends HandlerTester { |
| Tests2and3(int n) { |
| N = n; |
| } |
| |
| int N; |
| Handler mHandlers[]; |
| boolean mSuccess[]; |
| |
| public void go() { |
| Broadcaster b = new Broadcaster(); |
| mHandlers = new Handler[N]; |
| mSuccess = new boolean[N]; |
| for (int i = 0; i < N; i++) { |
| mHandlers[i] = new H(); |
| mSuccess[i] = false; |
| b.request(MESSAGE_A, mHandlers[i], MESSAGE_B + i); |
| } |
| |
| Message msg = new Message(); |
| msg.what = MESSAGE_A; |
| |
| b.broadcast(msg); |
| } |
| |
| public void handleMessage(Message msg) { |
| int index = msg.what - MESSAGE_B; |
| if (index < 0 || index >= N) { |
| failure(); |
| } else { |
| if (msg.getTarget() == mHandlers[index]) { |
| mSuccess[index] = true; |
| } |
| } |
| boolean winner = true; |
| for (int i = 0; i < N; i++) { |
| if (!mSuccess[i]) { |
| winner = false; |
| } |
| } |
| if (winner) { |
| success(); |
| } |
| } |
| } |
| |
| @MediumTest |
| public void test2() throws Exception { |
| /* |
| * 2 handlers request the same message, with different translations |
| */ |
| HandlerTester tester = new Tests2and3(2); |
| tester.doTest(1000); |
| } |
| |
| @MediumTest |
| public void test3() throws Exception { |
| /* |
| * 1000 handlers request the same message, with different translations |
| */ |
| HandlerTester tester = new Tests2and3(10); |
| tester.doTest(1000); |
| } |
| |
| @MediumTest |
| public void test4() throws Exception { |
| /* |
| * Two handlers request different messages, with translations, sending |
| * only one. The other one should never get sent. |
| */ |
| HandlerTester tester = new HandlerTester() { |
| Handler h1; |
| Handler h2; |
| |
| public void go() { |
| Broadcaster b = new Broadcaster(); |
| h1 = new H(); |
| h2 = new H(); |
| |
| b.request(MESSAGE_A, h1, MESSAGE_C); |
| b.request(MESSAGE_B, h2, MESSAGE_D); |
| |
| Message msg = new Message(); |
| msg.what = MESSAGE_A; |
| |
| b.broadcast(msg); |
| } |
| |
| public void handleMessage(Message msg) { |
| if (msg.what == MESSAGE_C && msg.getTarget() == h1) { |
| success(); |
| } else { |
| failure(); |
| } |
| } |
| }; |
| tester.doTest(1000); |
| } |
| |
| @MediumTest |
| public void test5() throws Exception { |
| /* |
| * Two handlers request different messages, with translations, sending |
| * only one. The other one should never get sent. |
| */ |
| HandlerTester tester = new HandlerTester() { |
| Handler h1; |
| Handler h2; |
| |
| public void go() { |
| Broadcaster b = new Broadcaster(); |
| h1 = new H(); |
| h2 = new H(); |
| |
| b.request(MESSAGE_A, h1, MESSAGE_C); |
| b.request(MESSAGE_B, h2, MESSAGE_D); |
| |
| Message msg = new Message(); |
| msg.what = MESSAGE_B; |
| |
| b.broadcast(msg); |
| } |
| |
| public void handleMessage(Message msg) { |
| if (msg.what == MESSAGE_D && msg.getTarget() == h2) { |
| success(); |
| } else { |
| failure(); |
| } |
| } |
| }; |
| tester.doTest(1000); |
| } |
| |
| @MediumTest |
| public void test6() throws Exception { |
| /* |
| * Two handlers request same message. Cancel the request for the |
| * 2nd handler, make sure the first still works. |
| */ |
| HandlerTester tester = new HandlerTester() { |
| Handler h1; |
| Handler h2; |
| |
| public void go() { |
| Broadcaster b = new Broadcaster(); |
| h1 = new H(); |
| h2 = new H(); |
| |
| b.request(MESSAGE_A, h1, MESSAGE_C); |
| b.request(MESSAGE_A, h2, MESSAGE_D); |
| b.cancelRequest(MESSAGE_A, h2, MESSAGE_D); |
| |
| Message msg = new Message(); |
| msg.what = MESSAGE_A; |
| |
| b.broadcast(msg); |
| } |
| |
| public void handleMessage(Message msg) { |
| if (msg.what == MESSAGE_C && msg.getTarget() == h1) { |
| success(); |
| } else { |
| failure(); |
| } |
| } |
| }; |
| tester.doTest(1000); |
| } |
| } |