| 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"); |