diff --git a/components/datetime/src/pattern/parser.rs b/components/datetime/src/pattern/parser.rs index cee769477d7..c9b7edd18c3 100644 --- a/components/datetime/src/pattern/parser.rs +++ b/components/datetime/src/pattern/parser.rs @@ -144,7 +144,7 @@ impl<'p> Parser<'p> { pub fn parse_placeholders( mut self, - mut replacements: Vec, + replacements: Vec, ) -> Result, Error> { let mut chars = self.source.chars().peekable(); let mut result = vec![]; @@ -157,7 +157,7 @@ impl<'p> Parser<'p> { let ch = chars.next().ok_or(Error::UnclosedPlaceholder)?; let idx: u32 = ch.to_digit(10).ok_or(Error::UnknownSubstitution(ch))?; let replacement = replacements - .get_mut(idx as usize) + .get(idx as usize) .ok_or(Error::UnknownSubstitution(ch))?; result.extend_from_slice(replacement.items()); let ch = chars.next().ok_or(Error::UnclosedPlaceholder)?; diff --git a/components/datetime/tests/datetime.rs b/components/datetime/tests/datetime.rs index 038e1897092..2849dc4bb48 100644 --- a/components/datetime/tests/datetime.rs +++ b/components/datetime/tests/datetime.rs @@ -358,8 +358,8 @@ fn test_components_width_differences() { /// Tests that component::Bags can combine a date skeleton, and a time skeleton. #[test] fn test_components_combine_datetime() { - // components/datetime/tests/fixtures/tests/components-combine-date-time.json - test_fixture("components-combine-date-time"); + // components/datetime/tests/fixtures/tests/components-combine-datetime.json + test_fixture("components-combine-datetime"); } #[test] diff --git a/components/datetime/tests/fixtures/tests/components-combine-date-time.json b/components/datetime/tests/fixtures/tests/components-combine-date-time.json deleted file mode 100644 index 5b50596b52e..00000000000 --- a/components/datetime/tests/fixtures/tests/components-combine-date-time.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "description": "Combine date and time: yMMMd + Ehm", - "input": { - "locale": "en", - "value": "2020-01-07T08:25:07.000", - "options": { - "components": { - "year": "numeric", - "month": "short", - "day": "numeric", - - "weekday": "short", - "hour": "numeric", - "minute": "numeric", - "preferences": { "hourCycle": "h12" } - } - } - }, - "output": { - "value": "Tue, Jan 7, 2020, 8:25 AM" - } - }, - { - "description": "Combine date and time with a \"full\" length glue pattern", - "input": { - "locale": "en", - "value": "2020-01-07T08:25:07.000", - "options": { - "components": { - "year": "numeric", - "month": "long", - "day": "numeric", - - "weekday": "long", - "hour": "numeric", - "minute": "numeric", - "preferences": { "hourCycle": "h12" } - } - } - }, - "output": { - "value": "Tuesday, January 7, 2020 at 8:25 AM" - } - } -] diff --git a/components/datetime/tests/fixtures/tests/components-combine-datetime.json b/components/datetime/tests/fixtures/tests/components-combine-datetime.json index fc9fcffbb13..5b50596b52e 100644 --- a/components/datetime/tests/fixtures/tests/components-combine-datetime.json +++ b/components/datetime/tests/fixtures/tests/components-combine-datetime.json @@ -40,7 +40,7 @@ } }, "output": { - "value": "Tue, Jan 7, 2020 at 8:25 AM" + "value": "Tuesday, January 7, 2020 at 8:25 AM" } } ] diff --git a/provider/cldr/src/transform/dates/patterns.rs b/provider/cldr/src/transform/dates/patterns.rs index 6367d3e47b6..c4796648c77 100644 --- a/provider/cldr/src/transform/dates/patterns.rs +++ b/provider/cldr/src/transform/dates/patterns.rs @@ -273,7 +273,7 @@ impl From<&cldr_json::Dates> for gregory::DatePatternsV1 { time_h11_h12, time_h23_h24, preferred_hour_cycle, - datetime: (&other.calendars.gregorian.datetime_formats).into(), + datetime: date_time_formats_v1, } } } @@ -327,3 +327,32 @@ fn test_with_numbering_system() { // TODO(#308): Support numbering system variations. We currently throw them away. assert_eq!("d/M/yy", cs_dates.get().date.short); } + +#[test] +fn test_datetime_skeletons() { + use gregory::patterns::{PatternV1, SkeletonV1}; + use icu_locid_macros::langid; + + let cldr_paths = crate::cldr_paths::for_test(); + let provider = DatePatternsProvider::try_from(&cldr_paths as &dyn CldrPaths).unwrap(); + + let cs_dates: DataPayload = provider + .load_payload(&DataRequest { + resource_path: ResourcePath { + key: key::GREGORY_DATE_PATTERNS_V1, + options: ResourceOptions { + variant: None, + langid: Some(langid!("haw")), + }, + }, + }) + .unwrap() + .take_payload() + .unwrap(); + let skeletons = &cs_dates.get().datetime.skeletons.0; + + assert_eq!( + Some(&PatternV1::try_from("L").expect("Failed to create pattern")), + skeletons.get(&SkeletonV1::try_from("M").expect("Failed to create Skeleton")) + ); +}