diff --git a/src/wasm_test/compare.rs b/src/wasm_test/compare.rs index 5b86428d..5dc861be 100644 --- a/src/wasm_test/compare.rs +++ b/src/wasm_test/compare.rs @@ -566,7 +566,6 @@ fn compare_object_tree<'e, 's, 'w>( } for (emacs_attribute, wasm_attribute) in emacs.iter().zip(wasm_attributes.iter()) { - let emacs_attribute = emacs_attribute.as_list()?; let wasm_attribute = wasm_attribute .as_array() .ok_or("Wasm middle layer in object tree should be a list.")?; @@ -580,6 +579,16 @@ fn compare_object_tree<'e, 's, 'w>( )); return Ok(result); } + if let Ok("nil") = emacs_attribute.as_atom() { + if let Some(serde_json::Value::Null) = wasm_attribute.first() { + if let Some(serde_json::Value::Array(w)) = wasm_attribute.get(1) { + if w.is_empty() { + continue; + } + } + } + } + let emacs_attribute = emacs_attribute.as_list()?; if let Some(serde_json::Value::Null) = wasm_attribute.first() { // If optval is null then the emacs array should only contain 1 value. if emacs_attribute.len() != 1 { @@ -622,19 +631,26 @@ fn compare_object_tree<'e, 's, 'w>( .ok_or("first value in wasm object tree should be a list.")?; let emacs_val = emacs_attribute .first() - .ok_or("If-statement proves this will be Some.")? - .as_list()?; + .ok_or("If-statement proves this will be Some.")?; let wasm_val = wasm_attribute .get(1) .expect("If-statement proves this will be Some.") .as_array() .ok_or("2nd value in wasm object tree should be a list.")?; result.extend(wasm_compare_list(source, emacs_optval, wasm_optval.iter())?)?; - result.extend(wasm_compare_list( - source, - emacs_val.iter(), - wasm_val.iter(), - )?)?; + if let Ok("nil") = emacs_val.as_atom() { + result.extend(wasm_compare_list( + source, + std::iter::empty(), + wasm_val.iter(), + )?)?; + } else { + result.extend(wasm_compare_list( + source, + emacs_val.as_list()?.iter(), + wasm_val.iter(), + )?)?; + } } }