blob: 625cda44837b93739edaca596a8b50afde39f7eb [file] [log] [blame]
/*
* 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<Pair<Calendar, Calendar>>()));
}
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<Pair<Calendar, Calendar>> 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)));
}
}