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