blob: 222de55a7ce64aaa69db990add0491245c756a0c [file] [log] [blame]
var findTypeForExpression = $vm.findTypeForExpression;
load("./driver/driver.js");
var func;
function wrapper() {
func = function(arg){};
}
wrapper();
// ====== End test cases ======
var obj = {x:20, y:50};
func(obj);
var types = findTypeForExpression(wrapper, "arg");
assert(types.instructionTypeSet.structures.length === 1, "arg should have one structure");
assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should have two fields");
assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
assert(types.instructionTypeSet.structures[0].optionalFields.length === 0, "arg should have zero optional fields");
obj.z = 40;
func(obj);
types = findTypeForExpression(wrapper, "arg");
assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should still have two fields");
assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
assert(types.instructionTypeSet.structures[0].optionalFields.length === 1, "arg should have one optional field");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
obj["foo"] = "type";
obj["baz"] = "profiler";
func(obj);
types = findTypeForExpression(wrapper, "arg");
assert(types.instructionTypeSet.structures[0].fields.length === 2, "arg should still have two fields");
assert(types.instructionTypeSet.structures[0].fields.indexOf("x") !== -1, "arg should have field: 'x'");
assert(types.instructionTypeSet.structures[0].fields.indexOf("y") !== -1, "arg should have field: 'y'");
assert(types.instructionTypeSet.structures[0].optionalFields.length === 3, "arg should have three optional field");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("foo") !== -1, "arg should have optional field: 'foo'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("baz") !== -1, "arg should have optional field: 'baz'");
func({});
types = findTypeForExpression(wrapper, "arg");
assert(types.instructionTypeSet.structures[0].fields.length === 0, "arg should have no common fields");
assert(types.instructionTypeSet.structures[0].optionalFields.length === 5, "arg should have five optional field");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("x") !== -1, "arg should have optional field: 'x'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("y") !== -1, "arg should have optional field: 'y'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("z") !== -1, "arg should have optional field: 'z'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("foo") !== -1, "arg should have optional field: 'foo'");
assert(types.instructionTypeSet.structures[0].optionalFields.indexOf("baz") !== -1, "arg should have optional field: 'baz'");