1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of 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,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts.model;
18
19import android.os.Bundle;
20import android.test.AndroidTestCase;
21import android.test.MoreAsserts;
22import android.test.suitebuilder.annotation.SmallTest;
23
24import com.android.contacts.model.account.AccountWithDataSet;
25
26import com.google.common.collect.Lists;
27
28import java.util.List;
29
30/**
31 * Test case for {@link AccountWithDataSet}.
32 *
33 * adb shell am instrument -w -e class com.android.contacts.model.AccountWithDataSetTest \
34       com.android.contacts.tests/android.test.InstrumentationTestRunner
35 */
36@SmallTest
37public class AccountWithDataSetTest extends AndroidTestCase {
38    public void testStringifyAndUnstringify() {
39        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
40        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
41        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
42
43        // stringify() & unstringify
44        AccountWithDataSet a1r = AccountWithDataSet.unstringify(a1.stringify());
45        AccountWithDataSet a2r = AccountWithDataSet.unstringify(a2.stringify());
46        AccountWithDataSet a3r = AccountWithDataSet.unstringify(a3.stringify());
47
48        assertEquals(a1, a1r);
49        assertEquals(a2, a2r);
50        assertEquals(a3, a3r);
51
52        MoreAsserts.assertNotEqual(a1, a2r);
53        MoreAsserts.assertNotEqual(a1, a3r);
54
55        MoreAsserts.assertNotEqual(a2, a1r);
56        MoreAsserts.assertNotEqual(a2, a3r);
57
58        MoreAsserts.assertNotEqual(a3, a1r);
59        MoreAsserts.assertNotEqual(a3, a2r);
60    }
61
62    public void testStringifyAndUnstringifyLocalAccount() {
63        final String stringified = AccountWithDataSet.getNullAccount().stringify();
64
65        final AccountWithDataSet restored = AccountWithDataSet.unstringify(stringified);
66
67        assertEquals(AccountWithDataSet.getNullAccount(), restored);
68    }
69
70    public void testStringifyListAndUnstringify() {
71        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
72        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
73        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
74
75        // Empty list
76        assertEquals(0, stringifyListAndUnstringify().size());
77
78        // 1 element
79        final List<AccountWithDataSet> listA = stringifyListAndUnstringify(a1);
80        assertEquals(1, listA.size());
81        assertEquals(a1, listA.get(0));
82
83        // 2 elements
84        final List<AccountWithDataSet> listB = stringifyListAndUnstringify(a2, a1);
85        assertEquals(2, listB.size());
86        assertEquals(a2, listB.get(0));
87        assertEquals(a1, listB.get(1));
88
89        // 3 elements
90        final List<AccountWithDataSet> listC = stringifyListAndUnstringify(a3, a2, a1);
91        assertEquals(3, listC.size());
92        assertEquals(a3, listC.get(0));
93        assertEquals(a2, listC.get(1));
94        assertEquals(a1, listC.get(2));
95    }
96
97    private static List<AccountWithDataSet> stringifyListAndUnstringify(
98            AccountWithDataSet... accounts) {
99
100        List<AccountWithDataSet> list = Lists.newArrayList(accounts);
101        return AccountWithDataSet.unstringifyList(AccountWithDataSet.stringifyList(list));
102    }
103
104    public void testParcelable() {
105        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
106        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
107        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
108
109        // Parcel them & unpercel.
110        final Bundle b = new Bundle();
111        b.putParcelable("a1", a1);
112        b.putParcelable("a2", a2);
113        b.putParcelable("a3", a3);
114
115        AccountWithDataSet a1r = b.getParcelable("a1");
116        AccountWithDataSet a2r = b.getParcelable("a2");
117        AccountWithDataSet a3r = b.getParcelable("a3");
118
119        assertEquals(a1, a1r);
120        assertEquals(a2, a2r);
121        assertEquals(a3, a3r);
122
123        MoreAsserts.assertNotEqual(a1, a2r);
124        MoreAsserts.assertNotEqual(a1, a3r);
125
126        MoreAsserts.assertNotEqual(a2, a1r);
127        MoreAsserts.assertNotEqual(a2, a3r);
128
129        MoreAsserts.assertNotEqual(a3, a1r);
130        MoreAsserts.assertNotEqual(a3, a2r);
131    }
132}
133