mirror of
https://github.com/material-components/material-components-android.git
synced 2026-02-20 08:39:55 +08:00
Resolves https://github.com/material-components/material-components-android/pull/3051 GIT_ORIGIN_REV_ID=91b350bf4830f5903d4809a1c3b097bbec2c2b27 PiperOrigin-RevId: 524068644
445 lines
18 KiB
Java
445 lines
18 KiB
Java
/*
|
|
* Copyright 2019 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.google.android.material.datepicker;
|
|
|
|
import static org.hamcrest.MatcherAssert.assertThat;
|
|
import static org.hamcrest.core.Is.is;
|
|
|
|
import android.os.Build.VERSION_CODES;
|
|
import androidx.core.util.Pair;
|
|
import androidx.test.core.app.ApplicationProvider;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Locale;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.robolectric.RobolectricTestRunner;
|
|
import org.robolectric.annotation.Config;
|
|
import org.robolectric.annotation.internal.DoNotInstrument;
|
|
|
|
@RunWith(RobolectricTestRunner.class)
|
|
@Config(sdk = VERSION_CODES.N)
|
|
@DoNotInstrument
|
|
public class DateStringsTest {
|
|
|
|
private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
|
private Calendar startDate;
|
|
private Calendar endDate;
|
|
|
|
private static Calendar setupLocalizedCalendar(Locale locale, int year, int month, int day) {
|
|
Locale.setDefault(locale);
|
|
Calendar calendar = Calendar.getInstance();
|
|
calendar.clear();
|
|
calendar.set(Calendar.YEAR, year);
|
|
calendar.set(Calendar.MONTH, month);
|
|
calendar.set(Calendar.DAY_OF_MONTH, day);
|
|
return calendar;
|
|
}
|
|
|
|
@Test
|
|
public void frYearMonthDayString() {
|
|
Locale locale = Locale.FRANCE;
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("30 nov. " + CURRENT_YEAR));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("25 juin " + (CURRENT_YEAR + 1)));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("2 mars 2013"));
|
|
}
|
|
|
|
@Test
|
|
public void usYearMonthDayString() {
|
|
Locale locale = Locale.US;
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("Nov 30, " + CURRENT_YEAR));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("Jun 25, " + (CURRENT_YEAR + 1)));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("Mar 2, 2013"));
|
|
}
|
|
|
|
@Test
|
|
public void ptYearMonthDayString() {
|
|
Locale locale = new Locale("pt", "BR");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("30 de nov de " + CURRENT_YEAR));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("25 de jun de " + (CURRENT_YEAR + 1)));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("2 de mar de 2013"));
|
|
}
|
|
|
|
@Test
|
|
public void iwYearMonthDayString() {
|
|
Locale locale = new Locale("iw", "IL");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("30 בנוב׳ " + CURRENT_YEAR));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("25 ביוני " + (CURRENT_YEAR + 1)));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("2 במרץ 2013"));
|
|
}
|
|
|
|
@Test
|
|
public void arYearMonthDayString() {
|
|
Locale locale = new Locale("ar", "LY");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("30 نوفمبر، " + CURRENT_YEAR));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is("25 يونيو، " + (CURRENT_YEAR + 1)));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("2 مارس، 2013"));
|
|
}
|
|
|
|
@Test
|
|
public void zhYearMonthDayString() {
|
|
Locale locale = new Locale("zh", "CN");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is(CURRENT_YEAR + "年11月30日"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(
|
|
DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale),
|
|
is((CURRENT_YEAR + 1) + "年6月25日"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getYearMonthDay(startDate.getTimeInMillis(), locale), is("2013年3月2日"));
|
|
}
|
|
|
|
@Test
|
|
public void frMonthDayString() {
|
|
Locale locale = Locale.FRANCE;
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("30 nov."));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("25 juin"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("2 mars"));
|
|
}
|
|
|
|
@Test
|
|
public void usMonthDayString() {
|
|
Locale locale = Locale.US;
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("Nov 30"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("Jun 25"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("Mar 2"));
|
|
}
|
|
|
|
@Test
|
|
public void ptMonthDayString() {
|
|
Locale locale = new Locale("pt", "BR");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("30 de nov"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("25 de jun"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("2 de mar"));
|
|
}
|
|
|
|
@Test
|
|
public void iwMonthDayString() {
|
|
Locale locale = new Locale("iw", "IL");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("30 בנוב׳"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("25 ביוני"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("2 במרץ"));
|
|
}
|
|
|
|
@Test
|
|
public void arMonthDayString() {
|
|
Locale locale = new Locale("ar", "LY");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("30 نوفمبر"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("25 يونيو"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("2 مارس"));
|
|
}
|
|
|
|
@Test
|
|
public void zhMonthDayString() {
|
|
Locale locale = new Locale("zh", "CN");
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR, 10, 30);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("11月30日"));
|
|
startDate = setupLocalizedCalendar(locale, CURRENT_YEAR + 1, 5, 25);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("6月25日"));
|
|
startDate = setupLocalizedCalendar(locale, 2013, 2, 2);
|
|
assertThat(DateStrings.getMonthDay(startDate.getTimeInMillis(), locale), is("3月2日"));
|
|
}
|
|
|
|
@Test
|
|
public void getDateStringCurrentYear() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 10, 30);
|
|
String dateString = DateStrings.getDateString(startDate.getTimeInMillis(), null);
|
|
assertThat(dateString, is("Nov 30"));
|
|
}
|
|
|
|
@Test
|
|
public void getDateStringCurrentYearWithUserDefinedDateFormat() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 10, 30);
|
|
String dateString =
|
|
DateStrings.getDateString(
|
|
startDate.getTimeInMillis(), new SimpleDateFormat("MMMM dd, yyyy", Locale.US));
|
|
assertThat(dateString, is("November 30, " + CURRENT_YEAR));
|
|
}
|
|
|
|
@Test
|
|
public void getDateStringNextYear() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 10, 30);
|
|
String dateString = DateStrings.getDateString(startDate.getTimeInMillis(), null);
|
|
assertThat(dateString, is("Nov 30, " + (CURRENT_YEAR + 1)));
|
|
}
|
|
|
|
@Test
|
|
public void getDateStringNextYearWithUserDefinedDateFormat() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 10, 3);
|
|
String dateString =
|
|
DateStrings.getDateString(
|
|
startDate.getTimeInMillis(), new SimpleDateFormat("MMMM dd", Locale.US));
|
|
assertThat(dateString, is("November 03"));
|
|
}
|
|
|
|
@Test
|
|
public void getDateRangeStringCurrentYear() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 4, 30);
|
|
endDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 11, 5);
|
|
Pair<String, String> dateRangeString =
|
|
DateStrings.getDateRangeString(
|
|
startDate.getTimeInMillis(), endDate.getTimeInMillis(), null);
|
|
assertThat(dateRangeString.first, is("May 30"));
|
|
assertThat(dateRangeString.second, is("Dec 5"));
|
|
}
|
|
|
|
@Test
|
|
public void getDateRangeStringNextYear() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 4, 30);
|
|
endDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 11, 5);
|
|
Pair<String, String> dateRangeString =
|
|
DateStrings.getDateRangeString(
|
|
startDate.getTimeInMillis(), endDate.getTimeInMillis(), null);
|
|
assertThat(dateRangeString.first, is("May 30"));
|
|
assertThat(dateRangeString.second, is("Dec 5, " + (CURRENT_YEAR + 1)));
|
|
}
|
|
|
|
@Test
|
|
public void getDateRangeStringMultipleYears() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 4, 30);
|
|
endDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 11, 5);
|
|
Pair<String, String> dateRangeString =
|
|
DateStrings.getDateRangeString(
|
|
startDate.getTimeInMillis(), endDate.getTimeInMillis(), null);
|
|
assertThat(dateRangeString.first, is("May 30, " + CURRENT_YEAR));
|
|
assertThat(dateRangeString.second, is("Dec 5, " + (CURRENT_YEAR + 1)));
|
|
}
|
|
|
|
@Test
|
|
public void getDateRangeStringCurrentYearWithUserDefinedDateFormat() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 4, 30);
|
|
endDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 11, 5);
|
|
Pair<String, String> dateRangeString =
|
|
DateStrings.getDateRangeString(
|
|
startDate.getTimeInMillis(),
|
|
endDate.getTimeInMillis(),
|
|
new SimpleDateFormat("MMM dd, yyyy", Locale.US));
|
|
assertThat(dateRangeString.first, is("May 30, " + CURRENT_YEAR));
|
|
assertThat(dateRangeString.second, is("Dec 05, " + CURRENT_YEAR));
|
|
}
|
|
|
|
@Test
|
|
public void getDateRangeStringMultipleYearsWithUserDefinedDateFormat() {
|
|
startDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR, 4, 30);
|
|
endDate = setupLocalizedCalendar(Locale.US, CURRENT_YEAR + 1, 11, 5);
|
|
Pair<String, String> dateRangeString =
|
|
DateStrings.getDateRangeString(
|
|
startDate.getTimeInMillis(),
|
|
endDate.getTimeInMillis(),
|
|
new SimpleDateFormat("MMM dd", Locale.US));
|
|
assertThat(dateRangeString.first, is("May 30"));
|
|
assertThat(dateRangeString.second, is("Dec 05"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_notToday() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ false,
|
|
/* isStartOfRange= */ false,
|
|
/* isEndOfRange= */ false);
|
|
|
|
assertThat(contentDescription, is("Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_notToday_startOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ false,
|
|
/* isStartOfRange= */ true,
|
|
/* isEndOfRange= */ false);
|
|
|
|
assertThat(contentDescription, is("Start date Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_notToday_endOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ false,
|
|
/* isStartOfRange= */ false,
|
|
/* isEndOfRange= */ true);
|
|
|
|
assertThat(contentDescription, is("End date Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_notToday_startAndEndOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ false,
|
|
/* isStartOfRange= */ true,
|
|
/* isEndOfRange= */ true);
|
|
|
|
assertThat(contentDescription, is("Start date Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_today() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ true,
|
|
/* isStartOfRange= */ false,
|
|
/* isEndOfRange= */ false);
|
|
|
|
assertThat(contentDescription, is("Today Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_today_startOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ true,
|
|
/* isStartOfRange= */ true,
|
|
/* isEndOfRange= */ false);
|
|
|
|
assertThat(contentDescription, is("Start date Today Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_today_endOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ true,
|
|
/* isStartOfRange= */ false,
|
|
/* isEndOfRange= */ true);
|
|
|
|
assertThat(contentDescription, is("End date Today Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getDayContentDescription_today_startAndEndOfRange() {
|
|
startDate = setupLocalizedCalendar(Locale.US, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ true,
|
|
/* isStartOfRange= */ true,
|
|
/* isEndOfRange= */ true);
|
|
|
|
assertThat(contentDescription, is("Start date Today Monday, November 30, 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getLocalizedDayContentDescription_german() {
|
|
startDate = setupLocalizedCalendar(Locale.GERMAN, 2020, 10, 30);
|
|
String contentDescription =
|
|
DateStrings.getDayContentDescription(
|
|
ApplicationProvider.getApplicationContext(),
|
|
startDate.getTimeInMillis(),
|
|
/* isToday= */ false,
|
|
/* isStartOfRange= */ false,
|
|
/* isEndOfRange= */ false);
|
|
|
|
assertThat(contentDescription, is("Montag, 30. November 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getYearContentDescription_notCurrent() {
|
|
String contentDescription =
|
|
DateStrings.getYearContentDescription(ApplicationProvider.getApplicationContext(), 2020);
|
|
|
|
assertThat(contentDescription, is("Navigate to year 2020"));
|
|
}
|
|
|
|
@Test
|
|
public void getYearContentDescription_current() {
|
|
String contentDescription =
|
|
DateStrings.getYearContentDescription(
|
|
ApplicationProvider.getApplicationContext(), CURRENT_YEAR);
|
|
|
|
assertThat(contentDescription, is("Navigate to current year " + CURRENT_YEAR));
|
|
}
|
|
}
|