Browse Source

JSON.stringify(undefined) should return undefined (#512)

pull/516/head
n14little 4 years ago committed by GitHub
parent
commit
299a431efe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      boa/src/builtins/json/mod.rs
  2. 36
      boa/src/builtins/json/tests.rs

4
boa/src/builtins/json/mod.rs

@ -108,7 +108,9 @@ impl Json {
/// [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
pub(crate) fn stringify(_: &mut Value, args: &[Value], ctx: &mut Interpreter) -> ResultValue {
let object = match args.get(0) {
Some(obj) if obj.is_symbol() || obj.is_function() => return Ok(Value::undefined()),
Some(obj) if obj.is_symbol() || obj.is_function() || obj.is_undefined() => {
return Ok(Value::undefined())
}
None => return Ok(Value::undefined()),
Some(obj) => obj,
};

36
boa/src/builtins/json/tests.rs

@ -184,20 +184,48 @@ fn json_stringify_function_replacer_propogate_error() {
}
#[test]
fn json_stringify_return_undefined() {
fn json_stringify_function() {
let realm = Realm::create();
let mut engine = Interpreter::new(realm);
let actual_no_args = forward(&mut engine, r#"JSON.stringify()"#);
let actual_function = forward(&mut engine, r#"JSON.stringify(() => {})"#);
let actual_symbol = forward(&mut engine, r#"JSON.stringify(Symbol())"#);
let expected = forward(&mut engine, r#"undefined"#);
assert_eq!(actual_no_args, expected);
assert_eq!(actual_function, expected);
}
#[test]
fn json_stringify_undefined() {
let realm = Realm::create();
let mut engine = Interpreter::new(realm);
let actual_undefined = forward(&mut engine, r#"JSON.stringify(undefined)"#);
let expected = forward(&mut engine, r#"undefined"#);
assert_eq!(actual_undefined, expected);
}
#[test]
fn json_stringify_symbol() {
let realm = Realm::create();
let mut engine = Interpreter::new(realm);
let actual_symbol = forward(&mut engine, r#"JSON.stringify(Symbol())"#);
let expected = forward(&mut engine, r#"undefined"#);
assert_eq!(actual_symbol, expected);
}
#[test]
fn json_stringify_no_args() {
let realm = Realm::create();
let mut engine = Interpreter::new(realm);
let actual_no_args = forward(&mut engine, r#"JSON.stringify()"#);
let expected = forward(&mut engine, r#"undefined"#);
assert_eq!(actual_no_args, expected);
}
#[test]
fn json_parse_array_with_reviver() {
let realm = Realm::create();

Loading…
Cancel
Save