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));
 |