()
| 223 | |
| 224 | #[mz_ore::test] |
| 225 | fn valid_null_array_falsely_rejected() { |
| 226 | // Materialize's encoder emits no element bytes for `null` array |
| 227 | // elements, so decoding must not assume each element consumes at least |
| 228 | // one byte of remaining input. |
| 229 | use std::str::FromStr; |
| 230 | |
| 231 | use super::{AvroDeserializer, GeneralDeserializer}; |
| 232 | use crate::encode::encode_to_vec; |
| 233 | use crate::types::Value; |
| 234 | use crate::{Schema, ValueDecoder}; |
| 235 | |
| 236 | let schema = Schema::from_str(r#"{"type": "array", "items": "null"}"#).unwrap(); |
| 237 | let value = Value::Array(vec![Value::Null, Value::Null]); |
| 238 | let body = encode_to_vec(&value, &schema); |
| 239 | |
| 240 | let dsr = GeneralDeserializer { |
| 241 | schema: schema.top_node(), |
| 242 | }; |
| 243 | let mut reader: &[u8] = &body; |
| 244 | let res = dsr.deserialize(&mut reader, ValueDecoder); |
| 245 | assert!( |
| 246 | res.is_ok(), |
| 247 | "an encoder-produced array of nulls should round-trip, but got: {res:?}" |
| 248 | ); |
| 249 | } |
| 250 | |
| 251 | #[mz_ore::test] |
| 252 | fn zero_width_array_elements_decode_across_blocks() { |
nothing calls this directly
no test coverage detected