From 01959b16a21b22b5df5f16569c2a8e8f92beecef Mon Sep 17 00:00:00 2001 From: mo khan Date: Thu, 10 Jul 2025 13:11:11 -0600 Subject: chore: vendor dependencies --- vendor/writeable/src/testing.rs | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 vendor/writeable/src/testing.rs (limited to 'vendor/writeable/src/testing.rs') diff --git a/vendor/writeable/src/testing.rs b/vendor/writeable/src/testing.rs new file mode 100644 index 00000000..078ea9e2 --- /dev/null +++ b/vendor/writeable/src/testing.rs @@ -0,0 +1,78 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use crate::*; +use alloc::string::String; +use alloc::vec::Vec; + +pub(crate) struct TestWriter { + pub(crate) string: String, + pub(crate) parts: Vec<(usize, usize, Part)>, +} + +impl TestWriter { + pub(crate) fn finish(mut self) -> (String, Vec<(usize, usize, Part)>) { + // Sort by first open and last closed + self.parts + .sort_unstable_by_key(|(begin, end, _)| (*begin, end.wrapping_neg())); + (self.string, self.parts) + } +} + +impl fmt::Write for TestWriter { + fn write_str(&mut self, s: &str) -> fmt::Result { + self.string.write_str(s) + } + fn write_char(&mut self, c: char) -> fmt::Result { + self.string.write_char(c) + } +} + +impl PartsWrite for TestWriter { + type SubPartsWrite = Self; + fn with_part( + &mut self, + part: Part, + mut f: impl FnMut(&mut Self::SubPartsWrite) -> fmt::Result, + ) -> fmt::Result { + let start = self.string.len(); + f(self)?; + let end = self.string.len(); + if start < end { + self.parts.push((start, end, part)); + } + Ok(()) + } +} + +#[allow(clippy::type_complexity)] +pub fn writeable_to_parts_for_test( + writeable: &W, +) -> (String, Vec<(usize, usize, Part)>) { + let mut writer = TestWriter { + string: alloc::string::String::new(), + parts: Vec::new(), + }; + #[allow(clippy::expect_used)] // for test code + writeable + .write_to_parts(&mut writer) + .expect("String writer infallible"); + writer.finish() +} + +#[allow(clippy::type_complexity)] +pub fn try_writeable_to_parts_for_test( + writeable: &W, +) -> (String, Vec<(usize, usize, Part)>, Option) { + let mut writer = TestWriter { + string: alloc::string::String::new(), + parts: Vec::new(), + }; + #[allow(clippy::expect_used)] // for test code + let result = writeable + .try_write_to_parts(&mut writer) + .expect("String writer infallible"); + let (actual_str, actual_parts) = writer.finish(); + (actual_str, actual_parts, result.err()) +} -- cgit v1.2.3