19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.SystemClock; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MessageQueueTest extends TestCase { 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class BaseTestHandler extends TestHandlerThread { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Handler mHandler; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mLastMessage; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mCount; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BaseTestHandler() { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void go() { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler = new Handler() { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BaseTestHandler.this.handleMessage(msg); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 44a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (!msg.isInUse()) { 45a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 46a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.isInuse is false, should always be true, #" + msg.what)); 47a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCount <= mLastMessage) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msg.what != mCount) { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failure(new RuntimeException( 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Expected message #" + mCount 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", received #" + msg.what)); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mCount == mLastMessage) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project success(); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCount++; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failure(new RuntimeException( 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Message received after done, #" + msg.what)); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testMessageOrder() throws Exception { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestHandlerThread tester = new BaseTestHandler() { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void go() { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.go(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long now = SystemClock.uptimeMillis() + 200; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastMessage = 4; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCount = 0; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(2), now + 1); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(3), now + 2); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(4), now + 2); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(0), now + 0); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(1), now + 0); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tester.doTest(1000); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testAtFrontOfQueue() throws Exception { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TestHandlerThread tester = new BaseTestHandler() { 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void go() { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.go(); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long now = SystemClock.uptimeMillis() + 200; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastMessage = 3; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCount = 0; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtTime(mHandler.obtainMessage(3), now); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(2)); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(0)); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.handleMessage(msg); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (msg.what == 0) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(1)); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tester.doTest(1000); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 106ddb2bfeb6e5a383306159672fe81333bf8520776Jaikumar Ganesh 107a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville private static class TestFieldIntegrityHandler extends TestHandlerThread { 108a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville Handler mHandler; 109a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville int mLastMessage; 110a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville int mCount; 111a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 112a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public TestFieldIntegrityHandler() { 113a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 114a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 115a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void go() { 116a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mHandler = new Handler() { 117a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void handleMessage(Message msg) { 118a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville TestFieldIntegrityHandler.this.handleMessage(msg); 119a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 120a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville }; 121a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 122a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 123a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void handleMessage(Message msg) { 124a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (!msg.isInUse()) { 125a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 126a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.isInuse is false, should always be true, #" + msg.what)); 127a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 128a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (mCount <= mLastMessage) { 129a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.what != mCount) { 130a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 131a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "Expected message #" + mCount 132a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville + ", received #" + msg.what)); 133a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } else if (mCount == mLastMessage) { 134a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville success(); 135a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 136a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mCount++; 137a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } else { 138a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 139a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "Message received after done, #" + msg.what)); 140a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 141a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 142a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 143a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 144a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville @MediumTest 145a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void testFieldIntegrity() throws Exception { 146a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 147a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville TestHandlerThread tester = new TestFieldIntegrityHandler() { 148a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville Bundle mBundle; 149a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 150a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void go() { 151a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville super.go(); 152a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mLastMessage = 1; 153a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mCount = 0; 154a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mHandler.sendMessage(mHandler.obtainMessage(0)); 155a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 156a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 157a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville public void handleMessage(Message msg) { 158a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville super.handleMessage(msg); 159a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.what == 0) { 160a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.flags = -1; 161a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.what = 1; 162a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.arg1 = 456; 163a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.arg2 = 789; 164a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.obj = this; 165a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.replyTo = null; 166a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mBundle = new Bundle(); 167a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.data = mBundle; 168a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.data.putString("key", "value"); 169a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 170a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville Message newMsg = mHandler.obtainMessage(); 171a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville newMsg.copyFrom(msg); 172a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.isInUse() != false) { 173a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 174a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.isInUse is true should be false after copyFrom")); 175a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 176a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.flags != 0) { 177a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 178a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.flags is %d should be 0 after copyFrom", newMsg.flags))); 179a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 180a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.what != 1) { 181a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 182a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.what is %d should be %d after copyFrom", newMsg.what, 1))); 183a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 184a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.arg1 != 456) { 185a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 186a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.arg1 is %d should be %d after copyFrom", msg.arg1, 456))); 187a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 188a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.arg2 != 789) { 189a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 190a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.arg2 is %d should be %d after copyFrom", msg.arg2, 789))); 191a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 192a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.obj != this) { 193a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 194a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.obj should be 'this' after copyFrom")); 195a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 196a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.replyTo != null) { 197a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 198a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.replyTo should be null after copyFrom")); 199a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 200a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.data == mBundle) { 201a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 202a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.data should NOT be mBundle after copyFrom")); 203a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 204a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (!newMsg.data.getString("key").equals(mBundle.getString("key"))) { 205a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 206a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.data.getString(\"key\") is %s and does not equal" + 207a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville " mBundle.getString(\"key\") which is %s after copyFrom", 208a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville newMsg.data.getString("key"), mBundle.getString("key")))); 209a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 210a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.when != 0) { 211a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 212a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.when is %d should be 0 after copyFrom", newMsg.when))); 213a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 214a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.target != mHandler) { 215a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 216a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.target is NOT mHandler after copyFrom")); 217a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 218a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (newMsg.callback != null) { 219a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException( 220a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "newMsg.callback is NOT null after copyFrom")); 221a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 222a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 223a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville mHandler.sendMessage(newMsg); 224a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } else if (msg.what == 1) { 225a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.isInUse() != true) { 226a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 227a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.isInUse is false should be true after when processing %d", 228a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.what))); 229a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 230a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.arg1 != 456) { 231a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 232a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.arg1 is %d should be %d when processing # %d", 233a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.arg1, 456, msg.what))); 234a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 235a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.arg2 != 789) { 236a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 237a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.arg2 is %d should be %d when processing # %d", 238a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.arg2, 789, msg.what))); 239a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 240a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.obj != this) { 241a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 242a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.obj should be 'this' when processing # %d", msg.what))); 243a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 244a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.replyTo != null) { 245a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 246a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.replyTo should be null when processing # %d", msg.what))); 247a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 248a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (!msg.data.getString("key").equals(mBundle.getString("key"))) { 249a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 250a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.data.getString(\"key\") is %s and does not equal" + 251a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville " mBundle.getString(\"key\") which is %s when processing # %d", 252a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.data.getString("key"), mBundle.getString("key"), msg.what))); 253a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 254a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.when != 0) { 255a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 256a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.when is %d should be 0 when processing # %d", 257a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville msg.when, msg.what))); 258a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 259a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.target != null) { 260a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 261a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.target is NOT null when processing # %d", msg.what))); 262a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 263a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville if (msg.callback != null) { 264a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 265a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "msg.callback is NOT null when processing # %d", msg.what))); 266a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 267a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } else { 268a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville failure(new RuntimeException(String.format( 269a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville "Unexpected msg.what is %d" + msg.what))); 270a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 271a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 272a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville }; 273a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville 274a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville tester.doTest(1000); 275a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville } 276a334e7c72408c4e2805f2427a35d841a60adefc4Wink Saville} 277