Home | History | Annotate | Download | only in database
      1 /*
      2  * Copyright (C) 2012 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.contacts.common.database;
     18 
     19 import android.database.Cursor;
     20 import android.net.Uri;
     21 import android.test.InstrumentationTestCase;
     22 import android.test.mock.MockContentProvider;
     23 import android.test.mock.MockContentResolver;
     24 
     25 import java.util.concurrent.CountDownLatch;
     26 import java.util.concurrent.TimeUnit;
     27 
     28 /**
     29  * Unit test for {@link NoNullCursorAsyncQueryHandler}
     30  */
     31 public class NoNullCursorAsyncQueryHandlerTest extends InstrumentationTestCase {
     32 
     33     private MockContentResolver mMockContentResolver;
     34 
     35     private static final String AUTHORITY = "com.android.contacts.common.unittest";
     36     private static final Uri URI = Uri.parse("content://" + AUTHORITY);
     37     private static final String[] PROJECTION = new String[]{"column1", "column2"};
     38 
     39     @Override
     40     public void setUp() throws Exception {
     41         super.setUp();
     42         mMockContentResolver = new MockContentResolver();
     43         final MockContentProvider mMockContentProvider = new MockContentProvider() {
     44             @Override
     45             public Cursor query(Uri uri, String[] projection, String selection,
     46                     String[] selectionArgs,
     47                     String sortOrder) {
     48                 return null;
     49             }
     50         };
     51 
     52         mMockContentResolver.addProvider(AUTHORITY, mMockContentProvider);
     53     }
     54 
     55     public void testCursorIsNotNull() throws Throwable {
     56 
     57         final CountDownLatch latch = new CountDownLatch(1);
     58         final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
     59         final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
     60 
     61         runTestOnUiThread(new Runnable() {
     62 
     63             @Override
     64             public void run() {
     65 
     66                 NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
     67                         mMockContentResolver) {
     68                     @Override
     69                     protected void onNotNullableQueryComplete(int token, Object cookie,
     70                             Cursor cursor) {
     71                         cursorHolder.obj = cursor;
     72                         ranHolder.obj = true;
     73                         latch.countDown();
     74                     }
     75                 };
     76                 handler.startQuery(1, null, URI, PROJECTION, null, null, null);
     77             }
     78         });
     79 
     80         latch.await(5, TimeUnit.SECONDS);
     81         assertFalse(cursorHolder.obj == null);
     82         assertTrue(ranHolder.obj);
     83     }
     84 
     85     public void testCursorContainsCorrectCookies() throws Throwable {
     86         final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
     87         final CountDownLatch latch = new CountDownLatch(1);
     88         final ObjectHolder<Object> cookieHolder = ObjectHolder.newInstance();
     89         final String cookie = "TEST COOKIE";
     90         runTestOnUiThread(new Runnable() {
     91             @Override
     92             public void run() {
     93                 final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
     94                         mMockContentResolver) {
     95                     @Override
     96                     protected void onNotNullableQueryComplete(int token, Object cookie,
     97                             Cursor cursor) {
     98                         ranHolder.obj = true;
     99                         cookieHolder.obj = cookie;
    100                         latch.countDown();
    101                     }
    102                 };
    103                 handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
    104             }
    105         });
    106 
    107         latch.await(5, TimeUnit.SECONDS);
    108         assertSame(cookie, cookieHolder.obj);
    109         assertTrue(ranHolder.obj);
    110     }
    111 
    112     public void testCursorContainsCorrectColumns() throws Throwable {
    113         final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
    114         final CountDownLatch latch = new CountDownLatch(1);
    115         final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
    116         final String cookie = "TEST COOKIE";
    117         runTestOnUiThread(new Runnable() {
    118             @Override
    119             public void run() {
    120                 final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
    121                         mMockContentResolver) {
    122                     @Override
    123                     protected void onNotNullableQueryComplete(int token, Object cookie,
    124                             Cursor cursor) {
    125                         ranHolder.obj = true;
    126                         cursorHolder.obj = cursor;
    127                         latch.countDown();
    128                     }
    129                 };
    130                 handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
    131             }
    132         });
    133 
    134         latch.await(5, TimeUnit.SECONDS);
    135         assertSame(PROJECTION, cursorHolder.obj.getColumnNames());
    136         assertTrue(ranHolder.obj);
    137     }
    138 
    139     private static class ObjectHolder<T> {
    140         public T obj;
    141 
    142         public static <E> ObjectHolder<E> newInstance() {
    143             return new ObjectHolder<E>();
    144         }
    145 
    146         public static <E> ObjectHolder<E> newInstance(E value) {
    147             ObjectHolder<E> holder = new ObjectHolder<E>();
    148             holder.obj = value;
    149             return holder;
    150         }
    151     }
    152 }
    153