UNPKG

replacedoc

Version:

Replace all JsTestDriver DOC comments to use a simple javascript function to inject HTML in pages.

567 lines (558 loc) 11.9 kB
/** * TestCase replacement that will use Jasmine describe and it functions. * @param sTestName * @param oProto * @param oType * @constructor */ function TestCase( sTestName, oProto, oType ) { var fpBeforeEach = oProto.setUp || function () { }, fpAfterEach = oProto.tearDown || function () { }, aTests = [], nTest, sTest, nLenTests, oTest; for ( sTest in oProto ) { if ( oProto.hasOwnProperty( sTest ) ) { if ( sTest.indexOf( 'test ' ) === 0 ) { aTests.push( { sName: sTest, fpCallback: oProto[sTest]} ); } } } nLenTests = aTests.length; describe( sTestName, function () { beforeEach( function () { fpBeforeEach.call( this ); } ); afterEach( function () { fpAfterEach.call( this ); // Clean document.body content. document.body.innerHTML = ''; } ); for ( nTest = 0; nTest < nLenTests; nTest++ ) { oTest = aTests[nTest]; it( oTest.sName, oTest.fpCallback ); } } ); } /** * ConditionalTestCase replacement to create a special testcase. * @param sTestName * @param fpCondition * @param oProto * @param oType * @constructor */ function ConditionalTestCase( sTestName, fpCondition, oProto, oType ) { if ( fpCondition() ) { TestCase( sTestName, oProto, oType ); } } /** * A TestCase that will only be executed when browser is chrome. * * @param {string} The name of the TestCase. * @param {Object} opt_proto An optional prototype for the test case class. * @param {Object} opt_type Either DEFAULT_TYPE or ASYNC_TYPE. * @return {Function} Base function that represents the TestCase class. */ function ChromeTestCase( sTestName, oProto, oType ) { return ConditionalTestCase( sTestName, function () { return /Chrome/.test( navigator.userAgent ); }, oProto, oType ); } /** * A TestCase that will only be executed when browser is chrome or firefox * * @param {string} The name of the TestCase. * @param {Object} opt_proto An optional prototype for the test case class. * @param {Object} opt_type Either DEFAULT_TYPE or ASYNC_TYPE. * @return {Function} Base function that represents the TestCase class. */ function ChromeFirefoxTestCase( sTestName, oProto, oType ) { return ConditionalTestCase( sTestName, function() { return /Chrome/.test(navigator.userAgent) || /Firefox/.test(navigator.userAgent); }); } // Helper functions /** * injectHTML is a function to add content to the body of the page. * @param sHTML */ function injectHTML( sHTML ) { var oDocFrag = document.createDocumentFragment(), oLayer = document.createElement( 'div' ), oNodeContent; oLayer.innerHTML = sHTML; while ( oLayer.firstChild ) { oDocFrag.appendChild( oLayer.firstChild ); } oNodeContent = oDocFrag.childNodes.length > 1 ? oDocFrag : oDocFrag.firstChild; document.body.appendChild( oNodeContent ); } /** * _isUndefined check if the value passed as argument is undefined or not. * @param oValue * @returns {boolean} * @private */ function _isUndefined( oValue ) { var bResult = false; if ( typeof oValue === 'undefined' ) { bResult = true; } return bResult; } // Assertions from JsTestDriver to use Jasmine expects. // It's cool to learn how to work Jasmine /** * Throws an error. * @param sMessage */ function fail( sMessage ) { throw new Error( sMessage ); } /** * Check if oActual is true. * @param sMessage * @param oActual * @returns {*} */ function assert( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( oActual ).toBeTruthy(); } /** * Check if oActual is true. * @param sMessage * @param oActual * @returns {*} */ function assertTrue( sMessage, oActual ) { return assert( sMessage, oActual ); } /** * Check if oActual is false. * @param sMessage * @param oActual * @returns {*} */ function assertFalse( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( oActual ).toBeFalsy(); } /** * Check if oActual == oExpected * @param sMessage * @param oActual * @returns {*} */ function assertEquals( sMessage, oExpected, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oExpected; oExpected = sMessage; } return expect( oActual ).toEqual( oExpected ); } /** * Check if oActual != oExpected * @param sMessage * @param oActual * @returns {*} */ function assertNotEquals( sMessage, oExpected, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oExpected; oExpected = sMessage; } return expect( oActual ).not.toEqual( oExpected ); } /** * Check if oActual is the same oExpected object * @param sMessage * @param oActual * @returns {*} */ function assertSame( sMessage, oExpected, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oExpected; oExpected = sMessage; } return expect( oActual ).toBe( oExpected ); } /** * Check if oActual is not the same oExpected object * @param sMessage * @param oActual * @returns {*} */ function assertNotSame( sMessage, oExpected, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oExpected; oExpected = sMessage; } return expect( oActual ).not.toBe( oExpected ); } /** * Check if oActual is null * @param sMessage * @param oActual * @returns {*} */ function assertNull( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( oActual ).toBeNull(); } /** * Check if oActual is not null * @param sMessage * @param oActual * @returns {*} */ function assertNotNull( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( oActual ).not.toBeNull(); } /** * Check if oActual is undefined * @param sMessage * @param oActual * @returns {*} */ function assertUndefined( sMessage, oActual ) { if ( arguments.length === 1 ) { oActual = sMessage; } return expect( oActual ).toBeUndefined(); } /** * Check if oActual is not undefined * @param sMessage * @param oActual * @returns {*} */ function assertNotUndefined( sMessage, oActual ) { if ( arguments.length === 1 ) { oActual = sMessage; } return expect( oActual ).not.toBeUndefined(); } /** * Check if oActual is NaN * @param sMessage * @param oActual * @returns {*} */ function assertNaN( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( isNaN( oActual ) ).toBeTruthy(); } /** * Check if oActual is not NaN * @param sMessage * @param oActual * @returns {*} */ function assertNotNaN( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( isNaN( oActual ) ).toBeFalsy(); } /** * Check that execute fpCallback throw an Exception * @param sMessage * @param oActual * @returns {*} */ function assertException( sMessage, fpCallback, oError ) { if ( typeof sMessage !== 'string' ) { if ( _isUndefined( fpCallback ) ) { return expect( sMessage ).toThrow(); } else { fpCallback = typeof fpCallback === 'string' ? new Error( fpCallback ) : fpCallback; return expect( sMessage ).toThrow( fpCallback ); } } else { oError = typeof oError === 'string' ? new Error( oError ) : oError; return expect( fpCallback ).toThrow( oError ); } } /** * Check that execute fpCallback don't throw an Exception * @param sMessage * @param oActual * @returns {*} */ function assertNoException( sMessage, fpCallback, oError ) { if ( typeof sMessage !== 'string' ) { if ( _isUndefined( fpCallback ) ) { return expect( sMessage ).not.toThrow(); } else { fpCallback = typeof fpCallback === 'string' ? new Error( fpCallback ) : fpCallback; return expect( sMessage ).not.toThrow( fpCallback ); } } else { oError = typeof oError === 'string' ? new Error( oError ) : oError; return expect( fpCallback ).not.toThrow( oError ); } } /** * Check that oActual is an Array * @param sMessage * @param oActual * @returns {*} */ function assertArray( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return expect( typeof oActual === 'array' || oActual instanceof Array ).toBeTruthy(); } /** * Check that oValue is a type of oExpected * @param sMessage * @param oActual * @returns {*} */ function assertTypeOf( sMessage, sExpected, oValue ) { if ( _isUndefined( oValue ) ) { oValue = sExpected; sExpected = sMessage; } return expect( typeof oValue === sExpected ).toBeTruthy(); } /** * Check that oActual is boolean type * @param sMessage * @param oActual * @returns {*} */ function assertBoolean( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return assertTypeOf( sMessage, 'boolean', oActual ); } /** * Check that oActual is function type * @param sMessage * @param oActual * @returns {*} */ function assertFunction( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return assertTypeOf( sMessage, 'function', oActual ); } /** * Check that oActual is object type * @param sMessage * @param oActual * @returns {*} */ function assertObject( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return assertTypeOf( sMessage, 'object', oActual ); } /** * Check that oActual is number type * @param sMessage * @param oActual * @returns {*} */ function assertNumber( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return assertTypeOf( sMessage, 'number', oActual ); } /** * Check that oActual is string type * @param sMessage * @param oActual * @returns {*} */ function assertString( sMessage, oActual ) { if ( _isUndefined( oActual ) ) { oActual = sMessage; } return assertTypeOf( sMessage, 'string', oActual ); } /** * Check that oActual matches oRegExp * @param sMessage * @param oActual * @returns {*} */ function assertMatch( sMessage, oRegExp, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oRegExp; oRegExp = sMessage; } return expect( oActual ).toMatch( oRegExp ); } /** * Check that oActual don't matches oRegExp * @param sMessage * @param oActual * @returns {*} */ function assertNoMatch( sMessage, oRegExp, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oRegExp; oRegExp = sMessage; } return expect( oActual ).not.toMatch( oRegExp ); } /** * Check that oElement is a node of sTagName * @param sMessage * @param oActual * @returns {*} */ function assertTagName( sMessage, sTagName, oElement ) { if ( _isUndefined( oElement ) ) { oElement = sTagName; sTagName = sMessage; } return expect( oElement.nodeName.toLowerCase() === sTagName.toLowerCase() ).toBeTruthy(); } /** * Check that oElement contains sClass in their className * @param sMessage * @param oActual * @returns {*} */ function assertClassName( sMessage, sClass, oElement ) { if ( _isUndefined( oElement ) ) { oElement = sClass; sClass = sMessage; } return expect( oElement.className.split( " " ) ).toContain( sClass ); } function assertElementId( sMessage, sId, oElement ) { if ( _isUndefined( oElement ) ) { oElement = sId; sId = sMessage; } return expect( oElement.id ).toEqual( sId ); } function assertInstanceOf( sMessage, oConstructor, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oConstructor; oConstructor = sMessage; } return expect( oActual instanceof oConstructor ).toBeTruthy(); } function assertNotInstanceOf( sMessage, oConstructor, oActual ) { if ( _isUndefined( oActual ) ) { oActual = oConstructor; oConstructor = sMessage; } return expect( oActual instanceof oConstructor ).toBeFalsy(); }