blob: 16c8877984af90c858f2852543879f1690bfecfb [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
var failed = 0;
function runtest(name, func, throwException)
{
try
{
func();
if (throwException)
{
WScript.Echo(name + ": Test failed, unexpected no exception thrown");
failed++;
}
else
{
WScript.Echo(name + ": Test passed, expected no exception thrown");
}
}
catch (e)
{
if (!throwException || (e.name != "TypeError" && e.name != "ReferenceError"))
{
WScript.Echo(name + ": test failed, unexpected " + e.name + "-" + e.message);
failed++;
}
else
{
WScript.Echo(name + ": Test passed, expected " + e.name + "-" + e.message);
}
}
}
function assert(cond)
{
if (!cond)
{
throw new Error("AssertFailed");
}
}
//-------------------------------------------------
// Test 1 - success, new plain function without prototype returning an object, so the result is the object returned
//-------------------------------------------------
function ReturnObject()
{
this.hello = "yay2";
var o = new Object();
o.obj = this;
return o;
}
function test1()
{
var o = new ReturnObject();
assert(o.constructor == Object.prototype.constructor);
assert(o.hello == undefined);
assert(o.obj.constructor == ReturnObject);
assert(o.obj.hello == "yay2");
}
//-------------------------------------------------
// Test 2 - success, new plain function without prototype returning int, so the result is the new object
//-------------------------------------------------
function ReturnInt()
{
this.hello = "yay3";
return 3;
}
function test2()
{
var o = new ReturnInt();
assert(o.constructor == ReturnInt);
assert(o.hello == "yay3");
}
//-------------------------------------------------
// Test 3 - success, new plain function without prototype returning float, so the result is the new object
//-------------------------------------------------
function ReturnFloat()
{
this.hello = "yay4";
return 3.3;
}
function test3()
{
var o = new ReturnFloat();
assert(o.constructor == ReturnFloat);
assert(o.hello == "yay4");
}
//-------------------------------------------------
// Test 4 - success, new plain function without prototype returning string, so the result is the new object
//-------------------------------------------------
function ReturnString()
{
this.hello = "yay5";
return "blah" + this.hello;
}
function test4()
{
var o = new ReturnString();
assert(o.constructor == ReturnString);
assert(o.hello == "yay5");
}
//-------------------------------------------------
// Test 5 - success, new plain function without prototype returning bool, so the result is the new object
//-------------------------------------------------
function ReturnBool()
{
this.hello = "yay6";
return this.hello == "yay6";
}
function test5()
{
var o = new ReturnBool();
assert(o.constructor == ReturnBool);
assert(o.hello == "yay6");
}
runtest("test1", test1, false);
runtest("test2", test2, false);
runtest("test3", test3, false);
runtest("test4", test4, false);
runtest("test5", test5, false);
if (failed == 0)
{
WScript.Echo("Passed");
}