Refactor (#1)

This commit is contained in:
elm
2025-08-10 23:07:13 +09:00
committed by GitHub
parent a4030eeaf3
commit dd6854b176
16 changed files with 133 additions and 963 deletions

View File

@@ -5,6 +5,9 @@ edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
readme.workspace = true
keywords.workspace = true
categories.workspace = true
[dependencies]
bevy = { workspace = true }

View File

@@ -15,7 +15,7 @@ impl DataResponser {
pub fn prepare(&mut self, data: Vec<u8>, range: &Option<(usize, Option<usize>)>) {
if let Some((start, end)) = range {
self.offset = *start;
self.end_offset = end.unwrap_or(data.len() - 1) + 1;
self.end_offset = end.unwrap_or(data.len()-1);
self.data = data;
} else {
self.offset = 0;
@@ -40,7 +40,7 @@ impl DataResponser {
return None;
}
let slice = &self.data[start..end.min(self.data.len())];
let slice = &self.data[start..=end.min(self.data.len()-1)];
self.offset += slice.len();
Some(slice)
}
@@ -114,123 +114,4 @@ mod tests {
assert_eq!(responser.offset, 2);
assert_eq!(responser.end_offset, 7);
}
#[test]
fn data_responser_new_with_start_only() {
let data = vec![1, 2, 3, 4, 5];
let mut responser = DataResponser::default();
responser.prepare(data.clone(), &Some((3, None)));
assert_eq!(responser.data, data);
assert_eq!(responser.offset, 3);
assert_eq!(responser.end_offset, 5);
}
#[test]
fn data_responser_new_with_zero_start() {
let data = vec![1, 2, 3];
let mut responser = DataResponser::default();
responser.prepare(data.clone(), &Some((0, None)));
assert_eq!(responser.data, data);
assert_eq!(responser.offset, 0);
assert_eq!(responser.end_offset, 2);
}
#[test]
fn data_responser_new_with_empty_data() {
let data = vec![];
let mut responser = DataResponser::default();
responser.prepare(data.clone(), &Some((0, None)));
assert_eq!(responser.data, data);
assert_eq!(responser.offset, 0);
assert_eq!(responser.end_offset, 0);
}
#[test]
fn data_responser_new_with_start_beyond_data_length() {
let data = vec![1, 2, 3];
let mut responser = DataResponser::default();
responser.prepare(data.clone(), &Some((5, None)));
assert_eq!(responser.data, data);
assert_eq!(responser.offset, 5);
assert_eq!(responser.end_offset, 3);
}
#[test]
fn data_responser_new_with_end_beyond_data_length() {
let data = vec![1, 2, 3];
let mut responser = DataResponser::default();
responser.prepare(data.clone(), &Some((1, Some(10))));
assert_eq!(responser.data, data);
assert_eq!(responser.offset, 1);
assert_eq!(responser.end_offset, 10);
}
#[test]
fn data_responser_read_no_end_data_smaller_than_bytes_to_read() {
let data = vec![1, 2, 3, 4, 5];
let mut responser = DataResponser::default();
responser.prepare(data, &Some((2, None)));
let result = responser.read(10);
assert_eq!(result, Some(&[3, 4, 5][..]));
}
#[test]
fn data_responser_read_no_end_data_larger_than_bytes_to_read() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut responser = DataResponser::default();
responser.prepare(data, &Some((2, None)));
let result1 = responser.read(3);
assert_eq!(result1, Some(&[3, 4, 5][..]));
let result2 = responser.read(3);
assert_eq!(result2, Some(&[6, 7, 8][..]));
}
#[test]
fn data_responser_read_with_end_data_smaller_than_bytes_to_read() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut responser = DataResponser::default();
responser.prepare(data, &Some((2, Some(6))));
let result = responser.read(10);
assert_eq!(result, Some(&[3, 4, 5, 6][..]));
}
#[test]
fn data_responser_read_with_end_data_larger_than_bytes_to_read() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let mut responser = DataResponser::default();
responser.prepare(data, &Some((1, Some(7))));
let result1 = responser.read(3);
assert_eq!(result1, Some(&[2, 3, 4][..]));
let result2 = responser.read(3);
assert_eq!(result2, Some(&[5, 6, 7][..]));
}
#[test]
fn data_responser_read_consecutive_calls_until_end() {
let data = vec![1, 2, 3, 4, 5, 6, 7, 8];
let mut responser = DataResponser::default();
responser.prepare(data, &Some((1, Some(6))));
let result1 = responser.read(2);
assert_eq!(result1, Some(&[2, 3][..]));
let result2 = responser.read(2);
assert_eq!(result2, Some(&[4, 5][..]));
let result3 = responser.read(2);
assert_eq!(result3, Some(&[6][..]));
let result4 = responser.read(2);
assert_eq!(result4, None);
}
}
}

View File

@@ -42,14 +42,14 @@ fn content_range_header_value(
Some(format!(
"bytes {}-{}/{}",
start,
end.unwrap_or(data.len() - 1),
end.unwrap_or(data.len()),
data.len()
))
}
fn obtain_response_length(data: &[u8], range: &Option<(usize, Option<usize>)>) -> usize {
match range {
Some((start, end)) => end.unwrap_or(data.len() - 1) - start + 1,
Some((start, end)) => end.unwrap_or(data.len()) - start,
None => data.len(),
}
}
@@ -147,77 +147,77 @@ mod tests {
fn test_content_range_header_value_range_with_end() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((0, Some(5))));
assert_eq!(result, Some("bytes 0-4/13".to_string()));
assert_eq!(result, Some("bytes 0-5/13".to_string()));
}
#[test]
fn test_content_range_header_value_range_without_end() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((7, None)));
assert_eq!(result, Some("bytes 7-12/13".to_string()));
assert_eq!(result, Some("bytes 7-13/13".to_string()));
}
#[test]
fn test_content_range_header_value_range_from_start() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((0, None)));
assert_eq!(result, Some("bytes 0-12/13".to_string()));
assert_eq!(result, Some("bytes 0-13/13".to_string()));
}
#[test]
fn test_content_range_header_value_range_partial() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((7, Some(12))));
assert_eq!(result, Some("bytes 7-11/13".to_string()));
assert_eq!(result, Some("bytes 7-12/13".to_string()));
}
#[test]
fn test_content_range_header_value_range_single_byte() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((5, Some(6))));
assert_eq!(result, Some("bytes 5-5/13".to_string()));
assert_eq!(result, Some("bytes 5-6/13".to_string()));
}
#[test]
fn test_content_range_header_value_range_last_byte() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((12, Some(13))));
assert_eq!(result, Some("bytes 12-12/13".to_string()));
assert_eq!(result, Some("bytes 12-13/13".to_string()));
}
#[test]
fn test_content_range_header_value_single_byte_data() {
let data = b"a";
let result = content_range_header_value(data, &Some((0, None)));
assert_eq!(result, Some("bytes 0-0/1".to_string()));
assert_eq!(result, Some("bytes 0-1/1".to_string()));
}
#[test]
fn test_content_range_header_value_large_data() {
let data = vec![0u8; 1024];
let result = content_range_header_value(&data, &Some((100, Some(200))));
assert_eq!(result, Some("bytes 100-199/1024".to_string()));
assert_eq!(result, Some("bytes 100-200/1024".to_string()));
}
#[test]
fn test_content_range_header_value_large_data_no_end() {
let data = vec![0u8; 1024];
let result = content_range_header_value(&data, &Some((500, None)));
assert_eq!(result, Some("bytes 500-1023/1024".to_string()));
assert_eq!(result, Some("bytes 500-1024/1024".to_string()));
}
#[test]
fn test_content_range_header_value_zero_start() {
let data = b"test";
let result = content_range_header_value(data, &Some((0, Some(2))));
assert_eq!(result, Some("bytes 0-1/4".to_string()));
assert_eq!(result, Some("bytes 0-2/4".to_string()));
}
#[test]
fn test_content_range_header_value_range_end_equals_data_len() {
let data = b"Hello, World!";
let result = content_range_header_value(data, &Some((0, Some(13))));
assert_eq!(result, Some("bytes 0-12/13".to_string()));
assert_eq!(result, Some("bytes 0-13/13".to_string()));
}
#[test]