From 105e7ec18db1d2423f9658e8673c8097952cb879 Mon Sep 17 00:00:00 2001 From: Robert Bastian Date: Fri, 21 Jul 2023 17:16:24 +0200 Subject: [PATCH] Adding blob tests (#3719) --- provider/blob/src/blob_data_provider.rs | 76 +++++++++++++++++++++++++ provider/blob/src/blob_schema.rs | 2 +- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/provider/blob/src/blob_data_provider.rs b/provider/blob/src/blob_data_provider.rs index f12210c06d1..3c3f9914e90 100644 --- a/provider/blob/src/blob_data_provider.rs +++ b/provider/blob/src/blob_data_provider.rs @@ -136,3 +136,79 @@ impl BufferProvider for BlobDataProvider { }) } } + +#[cfg(test)] +mod test { + use super::*; + use crate::export::*; + use icu_provider::datagen::*; + use icu_provider::hello_world::*; + + #[icu_provider::data_struct(marker(HelloSingletonV1Marker, "hello/singleton@1", singleton))] + #[derive(Clone, Copy)] + pub struct HelloSingletonV1; + + #[test] + fn test_empty() { + let mut blob: Vec = Vec::new(); + + { + let mut exporter = BlobExporter::new_with_sink(Box::new(&mut blob)); + + exporter + .flush_with_fallback(HelloWorldV1Marker::KEY, FallbackMode::None) + .unwrap(); + + exporter.close().unwrap(); + } + + let provider = BlobDataProvider::try_new_from_blob(blob.into()).unwrap(); + + assert!(matches!( + provider.load_buffer(HelloWorldV1Marker::KEY, Default::default()), + Err(DataError { + kind: DataErrorKind::MissingLocale, + .. + }) + )); + } + + #[test] + fn test_singleton() { + let mut blob: Vec = Vec::new(); + + { + let mut exporter = BlobExporter::new_with_sink(Box::new(&mut blob)); + + exporter + .flush_with_fallback(HelloSingletonV1Marker::KEY, FallbackMode::None) + .unwrap(); + + exporter.close().unwrap(); + } + + let provider = BlobDataProvider::try_new_from_blob(blob.into()).unwrap(); + + assert!(matches!( + provider.load_buffer( + HelloSingletonV1Marker::KEY, + DataRequest { + locale: &icu_locid::locale!("de").into(), + metadata: Default::default() + } + ), + Err(DataError { + kind: DataErrorKind::ExtraneousLocale, + .. + }) + )); + + assert!(matches!( + provider.load_buffer(HelloSingletonV1Marker::KEY, Default::default()), + Err(DataError { + kind: DataErrorKind::MissingLocale, + .. + }) + )); + } +} diff --git a/provider/blob/src/blob_schema.rs b/provider/blob/src/blob_schema.rs index 0972206b66e..66a951c7c27 100644 --- a/provider/blob/src/blob_schema.rs +++ b/provider/blob/src/blob_schema.rs @@ -81,7 +81,7 @@ impl<'data> BlobSchemaV1<'data> { // Note: We could check that every index occurs at least once, but that's a more expensive // operation, so we will just check for the min and max index. let mut seen_min = false; - let mut seen_max = false; + let mut seen_max = self.buffers.is_empty(); for cursor in self.keys.iter0() { for (locale, idx) in cursor.iter1_copied() { debug_assert!(idx < self.buffers.len() || locale == Index32U8::SENTINEL);