157 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			157 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | (function(_global) { | ||
|  |   var options; | ||
|  | 
 | ||
|  |   function setAttributes(elem, attrs) { | ||
|  |     if (!attrs) { | ||
|  |       return; | ||
|  |     } | ||
|  |     Object.keys(attrs).forEach(function(key) { elem.setAttribute(key, attrs[key]); }); | ||
|  |   } | ||
|  | 
 | ||
|  |   function createLi(attrs) { | ||
|  |     var li = document.createElement('li'); | ||
|  |     setAttributes(li, attrs); | ||
|  |     return li; | ||
|  |   } | ||
|  | 
 | ||
|  |   function createLabel(attrs) { | ||
|  |     var label = document.createElement('label'); | ||
|  |     setAttributes(label, attrs); | ||
|  |     return label; | ||
|  |   } | ||
|  | 
 | ||
|  |   function createButton(attrs, innerHtml) { | ||
|  |     var button = document.createElement('button'); | ||
|  |     button.innerHTML = innerHtml; | ||
|  |     setAttributes(button, attrs); | ||
|  |     return button; | ||
|  |   } | ||
|  | 
 | ||
|  |   function createTextNode(text) { return document.createTextNode(text); } | ||
|  | 
 | ||
|  |   function createCheckbox(attrs, checked) { | ||
|  |     var checkbox = document.createElement('input'); | ||
|  |     checkbox.type = 'checkbox'; | ||
|  |     checkbox.checked = !!checked; | ||
|  |     setAttributes(checkbox, attrs); | ||
|  |     return checkbox; | ||
|  |   } | ||
|  | 
 | ||
|  |   function createUl(attrs) { | ||
|  |     var ul = document.createElement('ul'); | ||
|  |     setAttributes(ul, attrs); | ||
|  |     return ul; | ||
|  |   } | ||
|  | 
 | ||
|  |   var serailPromise = _global['__zone_symbol__serialPromise']; | ||
|  | 
 | ||
|  |   _global['__zone_symbol__testTargetsUIBuild'] = function(_options) { | ||
|  |     options = _options; | ||
|  |     var allButton = createButton({}, 'test selected'); | ||
|  |     allButton.addEventListener('click', function() { | ||
|  |       var promiseFactories = []; | ||
|  |       for (var i = 0; i < options.tests.length; i++) { | ||
|  |         var checkbox = document.getElementById('testcheck' + i); | ||
|  |         if (checkbox.checked) { | ||
|  |           var test = options.tests[i]; | ||
|  |           promiseFactories.push({ | ||
|  |             factory: function(context) { return doTest(context.test, context.idx); }, | ||
|  |             context: {test: test, idx: i} | ||
|  |           }); | ||
|  |         } | ||
|  |       } | ||
|  |       serailPromise(promiseFactories); | ||
|  |     }); | ||
|  |     options.targetContainer.appendChild(allButton); | ||
|  | 
 | ||
|  |     var ul = createUl(); | ||
|  |     options.targetContainer.appendChild(ul); | ||
|  | 
 | ||
|  |     for (var i = 0; i < options.tests.length; i++) { | ||
|  |       buildTestItemUI(ul, options.tests[i], i); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   function buildTestItemUI(ul, testItem, idx) { | ||
|  |     var li = createLi({'id': 'test' + idx}); | ||
|  | 
 | ||
|  |     var button = createButton({'id': 'buttontest' + idx}, 'begin test'); | ||
|  |     buildButtonClickHandler(button); | ||
|  | 
 | ||
|  |     var title = createTextNode(options.tests[idx].title); | ||
|  |     var checkbox = createCheckbox({'id': 'testcheck' + idx}, true); | ||
|  |     var label = createLabel({'id': 'label' + idx}); | ||
|  | 
 | ||
|  |     li.appendChild(checkbox); | ||
|  |     li.appendChild(title); | ||
|  |     li.appendChild(button); | ||
|  |     li.appendChild(label); | ||
|  | 
 | ||
|  |     ul.appendChild(li); | ||
|  |   } | ||
|  | 
 | ||
|  |   function processTestResult(test, result, id) { | ||
|  |     var split = result.displayText.split('\n'); | ||
|  |     options.jsonResult[test.title] = result.rawData; | ||
|  |     options.jsonContainer.innerHTML = | ||
|  |         '<div style="display:none">' + JSON.stringify(options.jsonResult) + '</div>'; | ||
|  | 
 | ||
|  |     var summary = result.summary; | ||
|  |     var row = options.resultsContainer.insertRow(); | ||
|  |     var cell = row.insertCell(); | ||
|  |     cell.innerHTML = test.title; | ||
|  |     cell.rowSpan = Object.keys(summary).length; | ||
|  |     var idx = 0; | ||
|  |     Object.keys(summary).forEach(function(key) { | ||
|  |       var tableRow = row; | ||
|  |       if (idx !== 0) { | ||
|  |         tableRow = options.resultsContainer.insertRow(); | ||
|  |       } | ||
|  |       var keyCell = tableRow.insertCell(); | ||
|  |       keyCell.innerHTML = key; | ||
|  |       var valueCell = tableRow.insertCell(); | ||
|  |       valueCell.innerHTML = summary[key]; | ||
|  |       idx++; | ||
|  |     }); | ||
|  | 
 | ||
|  |     var testLi = document.getElementById('test' + id); | ||
|  |     for (var j = 0; j < split.length; j++) { | ||
|  |       var br = document.createElement('br'); | ||
|  |       var s = document.createTextNode(split[j]); | ||
|  |       testLi.appendChild(br); | ||
|  |       testLi.appendChild(s); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function doTest(test, id) { | ||
|  |     test.cleanFn(); | ||
|  |     test.before(); | ||
|  |     var button = document.getElementById('buttontest' + id); | ||
|  |     button.setAttribute('enabled', 'false'); | ||
|  |     var label = document.getElementById('label' + id); | ||
|  |     label.innerHTML = 'Testing'; | ||
|  |     return test.testFn().then(function(result) { | ||
|  |       processTestResult(test, result, id); | ||
|  |       test.after(); | ||
|  |       label.innerHTML = 'Finished'; | ||
|  |       button.setAttribute('enabled', 'true'); | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   function buildButtonClickHandler(button) { | ||
|  |     button.onclick = function(event) { | ||
|  |       var target = event.target; | ||
|  |       var id = target.getAttribute('id').substring(10); | ||
|  |       var test = options.tests[id]; | ||
|  |       doTest(test, id); | ||
|  |     }; | ||
|  |   } | ||
|  | }(typeof window === 'undefined' ? global : window)); |