1b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook/* 2b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * Copyright (C) 2010 The Android Open Source Project 3b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * 4b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * Licensed under the Apache License, Version 2.0 (the "License"); 5b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * you may not use this file except in compliance with the License. 6b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * You may obtain a copy of the License at 7b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * 8b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * http://www.apache.org/licenses/LICENSE-2.0 9b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * 10b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * Unless required by applicable law or agreed to in writing, software 11b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS, 12b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * See the License for the specific language governing permissions and 14b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * limitations under the License. 15b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook */ 16b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 17b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookpackage com.android.exchange.adapter; 18b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 19b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport android.content.ContentResolver; 20b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport android.content.ContentUris; 21b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport android.content.Context; 22b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport android.test.AndroidTestCase; 23b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 24b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.emailcommon.provider.Account; 25b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.emailcommon.provider.Mailbox; 26b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.exchange.EasSyncService; 27b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.exchange.adapter.AbstractSyncAdapter; 28b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.exchange.adapter.EmailSyncAdapter; 29b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport com.android.exchange.adapter.EmailSyncAdapter.EasEmailSyncParser; 30b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 31b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport java.io.ByteArrayInputStream; 32b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport java.io.InputStream; 33b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport java.lang.reflect.Constructor; 34b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookimport java.lang.reflect.InvocationTargetException; 35b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 36b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrookpublic class SyncAdapterTestCase<T extends AbstractSyncAdapter> extends AndroidTestCase { 37b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public Context mContext; 38b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public Context mProviderContext; 39b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public ContentResolver mResolver; 40b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public Mailbox mMailbox; 41b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public Account mAccount; 42b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public EmailSyncAdapter mSyncAdapter; 43b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public EasEmailSyncParser mSyncParser; 44b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 45b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public SyncAdapterTestCase() { 46b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 47b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 48b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook @Override 49b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public void setUp() throws Exception { 50b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook super.setUp(); 51b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mContext = getContext(); 52b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook // This could be used with a MockContext if we switch over 53b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mProviderContext = mContext; 54b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mResolver = mContext.getContentResolver(); 55b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 56b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 57b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook @Override 58b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public void tearDown() throws Exception { 59b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook super.tearDown(); 60b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook // If we've created and saved an account, delete it 61b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook if (mAccount != null && mAccount.mId > 0) { 62b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mResolver.delete(ContentUris.withAppendedId(Account.CONTENT_URI, mAccount.mId), null, 63b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook null); 64b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 65b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 66b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 67b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook /** 68b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * Create and return a short, simple InputStream that has at least four bytes, which is all 69b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * that's required to initialize an EasParser (the parent class of EasEmailSyncParser) 70b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook * @return the InputStream 71b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook */ 72b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook public InputStream getTestInputStream() { 73b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook return new ByteArrayInputStream(new byte[] {0, 0, 0, 0, 0}); 74b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 75b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 76b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook EasSyncService getTestService() { 77b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mAccount = new Account(); 78b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mAccount.mEmailAddress = "__test__@android.com"; 79b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mAccount.mId = -1; 80b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook Mailbox mailbox = new Mailbox(); 81b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook mailbox.mId = -1; 82b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook return getTestService(mAccount, mailbox); 83b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 84b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 85b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook EasSyncService getTestService(Account account, Mailbox mailbox) { 86b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook EasSyncService service = new EasSyncService(); 87b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook service.mContext = mContext; 88b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook service.mMailbox = mailbox; 89b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook service.mAccount = account; 90b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook service.mContentResolver = mContext.getContentResolver(); 91b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook return service; 92b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 93b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 94b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook protected T getTestSyncAdapter(Class<T> klass) { 95b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook EasSyncService service = getTestService(); 96b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook Constructor<T> c; 97b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook try { 98b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook c = klass.getDeclaredConstructor(new Class[] {EasSyncService.class}); 99b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook return c.newInstance(service); 100b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (SecurityException e) { 101b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (NoSuchMethodException e) { 102b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (IllegalArgumentException e) { 103b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (InstantiationException e) { 104b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (IllegalAccessException e) { 105b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } catch (InvocationTargetException e) { 106b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 107b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook return null; 108b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook } 109b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook 110b931f82fa44c2e26e2645c0d5fde9eef3e666efdPaul Westbrook} 111