1/*
2 * Copyright (C) 2014 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 */
16package com.android.contacts.interactions;
17
18import com.android.contacts.common.R;
19
20import android.content.res.Configuration;
21import android.content.res.Resources;
22import android.test.AndroidTestCase;
23import android.text.format.DateUtils;
24
25import java.util.Calendar;
26import java.util.Locale;
27
28/**
29 * Tests for utility functions in {@link ContactInteractionUtil}
30 */
31public class ContactInteractionUtilTest extends AndroidTestCase {
32
33    private Locale mOriginalLocale;
34    private Calendar calendar;
35
36    @Override
37    protected void setUp() throws Exception {
38        super.setUp();
39        calendar = Calendar.getInstance();
40
41        // Time/Date utilities rely on specific locales. Forace US and set back in tearDown()
42        mOriginalLocale = Locale.getDefault();
43        setLocale(Locale.US);
44    }
45
46    @Override
47    protected void tearDown() throws Exception {
48        setLocale(mOriginalLocale);
49        super.tearDown();
50    }
51
52    public void testOneQuestionMark() {
53        assertEquals("(?)", ContactInteractionUtil.questionMarks(1));
54    }
55
56    public void testTwoQuestionMarks() {
57        assertEquals("(?,?)", ContactInteractionUtil.questionMarks(2));
58    }
59
60    public void testFiveQuestionMarks() {
61        assertEquals("(?,?,?,?,?)", ContactInteractionUtil.questionMarks(5));
62    }
63
64    public void testFormatDateStringFromTimestamp_todaySingleMinuteAm() {
65        // Test today scenario (time shown)
66        // Single digit minute & AM
67        calendar.set(Calendar.HOUR_OF_DAY, 8);
68        calendar.set(Calendar.MINUTE, 8);
69        long todayTimestamp = calendar.getTimeInMillis();
70        assertEquals("8:08 AM", ContactInteractionUtil.formatDateStringFromTimestamp(
71                calendar.getTimeInMillis(), getContext()));
72    }
73
74    public void testFormatDateStringFromTimestamp_todayDoubleMinutePm() {
75        // Double digit minute & PM
76        calendar.set(Calendar.HOUR_OF_DAY, 22);
77        calendar.set(Calendar.MINUTE, 18);
78        assertEquals("10:18 PM",
79                ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
80                        getContext()));
81    }
82
83    public void testFormatDateStringFromTimestamp_yesterday() {
84        // Test yesterday and tomorrow (Yesterday or Tomorrow shown)
85        calendar.add(Calendar.DAY_OF_YEAR, -1);
86        assertEquals(getContext().getResources().getString(R.string.yesterday),
87                ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
88                        getContext()));
89    }
90
91    public void testFormatDateStringFromTimestamp_yesterdayLastYear() {
92        // Set to non leap year
93        calendar.set(Calendar.YEAR, 1999);
94        calendar.set(Calendar.DAY_OF_YEAR, 365);
95        long lastYear = calendar.getTimeInMillis();
96        calendar.add(Calendar.DAY_OF_YEAR, 1);
97
98        assertEquals(getContext().getResources().getString(R.string.yesterday),
99                ContactInteractionUtil.formatDateStringFromTimestamp(lastYear,
100                        getContext(), calendar));
101    }
102
103    public void testFormatDateStringFromTimestamp_tomorrow() {
104        calendar.add(Calendar.DAY_OF_YEAR, 1);
105        assertEquals(getContext().getResources().getString(R.string.tomorrow),
106                ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
107                        getContext()));
108    }
109
110    public void testFormatDateStringFromTimestamp_tomorrowNewYear() {
111        calendar.set(Calendar.DAY_OF_YEAR, 1);
112        long thisYear = calendar.getTimeInMillis();
113        calendar.add(Calendar.DAY_OF_YEAR, -1);
114
115        assertEquals(getContext().getResources().getString(R.string.tomorrow),
116                ContactInteractionUtil.formatDateStringFromTimestamp(thisYear,
117                        getContext(), calendar));
118    }
119
120    public void testFormatDateStringFromTimestamp_other() {
121        // Test other (Month Date)
122        calendar.set(
123                /* year = */ 1991,
124                /* month = */ Calendar.MONTH,
125                /* day = */ 11);
126        assertEquals("March 11",
127                ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(),
128                        getContext()));
129    }
130
131    private void setLocale(Locale locale) {
132        Locale.setDefault(locale);
133        Resources res = getContext().getResources();
134        Configuration config = res.getConfiguration();
135        config.locale = locale;
136        res.updateConfiguration(config, res.getDisplayMetrics());
137    }
138}