From ca80114c531d5bfcf6ce4b7e85af39f50a711653 Mon Sep 17 00:00:00 2001 From: croraf Date: Wed, 10 Jun 2020 08:11:03 +0200 Subject: [PATCH] Fix and tests (#469) --- boa/src/exec/field/mod.rs | 7 ++++++- boa/src/exec/tests.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/boa/src/exec/field/mod.rs b/boa/src/exec/field/mod.rs index 259fda7bd7..872d0c2530 100644 --- a/boa/src/exec/field/mod.rs +++ b/boa/src/exec/field/mod.rs @@ -19,7 +19,12 @@ impl Executable for GetConstField { impl Executable for GetField { fn run(&self, interpreter: &mut Interpreter) -> ResultValue { - let obj = self.obj().run(interpreter)?; + let mut obj = self.obj().run(interpreter)?; + if obj.get_type() != "object" || obj.get_type() != "symbol" { + obj = interpreter + .to_object(&obj) + .expect("failed to convert to object"); + } let field = self.field().run(interpreter)?; Ok(obj.get_field(field.to_string())) diff --git a/boa/src/exec/tests.rs b/boa/src/exec/tests.rs index 64ee6e4d5f..a332c9f975 100644 --- a/boa/src/exec/tests.rs +++ b/boa/src/exec/tests.rs @@ -1,5 +1,43 @@ use crate::{builtins::Value, exec, exec::Interpreter, forward, realm::Realm}; +#[test] +fn property_accessor_member_expression_dot_notation_on_string_literal() { + let scenario = r#" + typeof 'asd'.matchAll; + "#; + + assert_eq!(&exec(scenario), "function"); +} + +#[test] +fn property_accessor_member_expression_bracket_notation_on_string_literal() { + let scenario = r#" + typeof 'asd'['matchAll']; + "#; + + assert_eq!(&exec(scenario), "function"); +} + +#[test] +fn property_accessor_member_expression_dot_notation_on_function() { + let scenario = r#" + function asd () {}; + asd.name; + "#; + + assert_eq!(&exec(scenario), "asd"); +} + +#[test] +fn property_accessor_member_expression_bracket_notation_on_function() { + let scenario = r#" + function asd () {}; + asd['name']; + "#; + + assert_eq!(&exec(scenario), "asd"); +} + #[test] fn empty_let_decl_undefined() { let scenario = r#"