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