profiler-tests.js revision ed75aabae257a7489b151020ba707a7ebb8c9c45
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Information needed to run tests
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass return this.name;
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass getAge : function (){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass return this.age;
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Base Test Suite
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Test Case for basic function profiling
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //---------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Special assertions for profiler
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //---------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass assertFunctionIsRegistered : function (fullFuncName, shortFuncName, owner, originalFunction, newFunction){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var containerFunc = Profiler.getOriginal(fullFuncName);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areNotEqual(originalFunction, newFunction, fullFuncName + " function was not replaced.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(originalFunction, containerFunc, "Original " + fullFuncName + " function was not stored.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(originalFunction.prototype, containerFunc.prototype, fullFuncName + " prototype was not copied.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(shortFuncName, containerFunc.__yuiFuncName, fullFuncName + " function name was not stored.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(owner, containerFunc.__yuiOwner, "Owner for " + fullFuncName + "was not stored.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(Profiler.getReport(fullFuncName), "Report for " + fullFuncName + " function was not created.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass assertFunctionIsNotRegistered : function(fullFuncName, shortFuncName, owner, originalFunction, newFunction){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(originalFunction, newFunction, "Original " + fullFuncName + " function was not placed back on owner.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isUndefined(Profiler.getOriginal(fullFuncName), "Container for original " + fullFuncName + " function was not destroyed.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //---------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //---------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var instrumented = Profiler.instrument("hello", original);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered("hello", "hello", null, original, instrumented);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerFunction(fullFuncName, testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, "factorial", testObject, originalFunction, testObject.factorial);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, "factorial", testObject, originalFunction, testObject.factorial);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, "getMessage", window, originalFunction, getMessage);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, "getMessage", window, originalFunction, getMessage);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testRegisterGlobalFunctionOnGlobalObject : function (){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, "getName", myObject, originalFunction, myObject.getName);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, "getName", myObject, originalFunction, myObject.getName);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //get all methods
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerObject("testObject", testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(Profiler.getOriginal("testObject"), "Object was not added to container.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, funcNames[i], testObject, originalFunction, testObject[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], testObject, originalFunction, testObject[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isUndefined(Profiler.getOriginal("testObject"), "Object was not removed from container.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //gather stuff on the prototype
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass originalFuncs[prop] = root.SuperType.prototype[prop];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerConstructor("root.SuperType", root);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered("root.SuperType", "SuperType", root, originalConstructor, root.SuperType);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var fullFuncName = "root.SuperType.prototype." + funcNames[i];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, funcNames[i], root.SuperType.prototype, originalFunction, root.SuperType.prototype[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var fullFuncName = "root.SuperType.prototype." + funcNames[i];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], root.SuperType.prototype, originalFunction, root.SuperType.prototype[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered("root.SuperType", "SuperType", root, originalConstructor, root.SuperType);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testRegisterConstructorWithInheritance : function (){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //gather stuff on the prototype
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass originalFuncs[prop] = root.SubType.prototype[prop];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerConstructor("root.SubType", root);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered("root.SubType", "SubType", root, originalConstructor, root.SubType);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check the superclass property
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(root.SubType.superclass, "SubType superclass should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(root.SuperType, root.SubType.superclass.constructor, "SubType superclass constructor should be SuperType.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var fullFuncName = "root.SubType.prototype." + funcNames[i];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsRegistered(fullFuncName, funcNames[i], root.SubType.prototype, originalFunction, root.SubType.prototype[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //check each method
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var fullFuncName = "root.SubType.prototype." + funcNames[i];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var originalFunction = originalFuncs[funcNames[i]];
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered(fullFuncName, funcNames[i], root.SubType.prototype, originalFunction, root.SubType.prototype[funcNames[i]]);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass this.assertFunctionIsNotRegistered("root.SubType", "SubType", root, originalConstructor, root.SubType);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerFunction("testObject.factorial", testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.unregisterFunction("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(3628800, result, "Factorial result was incorrect.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerConstructor("root.SubType", root);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual("SuperType", name, "o.name was incorrect");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(29, age, "o2.Age was incorrect.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual("SuperType", name, "o2.Name was incorrect");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Test Case for stopwatch functions
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(1, report.calls, "Call count should be 1.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.max, "Max should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.min, "Min should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.avg, "Average should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(1, report.calls, "Call count should be 1.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.max, "Max should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.min, "Min should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.avg, "Average should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testStartTwice : function () {
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(2, report.calls, "Call count should be 2.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.max, "Max should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.min, "Min should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.avg, "Average should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass // Test Case for report data
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //-------------------------------------------------------------------------
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testGetReport : function (){
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerFunction("testObject.factorial", testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var report = Profiler.getReport("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.unregisterFunction("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.calls, "Call count should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.max, "Max should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.min, "Min should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isNumber(report.avg, "Average should be a number.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerFunction("testObject.factorial", testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var report = Profiler.getReport("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass var callCount = Profiler.getCallCount("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.unregisterFunction("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(10, report.calls, "Report.calls is incorrect.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(10, callCount, "Call count is incorrect.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testGetMath: function() {
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //No Asserts, just syntax checking..
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerFunction("testObject.factorial", testObject);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.getFunctionReport("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.unregisterFunction("testObject.factorial");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass testGetReport : function () {
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Profiler.registerConstructor("root.SubType", root);
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report, "Report should be an object.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report["root.SubType"], "There should be an entry for root.SubType.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(2, report["root.SubType"].calls, "root.SubType should have a call count of 2.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass //Assert.isObject(report["root.SubType.prototype"], "There should be an entry for root.SubType.prototype.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report["root.SubType.prototype.getAge"], "There should be an entry for getAge()");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.areEqual(3, report["root.SubType.prototype.getAge"].calls, "getAge() should have a call count of 3.");
ed75aabae257a7489b151020ba707a7ebb8c9c45Dav Glass Assert.isObject(report["root.SubType.prototype.getName"], "There should be an entry for getName()");