Grackle: Tests for computed properties (#1303)
These tests don't pass, because Grackle doesn't support computed properties yet. But they're worth committing anyway, so I put "#[ignore]" on them.
This commit is contained in:
@ -197,10 +197,11 @@ impl Planner {
|
|||||||
let mut binding = self.binding_scope.get(&name).ok_or(CompileError::Undefined { name })?;
|
let mut binding = self.binding_scope.get(&name).ok_or(CompileError::Undefined { name })?;
|
||||||
for (property, computed) in properties {
|
for (property, computed) in properties {
|
||||||
if computed {
|
if computed {
|
||||||
todo!("Support computed properties");
|
todo!("Support computed properties like '{:?}'", property);
|
||||||
}
|
} else {
|
||||||
binding = binding.property_of(property)?;
|
binding = binding.property_of(property)?;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Ok(EvalPlan {
|
Ok(EvalPlan {
|
||||||
instructions: Vec::new(),
|
instructions: Vec::new(),
|
||||||
binding: binding.clone(),
|
binding: binding.clone(),
|
||||||
|
|||||||
@ -171,6 +171,44 @@ fn use_native_function_id() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore = "haven't done computed properties yet"]
|
||||||
|
fn computed_array_index() {
|
||||||
|
let program = r#"
|
||||||
|
let array = ["a", "b", "c"]
|
||||||
|
let index = 1+1
|
||||||
|
let prop = array[index]
|
||||||
|
"#;
|
||||||
|
let (_plan, scope) = must_plan(program);
|
||||||
|
match scope.get("prop").unwrap() {
|
||||||
|
EpBinding::Single(addr) => {
|
||||||
|
assert_eq!(*addr, Address::ZERO + 1);
|
||||||
|
}
|
||||||
|
other => {
|
||||||
|
panic!("expected 'prop' bound to 0x0 but it was bound to {other:?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore = "haven't done computed properties yet"]
|
||||||
|
fn computed_member_expressions() {
|
||||||
|
let program = r#"
|
||||||
|
let obj = {x: 1, y: 2}
|
||||||
|
let index = "x"
|
||||||
|
let prop = obj[index]
|
||||||
|
"#;
|
||||||
|
let (_plan, scope) = must_plan(program);
|
||||||
|
match scope.get("prop").unwrap() {
|
||||||
|
EpBinding::Single(addr) => {
|
||||||
|
assert_eq!(*addr, Address::ZERO + 1);
|
||||||
|
}
|
||||||
|
other => {
|
||||||
|
panic!("expected 'prop' bound to 0x0 but it was bound to {other:?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn member_expressions_object() {
|
fn member_expressions_object() {
|
||||||
let program = r#"
|
let program = r#"
|
||||||
@ -183,7 +221,7 @@ fn member_expressions_object() {
|
|||||||
assert_eq!(*addr, Address::ZERO + 1);
|
assert_eq!(*addr, Address::ZERO + 1);
|
||||||
}
|
}
|
||||||
other => {
|
other => {
|
||||||
panic!("expected 'number' bound to 0x0 but it was bound to {other:?}");
|
panic!("expected 'prop' bound to 0x0 but it was bound to {other:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user