/* * Copyright (C) 2015 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.incallui; import android.location.Address; import android.test.AndroidTestCase; import android.util.Pair; import com.android.incallui.InCallContactInteractions.BusinessContextInfo; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Locale; /** * Tests for InCallContactInteractions class methods for formatting info for display. * * NOTE: tests assume system settings are set to 12hr time format and US locale. This means that * the output of InCallContactInteractions methods are compared against strings in 12hr time format * and US locale address formatting unless otherwise specified. */ public class InCallContactInteractionsTest extends AndroidTestCase { private InCallContactInteractions mInCallContactInteractions; private static final float TEST_DISTANCE = (float) 1234.56; @Override protected void setUp() { mInCallContactInteractions = new InCallContactInteractions(mContext, true /* isBusiness */); } public void testIsOpenNow_NowMatchesOpenTime() { assertEquals(mContext.getString(R.string.open_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(8), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .heading); } public void testIsOpenNow_ClosingAfterMidnight() { assertEquals(mContext.getString(R.string.open_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(10), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHourAndDaysFromToday(1, 1)))) .heading); } public void testIsOpenNow_Open24Hours() { assertEquals(mContext.getString(R.string.open_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(10), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHourAndDaysFromToday(8, 1)))) .heading); } public void testIsOpenNow_AfterMiddayBreak() { assertEquals(mContext.getString(R.string.open_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(13), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(10)), Pair.create( getTestCalendarWithHour(12), getTestCalendarWithHour(15)))) .heading); } public void testIsClosedNow_DuringMiddayBreak() { assertEquals(mContext.getString(R.string.closed_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(11), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(10)), Pair.create( getTestCalendarWithHour(12), getTestCalendarWithHour(15)))) .heading); } public void testIsClosedNow_BeforeOpen() { assertEquals(mContext.getString(R.string.closed_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(6), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .heading); } public void testIsClosedNow_NowMatchesClosedTime() { assertEquals(mContext.getString(R.string.closed_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(20), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .heading); } public void testIsClosedNow_AfterClosed() { assertEquals(mContext.getString(R.string.closed_now), mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(21), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .heading); } public void testOpeningHours_SingleOpenRangeWhileOpen() { assertEquals("8:00 AM - 8:00 PM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(12), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .detail); } public void testOpeningHours_TwoOpenRangesWhileOpen() { assertEquals("8:00 AM - 10:00 AM, 12:00 PM - 3:00 PM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(12), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(10)), Pair.create( getTestCalendarWithHour(12), getTestCalendarWithHour(15)))) .detail); } public void testOpeningHours_AfterClosedNoTomorrow() { assertEquals("Closed today at 8:00 PM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(21), Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(20)))) .detail); } public void testOpeningHours_NotOpenTodayOpenTomorrow() { assertEquals("Opens tomorrow at 8:00 AM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(21), Arrays.asList( Pair.create( getTestCalendarWithHourAndDaysFromToday(8, 1), getTestCalendarWithHourAndDaysFromToday(10, 1)))) .detail); } public void testMultipleOpenRanges_BeforeOpen() { assertEquals("Opens today at 8:00 AM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(7), getMultipleOpeningHours()) .detail); } public void testMultipleOpenRanges_DuringFirstRange() { assertEquals("Closes at 10:00 AM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(9), getMultipleOpeningHours()) .detail); } public void testMultipleOpenRanges_BeforeMiddleRange() { assertEquals("Opens today at 12:00 PM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(11), getMultipleOpeningHours()) .detail); } public void testMultipleOpeningHours_DuringLastRange() { assertEquals("Closes at 9:00 PM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(19), getMultipleOpeningHours()) .detail); } public void testMultipleOpeningHours_AfterClose() { assertEquals("Opens tomorrow at 8:00 AM", mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(22), getMultipleOpeningHours()) .detail); } public void testNotOpenTodayOrTomorrow() { assertEquals(null, mInCallContactInteractions.constructHoursInfo( getTestCalendarWithHour(21), new ArrayList>())); } public void testLocationInfo_ForUS() { BusinessContextInfo info = mInCallContactInteractions.constructLocationInfo( Locale.US, getAddressForTest(), TEST_DISTANCE); assertEquals("0.8 mi away", info.heading); assertEquals("Test address, Test locality", info.detail); } public void testLocationInfo_ForNotUS() { BusinessContextInfo info = mInCallContactInteractions.constructLocationInfo( Locale.CANADA, getAddressForTest(), TEST_DISTANCE); assertEquals("1.2 km away", info.heading); assertEquals("Test address, Test locality", info.detail); } public void testLocationInfo_NoLocality() { Address address = getAddressForTest(); address.setLocality(null); BusinessContextInfo info = mInCallContactInteractions.constructLocationInfo( Locale.CANADA, address, TEST_DISTANCE); assertEquals("1.2 km away", info.heading); assertEquals("Test address", info.detail); } public void testLocationInfo_NoAddress() { BusinessContextInfo info = mInCallContactInteractions.constructLocationInfo( Locale.CANADA, null, TEST_DISTANCE); assertEquals(null, info); } public void testLocationInfo_NoDistance() { BusinessContextInfo info = mInCallContactInteractions.constructLocationInfo( Locale.US, getAddressForTest(), DistanceHelper.DISTANCE_NOT_FOUND); assertEquals(null, info.heading); } private Address getAddressForTest() { Address address = new Address(Locale.US); address.setAddressLine(0, "Test address"); address.setLocality("Test locality"); return address; } private Calendar getTestCalendarWithHour(int hour) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar; } private Calendar getTestCalendarWithHourAndDaysFromToday(int hour, int daysFromToday) { Calendar calendar = getTestCalendarWithHour(hour); calendar.add(Calendar.DATE, daysFromToday); return calendar; } private List> getMultipleOpeningHours() { return Arrays.asList( Pair.create( getTestCalendarWithHour(8), getTestCalendarWithHour(10)), Pair.create( getTestCalendarWithHour(12), getTestCalendarWithHour(15)), Pair.create( getTestCalendarWithHour(17), getTestCalendarWithHour(21)), Pair.create( getTestCalendarWithHourAndDaysFromToday(8, 1), getTestCalendarWithHourAndDaysFromToday(10, 1)), Pair.create( getTestCalendarWithHourAndDaysFromToday(12, 1), getTestCalendarWithHourAndDaysFromToday(8, 1))); } }