1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * 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, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 package com.android.vcard.tests.testutils; 17 18 import android.content.ContentResolver; 19 import android.content.ContentValues; 20 import android.content.Entity; 21 import android.content.EntityIterator; 22 import android.database.Cursor; 23 import android.net.Uri; 24 import android.provider.ContactsContract.Contacts; 25 import android.provider.ContactsContract.Data; 26 import android.provider.ContactsContract.RawContacts; 27 import android.test.AndroidTestCase; 28 import android.test.mock.MockContentProvider; 29 import android.test.mock.MockCursor; 30 import android.util.Log; 31 32 import junit.framework.TestCase; 33 34 import java.util.ArrayList; 35 import java.util.Iterator; 36 import java.util.List; 37 38 public class ExportTestProvider extends MockContentProvider { 39 final private ArrayList<ContactEntry> mContactEntryList = new ArrayList<ContactEntry>(); 40 41 private static class MockEntityIterator implements EntityIterator { 42 private final List<Entity> mEntityList; 43 private Iterator<Entity> mIterator; 44 45 public MockEntityIterator(List<ContentValues> contentValuesList) { 46 mEntityList = new ArrayList<Entity>(); 47 Entity entity = new Entity(new ContentValues()); 48 for (ContentValues contentValues : contentValuesList) { 49 entity.addSubValue(Data.CONTENT_URI, contentValues); 50 } 51 mEntityList.add(entity); 52 mIterator = mEntityList.iterator(); 53 } 54 55 @Override 56 public boolean hasNext() { 57 return mIterator.hasNext(); 58 } 59 60 @Override 61 public Entity next() { 62 return mIterator.next(); 63 } 64 65 @Override 66 public void remove() { 67 throw new UnsupportedOperationException("remove not supported"); 68 } 69 70 @Override 71 public void reset() { 72 mIterator = mEntityList.iterator(); 73 } 74 75 @Override 76 public void close() { 77 } 78 } 79 80 public ExportTestProvider(AndroidTestCase androidTestCase) { 81 } 82 83 public ContactEntry buildInputEntry() { 84 ContactEntry contactEntry = new ContactEntry(); 85 mContactEntryList.add(contactEntry); 86 return contactEntry; 87 } 88 89 /** 90 * <p> 91 * An old method which had existed but was removed from ContentResolver. 92 * </p> 93 * <p> 94 * We still keep using this method since we don't have a propeer way to know 95 * which value in the ContentValue corresponds to the entry in Contacts database. 96 * </p> 97 */ 98 public EntityIterator queryEntities(Uri uri, 99 String selection, String[] selectionArgs, String sortOrder) { 100 TestCase.assertTrue(uri != null); 101 TestCase.assertTrue(ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())); 102 final String authority = uri.getAuthority(); 103 TestCase.assertTrue(RawContacts.CONTENT_URI.getAuthority().equals(authority)); 104 TestCase.assertTrue((Data.CONTACT_ID + "=?").equals(selection)); 105 TestCase.assertEquals(1, selectionArgs.length); 106 final int id = Integer.parseInt(selectionArgs[0]); 107 TestCase.assertTrue(id >= 0); 108 TestCase.assertTrue(id < mContactEntryList.size()); 109 110 return new MockEntityIterator(mContactEntryList.get(id).getList()); 111 } 112 113 @Override 114 public Cursor query(Uri uri,String[] projection, 115 String selection, String[] selectionArgs, String sortOrder) { 116 TestCase.assertTrue(VCardVerifier.CONTACTS_TEST_CONTENT_URI.equals(uri)); 117 // In this test, following arguments are not supported. 118 TestCase.assertNull(selection); 119 TestCase.assertNull(selectionArgs); 120 TestCase.assertNull(sortOrder); 121 122 return new MockCursor() { 123 int mCurrentPosition = -1; 124 125 @Override 126 public int getCount() { 127 return mContactEntryList.size(); 128 } 129 130 @Override 131 public boolean moveToFirst() { 132 mCurrentPosition = 0; 133 return true; 134 } 135 136 @Override 137 public boolean moveToNext() { 138 if (mCurrentPosition < mContactEntryList.size()) { 139 mCurrentPosition++; 140 return true; 141 } else { 142 return false; 143 } 144 } 145 146 @Override 147 public boolean isBeforeFirst() { 148 return mCurrentPosition < 0; 149 } 150 151 @Override 152 public boolean isAfterLast() { 153 return mCurrentPosition >= mContactEntryList.size(); 154 } 155 156 @Override 157 public int getColumnIndex(String columnName) { 158 TestCase.assertEquals(Contacts._ID, columnName); 159 return 0; 160 } 161 162 @Override 163 public int getInt(int columnIndex) { 164 TestCase.assertEquals(0, columnIndex); 165 TestCase.assertTrue(mCurrentPosition >= 0 166 && mCurrentPosition < mContactEntryList.size()); 167 return mCurrentPosition; 168 } 169 170 @Override 171 public String getString(int columnIndex) { 172 return String.valueOf(getInt(columnIndex)); 173 } 174 175 @Override 176 public void close() { 177 } 178 }; 179 } 180 }