1acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada/* 2acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * Copyright (C) 2013 The Android Open Source Project 3acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * 4acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * Licensed under the Apache License, Version 2.0 (the "License"); 5acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * you may not use this file except in compliance with the License. 6acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * You may obtain a copy of the License at 7acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * 8acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * http://www.apache.org/licenses/LICENSE-2.0 9acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * 10acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * Unless required by applicable law or agreed to in writing, software 11acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * distributed under the License is distributed on an "AS IS" BASIS, 12acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * See the License for the specific language governing permissions and 14acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada * limitations under the License. 15acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada */ 16acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 17acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanadapackage com.android.inputmethod.latin.utils; 18acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 19acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanadaimport android.test.AndroidTestCase; 20acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanadaimport android.test.suitebuilder.annotation.MediumTest; 21acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanadaimport android.util.Log; 22acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 23acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada@MediumTest 24acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanadapublic class AsyncResultHolderTests extends AndroidTestCase { 255f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka static final String TAG = AsyncResultHolderTests.class.getSimpleName(); 26acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 27acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada private static final int TIMEOUT_IN_MILLISECONDS = 500; 28acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada private static final int MARGIN_IN_MILLISECONDS = 250; 29acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada private static final int DEFAULT_VALUE = 2; 30acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada private static final int SET_VALUE = 1; 31acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 325f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka private static <T> void setAfterGivenTime(final AsyncResultHolder<T> holder, final T value, 33acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada final long time) { 34acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada new Thread(new Runnable() { 35acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada @Override 36acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada public void run() { 37acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada try { 38acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada Thread.sleep(time); 39acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } catch (InterruptedException e) { 40acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada Log.d(TAG, "Exception while sleeping", e); 41acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 42acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada holder.set(value); 43acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 44acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada }).start(); 45acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 46acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 47acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada public void testGetWithoutSet() { 485a53505fe4c0ae5d04bfcb3612908d3c93be90b1Dan Zivkovic final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>("Test"); 49acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS); 50acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada assertEquals(DEFAULT_VALUE, resultValue); 51acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 52acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 53acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada public void testGetBeforeSet() { 545a53505fe4c0ae5d04bfcb3612908d3c93be90b1Dan Zivkovic final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>("Test"); 55acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada setAfterGivenTime(holder, SET_VALUE, TIMEOUT_IN_MILLISECONDS + MARGIN_IN_MILLISECONDS); 56acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS); 57acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada assertEquals(DEFAULT_VALUE, resultValue); 58acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 59acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 60acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada public void testGetAfterSet() { 615a53505fe4c0ae5d04bfcb3612908d3c93be90b1Dan Zivkovic final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>("Test"); 62acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada holder.set(SET_VALUE); 63acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS); 64acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada assertEquals(SET_VALUE, resultValue); 65acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 66acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada 67acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada public void testGetBeforeTimeout() { 685a53505fe4c0ae5d04bfcb3612908d3c93be90b1Dan Zivkovic final AsyncResultHolder<Integer> holder = new AsyncResultHolder<>("Test"); 69acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada setAfterGivenTime(holder, SET_VALUE, TIMEOUT_IN_MILLISECONDS - MARGIN_IN_MILLISECONDS); 70acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada final int resultValue = holder.get(DEFAULT_VALUE, TIMEOUT_IN_MILLISECONDS); 71acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada assertEquals(SET_VALUE, resultValue); 72acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada } 73acdabb25f4c92e2e39b5cb4620889e2548c5d14cYuichiro Hanada} 74