/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.contacts.interactions; import com.android.contacts.common.R; import android.content.res.Configuration; import android.content.res.Resources; import android.test.AndroidTestCase; import android.text.format.DateUtils; import java.util.Calendar; import java.util.Locale; /** * Tests for utility functions in {@link ContactInteractionUtil} */ public class ContactInteractionUtilTest extends AndroidTestCase { private Locale mOriginalLocale; private Calendar calendar; @Override protected void setUp() throws Exception { super.setUp(); calendar = Calendar.getInstance(); // Time/Date utilities rely on specific locales. Forace US and set back in tearDown() mOriginalLocale = Locale.getDefault(); setLocale(Locale.US); } @Override protected void tearDown() throws Exception { setLocale(mOriginalLocale); super.tearDown(); } public void testOneQuestionMark() { assertEquals("(?)", ContactInteractionUtil.questionMarks(1)); } public void testTwoQuestionMarks() { assertEquals("(?,?)", ContactInteractionUtil.questionMarks(2)); } public void testFiveQuestionMarks() { assertEquals("(?,?,?,?,?)", ContactInteractionUtil.questionMarks(5)); } public void testFormatDateStringFromTimestamp_todaySingleMinuteAm() { // Test today scenario (time shown) // Single digit minute & AM calendar.set(Calendar.HOUR_OF_DAY, 8); calendar.set(Calendar.MINUTE, 8); long todayTimestamp = calendar.getTimeInMillis(); assertEquals("8:08 AM", ContactInteractionUtil.formatDateStringFromTimestamp( calendar.getTimeInMillis(), getContext())); } public void testFormatDateStringFromTimestamp_todayDoubleMinutePm() { // Double digit minute & PM calendar.set(Calendar.HOUR_OF_DAY, 22); calendar.set(Calendar.MINUTE, 18); assertEquals("10:18 PM", ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(), getContext())); } public void testFormatDateStringFromTimestamp_yesterday() { // Test yesterday and tomorrow (Yesterday or Tomorrow shown) calendar.add(Calendar.DAY_OF_YEAR, -1); assertEquals(getContext().getResources().getString(R.string.yesterday), ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(), getContext())); } public void testFormatDateStringFromTimestamp_yesterdayLastYear() { // Set to non leap year calendar.set(Calendar.YEAR, 1999); calendar.set(Calendar.DAY_OF_YEAR, 365); long lastYear = calendar.getTimeInMillis(); calendar.add(Calendar.DAY_OF_YEAR, 1); assertEquals(getContext().getResources().getString(R.string.yesterday), ContactInteractionUtil.formatDateStringFromTimestamp(lastYear, getContext(), calendar)); } public void testFormatDateStringFromTimestamp_tomorrow() { calendar.add(Calendar.DAY_OF_YEAR, 1); assertEquals(getContext().getResources().getString(R.string.tomorrow), ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(), getContext())); } public void testFormatDateStringFromTimestamp_tomorrowNewYear() { calendar.set(Calendar.DAY_OF_YEAR, 1); long thisYear = calendar.getTimeInMillis(); calendar.add(Calendar.DAY_OF_YEAR, -1); assertEquals(getContext().getResources().getString(R.string.tomorrow), ContactInteractionUtil.formatDateStringFromTimestamp(thisYear, getContext(), calendar)); } public void testFormatDateStringFromTimestamp_other() { // Test other (Month Date) calendar.set( /* year = */ 1991, /* month = */ Calendar.MONTH, /* day = */ 11); assertEquals("March 11", ContactInteractionUtil.formatDateStringFromTimestamp(calendar.getTimeInMillis(), getContext())); } private void setLocale(Locale locale) { Locale.setDefault(locale); Resources res = getContext().getResources(); Configuration config = res.getConfiguration(); config.locale = locale; res.updateConfiguration(config, res.getDisplayMetrics()); } }