/*______________ | ______ | U I Z E J A V A S C R I P T F R A M E W O R K | / / | --------------------------------------------------- | / O / | MODULE : UizeSite.Widgets.UnitTests.Widget Class | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2015-2016 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Class importance: 1 codeCompleteness: 5 docCompleteness: 5 */ /*? Introduction The =UizeSite.Widgets.UnitTests.Widget= module implements a widget class for a unit tests runner. *DEVELOPERS:* `Chris van Rensburg` Visual Sampler Below is a visual sampler of the =UizeSite.Widgets.UnitTests.Widget= class... ..................................................... << widget >> widgetClass: UizeSite.Widgets.UnitTests.VisualSampler ..................................................... */ Uize.module ({ name:'UizeSite.Widgets.UnitTests.Widget', superclass:'Uize.Widget.V2', required:[ 'UizeSite.Widgets.UnitTests.Html', 'UizeSite.Widgets.UnitTests.Css', 'Uize.Widgets.Form.Input.Select.Widget', 'Uize.Widgets.Button.Widget', 'Uize.Widgets.ProgressBar.Widget', 'Uize.Widgets.Log.Widget', 'UizeSite.ModulesTree', 'Uize.Data.Matches', 'Uize.Data.PathsTree', 'Uize.Url', 'Uize.Test.Runner' ], builder:function (_superclass) { 'use strict'; var /*** General Variables ***/ _runAllModuleTests = 'RUN ALL MODULE TESTS', _modulesTree = UizeSite.ModulesTree (), _modules = Uize.Data.PathsTree.toList (_modulesTree).sort (), _modulesLookup = Uize.lookup (_modules), _testModulesLookup = Uize.lookup ( Uize.Data.Matches.retain (_modules,Uize.Util.ModuleNaming.isTestModule) ) ; /*** build values for test selector ***/ var _testSelectorValues = [ { name:_runAllModuleTests, displayName:_runAllModuleTests } ]; Uize.forEach ( _modules, function (_moduleName) { if ( !Uize.Util.ModuleNaming.isTestModule (_moduleName) && !/\.library$/.test (_moduleName) // ignore .library modules ) _testSelectorValues.push ({ name:_moduleName, displayName: _moduleName + (_testModulesLookup [Uize.Util.ModuleNaming.getTestModuleName (_moduleName)] ? '' : ' *') }) ; } ); /*** Private Instance Methods ***/ function _prepareToRunTests (m) { var _children = m.children; m.set ({children:{progressBar:{value:m._currentTestNo = 0}}}); _children.log && _children.log.clear (); } return _superclass.subclass ({ set:{ html:UizeSite.Widgets.UnitTests.Html }, staticProperties:{ cssModule:UizeSite.Widgets.UnitTests.Css }, alphastructor:function () { this._currentTestNo = 0; }, stateProperties:{ test:{ conformer:function (_value) {return _value || _runAllModuleTests}, value:_runAllModuleTests, onChange:function () { var m = this; m.once ( 'wired', function () { function _setButtonsEnabled (_mustEnable) { var _enabled = _mustEnable ? 'inherit' : false; m.set ({ children:{ startTests:{enabled:_enabled}, stopTests:{enabled:_enabled} } }); } var _children = m.children; m._testSuite && m._testSuite.stop (); _setButtonsEnabled (false); _prepareToRunTests (m); var _testName = m.test; Uize.Test.Runner.resolve ( { module:_testName == _runAllModuleTests ? '*' : _testName, console:'verbose' }, function () {return _modules}, function (_moduleName) {return _modulesLookup [_moduleName]}, function (_message) {_children.log.log (_message)}, function (_reasonForFailure) {_reasonForFailure && alert (_reasonForFailure)}, function (_test) { m._testSuite = _test; _setButtonsEnabled (true); _children.progressBar.set ({maxValue:m._testSuite.getTotalTests ()}); _prepareToRunTests (m); m._testSuite.wire ({ Done:function (e) {_children.progressBar.set ({value:++m._currentTestNo})} }); m.test != _runAllModuleTests && m.once ('wired',function () {m._testSuite.run ()}) ; } ); } ); } } }, children:{ testSelector:{ widgetClass:Uize.Widgets.Form.Input.Select.Widget, values:_testSelectorValues }, progressBar:{ widgetClass:Uize.Widgets.ProgressBar.Widget, statusText:function (_input) { var _totalSteps = _input.totalSteps; return _totalSteps ? _input.stepsCompleted + ' of ' + _totalSteps + ' tests completed' : ''; } }, startTests:{ widgetClass:Uize.Widgets.Button.Widget, text:'START', flavor:'positive', enabled:false, action:function () { var m = this.parent; _prepareToRunTests (m); m._testSuite.run (); } }, stopTests:{ widgetClass:Uize.Widgets.Button.Widget, text:'STOP', flavor:'negative', enabled:false, action:function () {this.parent._testSuite.stop ()} }, log:{ widgetClass:Uize.Widgets.Log.Widget, title:'TEST LOG' } }, childBindings:{ test:'testSelector.value' } }); } });