1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.quicksearchbox; 18 19 import com.android.quicksearchbox.util.Consumer; 20 import com.android.quicksearchbox.util.NowOrLater; 21 22 import android.test.AndroidTestCase; 23 24 /** 25 * Base class for tests for {@link IconLoader} subclasses. 26 * 27 */ 28 public abstract class IconLoaderTest extends AndroidTestCase { 29 30 protected IconLoader mLoader; 31 32 @Override setUp()33 protected void setUp() throws Exception { 34 mLoader = create(); 35 } 36 create()37 protected abstract IconLoader create() throws Exception; 38 testGetIcon()39 public void testGetIcon() { 40 assertNull(mLoader.getIcon(null)); 41 assertNull(mLoader.getIcon("")); 42 assertNull(mLoader.getIcon("0")); 43 assertNotNull(mLoader.getIcon(String.valueOf(android.R.drawable.star_on))); 44 } 45 assertNull(NowOrLater<?> value)46 public void assertNull(NowOrLater<?> value) { 47 if (value.haveNow()) { 48 assertNull(value.getNow()); 49 } else { 50 AssertConsumer<Object> consumer = new AssertConsumer<Object>(); 51 value.getLater(consumer); 52 consumer.assertNull(); 53 } 54 } 55 assertNotNull(NowOrLater<?> value)56 public void assertNotNull(NowOrLater<?> value) { 57 if (value.haveNow()) { 58 assertNotNull(value.getNow()); 59 } else { 60 AssertConsumer<Object> consumer = new AssertConsumer<Object>(); 61 value.getLater(consumer); 62 consumer.assertNotNull(); 63 } 64 } 65 66 protected static class AssertConsumer<C> implements Consumer<C> { 67 private boolean mConsumed = false; 68 private Object mValue; consume(Object value)69 public boolean consume(Object value) { 70 synchronized(this) { 71 mConsumed = true; 72 mValue = value; 73 this.notifyAll(); 74 } 75 return true; 76 } waitFor()77 public synchronized Object waitFor() { 78 if (!mConsumed) { 79 try { 80 this.wait(); 81 } catch (InterruptedException e) { 82 } 83 } 84 return mValue; 85 } assertNull()86 public void assertNull() { 87 IconLoaderTest.assertNull(waitFor()); 88 } assertNotNull()89 public void assertNotNull() { 90 IconLoaderTest.assertNotNull(waitFor()); 91 } reset()92 public AssertConsumer<C> reset() { 93 mConsumed = false; 94 mValue = null; 95 return this; 96 } 97 } 98 99 } 100