blob: c10cd7e1d8cf1e4db8b9a822f08151d577724441 [file] [log] [blame]
var returnTypeFor = $vm.returnTypeFor;
load("./driver/driver.js");
function foo(x) { return x; }
function Ctor() {
if (!(this instanceof Ctor))
return "Not called with `new`";
}
// ====== End test cases ======
foo(20);
var types = returnTypeFor(foo);
assert(types.globalTypeSet.displayTypeName === T.Integer, "Function 'foo' should return 'Integer'");
foo(20.5);
types = returnTypeFor(foo);
assert(types.globalTypeSet.displayTypeName === T.Number, "Function 'foo' should return 'Number' after being called twice");
foo("hello");
types = returnTypeFor(foo);
assert(types.globalTypeSet.displayTypeName === T.Many, "Function 'foo' should return '(many)' after being called three times");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.String) !== -1, "Function 'foo' should have returned 'String' at some point");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Function 'foo' should have returned 'Integer' at some point");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.Number) !== -1, "Function 'foo' should have returned 'Number' at some point");
new Ctor;
types = returnTypeFor(Ctor);
assert(types.globalTypeSet.displayTypeName === "Ctor", "Function 'Ctor' should return 'Ctor'");
assert(types.globalTypeSet.structures.length === 1, "Function 'Ctor' should have seen one structure");
Ctor();
types = returnTypeFor(Ctor);
assert(types.globalTypeSet.displayTypeName === "Object", "Function 'Ctor' should return Object");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.String) !== -1, "Function 'Ctor' should return String");