/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.android.vcard.tests.testutils; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Entity; import android.content.EntityIterator; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; import android.test.AndroidTestCase; import android.test.mock.MockContentProvider; import android.test.mock.MockCursor; import android.util.Log; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ExportTestProvider extends MockContentProvider { final private ArrayList mContactEntryList = new ArrayList(); private static class MockEntityIterator implements EntityIterator { private final List mEntityList; private Iterator mIterator; public MockEntityIterator(List contentValuesList) { mEntityList = new ArrayList(); Entity entity = new Entity(new ContentValues()); for (ContentValues contentValues : contentValuesList) { entity.addSubValue(Data.CONTENT_URI, contentValues); } mEntityList.add(entity); mIterator = mEntityList.iterator(); } @Override public boolean hasNext() { return mIterator.hasNext(); } @Override public Entity next() { return mIterator.next(); } @Override public void remove() { throw new UnsupportedOperationException("remove not supported"); } @Override public void reset() { mIterator = mEntityList.iterator(); } @Override public void close() { } } public ExportTestProvider(AndroidTestCase androidTestCase) { } public ContactEntry buildInputEntry() { ContactEntry contactEntry = new ContactEntry(); mContactEntryList.add(contactEntry); return contactEntry; } /** *

* An old method which had existed but was removed from ContentResolver. *

*

* We still keep using this method since we don't have a propeer way to know * which value in the ContentValue corresponds to the entry in Contacts database. *

*/ public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs, String sortOrder) { TestCase.assertTrue(uri != null); TestCase.assertTrue(ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())); final String authority = uri.getAuthority(); TestCase.assertTrue(RawContacts.CONTENT_URI.getAuthority().equals(authority)); TestCase.assertTrue((Data.CONTACT_ID + "=?").equals(selection)); TestCase.assertEquals(1, selectionArgs.length); final int id = Integer.parseInt(selectionArgs[0]); TestCase.assertTrue(id >= 0); TestCase.assertTrue(id < mContactEntryList.size()); return new MockEntityIterator(mContactEntryList.get(id).getList()); } @Override public Cursor query(Uri uri,String[] projection, String selection, String[] selectionArgs, String sortOrder) { TestCase.assertTrue(VCardVerifier.CONTACTS_TEST_CONTENT_URI.equals(uri)); // In this test, following arguments are not supported. TestCase.assertNull(selection); TestCase.assertNull(selectionArgs); TestCase.assertNull(sortOrder); return new MockCursor() { int mCurrentPosition = -1; @Override public int getCount() { return mContactEntryList.size(); } @Override public boolean moveToFirst() { mCurrentPosition = 0; return true; } @Override public boolean moveToNext() { if (mCurrentPosition < mContactEntryList.size()) { mCurrentPosition++; return true; } else { return false; } } @Override public boolean isBeforeFirst() { return mCurrentPosition < 0; } @Override public boolean isAfterLast() { return mCurrentPosition >= mContactEntryList.size(); } @Override public int getColumnIndex(String columnName) { TestCase.assertEquals(Contacts._ID, columnName); return 0; } @Override public int getInt(int columnIndex) { TestCase.assertEquals(0, columnIndex); TestCase.assertTrue(mCurrentPosition >= 0 && mCurrentPosition < mContactEntryList.size()); return mCurrentPosition; } @Override public String getString(int columnIndex) { return String.valueOf(getInt(columnIndex)); } @Override public void close() { } }; } }