summaryrefslogtreecommitdiff
path: root/js/src/tests/menuhead.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/menuhead.js')
-rw-r--r--js/src/tests/menuhead.js730
1 files changed, 730 insertions, 0 deletions
diff --git a/js/src/tests/menuhead.js b/js/src/tests/menuhead.js
new file mode 100644
index 0000000..fbd39ad
--- /dev/null
+++ b/js/src/tests/menuhead.js
@@ -0,0 +1,730 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ * Contributor: Bob Clary
+ */
+
+var gTotalCount = 0;
+var gTotalSelected = 0;
+
+function setCursor(aCursor)
+{
+ if (document.body && document.body.style)
+ {
+ document.body.style.cursor = aCursor;
+ }
+}
+
+function selectAll(suiteName, testDirName)
+{
+ setCursor('wait');
+
+ suiteName = suiteName || '';
+ testDirName = testDirName || '';
+
+ setTimeout('_selectAll("' + suiteName + '", "' + testDirName + '")', 200);
+}
+
+function _selectAll(suiteName, testDirName)
+{
+ if (!suiteName)
+ {
+ for (suiteName in suites)
+ {
+ setAllDirs(suiteName, true);
+ }
+ }
+ else if (!testDirName)
+ {
+ setAllDirs(suiteName, true);
+ }
+ else
+ {
+ setAllTests(suiteName, testDirName, true);
+ }
+
+ setCursor('auto');
+}
+
+function selectNone(suiteName, testDirName)
+{
+ setCursor('wait');
+
+ suiteName = suiteName || '';
+ testDirName = testDirName || '';
+
+ setTimeout('_selectNone("' + suiteName + '", "' + testDirName + '")', 200);
+}
+
+function _selectNone(suiteName, testDirName)
+{
+ if (!suiteName)
+ {
+ for (suiteName in suites)
+ {
+ setAllDirs(suiteName, false);
+ }
+ }
+ else if (!testDirName)
+ {
+ setAllDirs(suiteName, false);
+ }
+ else
+ {
+ setAllTests(suiteName, testDirName, false);
+ }
+
+ setCursor('auto');
+}
+
+function updateCounts(suiteName)
+{
+ var suite = suites[suiteName];
+ var pct = parseInt((suite.selected / suite.count) * 100);
+ if (isNaN(pct))
+ pct = 0;
+
+ document.forms.testCases.elements['SUMMARY_' + suiteName].value =
+ suite.selected + '/' + suite.count +
+ ' (' + pct + '%) selected';
+
+ pct = parseInt((gTotalSelected / gTotalCount) * 100);
+ if (isNaN(pct))
+ pct = 0;
+
+ document.forms.testCases.elements['TOTAL'].value =
+ gTotalSelected + '/' + gTotalCount + ' (' +
+ pct + '%) selected';
+}
+
+function onRadioClick(radio)
+{
+ var info = radio.id.split(':');
+ var suiteName = info[0];
+ var suite = suites[suiteName];
+ var incr = (radio.checked ? 1 : -1);
+ suite.selected += incr;
+ gTotalSelected += incr;
+
+ updateCounts(suiteName);
+
+ return true;
+}
+
+function updateTotals()
+{
+ setCursor('wait');
+
+ setTimeout('_updateTotals()', 200);
+}
+
+function _updateTotals()
+{
+ gTotalCount = 0;
+ gTotalSelected = 0;
+
+ for (var suiteName in suites)
+ {
+ gTotalCount += suites[suiteName].count;
+ }
+ for (suiteName in suites)
+ {
+ updateCounts(suiteName);
+ }
+ setCursor('auto');
+}
+
+function setAllDirs(suiteName, value)
+{
+ var testDirs = suites[suiteName].testDirs;
+
+ for (var testDirName in testDirs)
+ {
+ setAllTests(suiteName, testDirName, value);
+ }
+}
+
+function setAllTests(suiteName, testDirName, value)
+{
+ var suite = suites[suiteName];
+ var tests = suite.testDirs[testDirName].tests;
+ var elements = document.forms['testCases'].elements;
+ var incr = 0;
+
+ for (var testName in tests)
+ {
+ var radioName = tests[testName].id;
+ var radio = elements[radioName];
+ if (radio.checked && !value)
+ {
+ incr--;
+ }
+ else if (!radio.checked && value)
+ {
+ incr++;
+ }
+ radio.checked = value;
+ }
+
+ suite.selected += incr;
+ gTotalSelected += incr;
+
+ updateCounts(suiteName);
+}
+
+function createList()
+{
+ var suiteName;
+ var elements = document.forms['testCases'].elements;
+ var win = window.open('about:blank', 'other_window');
+ var writer = new CachedWriter(win.document);
+
+ win.document.open();
+ writer.writeln('<pre>');
+
+ writer.writeln('# Created ' + new Date());
+
+ for (suiteName in suites)
+ {
+ writer.writeln('# ' + suiteName + ': ' +
+ elements['SUMMARY_' + suiteName].value);
+ }
+
+ writer.writeln('# TOTAL: ' + elements['TOTAL'].value);
+
+ for (suiteName in suites)
+ {
+ var testDirs = suites[suiteName].testDirs;
+ for (var testDirName in testDirs)
+ {
+ var tests = testDirs[testDirName].tests;
+ for (var testName in tests)
+ {
+ var radioName = tests[testName].id;
+ var radio = elements[radioName];
+ if (radio.checked)
+ writer.writeln(suiteName + '/' + testDirName + '/' + radio.value);
+ }
+ }
+ }
+ writer.writeln('<\/pre>');
+
+ writer.close();
+}
+
+var gTests;
+var gTestNumber;
+var gWindow;
+
+function executeList()
+{
+ var elements = document.forms['testCases'].elements;
+
+ gTests = [];
+ gTestNumber = -1;
+
+ for (var suiteName in suites)
+ {
+ var testDirs = suites[suiteName].testDirs;
+ for (var testDirName in testDirs)
+ {
+ var tests = testDirs[testDirName].tests;
+ for (var testName in tests)
+ {
+ var test = tests[testName];
+ var radioName = test.id;
+ var radio = elements[radioName];
+ delete test.testCases;
+ if (radio.checked)
+ {
+ gTests[gTests.length] = test;
+ test.path = suiteName + '/' + testDirName + '/' + radio.value;
+ }
+ }
+ }
+ }
+ runNextTest();
+}
+
+function runNextTest()
+{
+ var iTestCase;
+
+ if (gTestNumber != -1)
+ {
+ // tests have already run in gWindow, collect the results
+ // for later reporting.
+
+ var e;
+ try
+ {
+ var test = gTests[gTestNumber];
+ test.testCases = [];
+ //test.testCases = test.testCases.concat(gWindow.gTestcases);
+ // note MSIE6 has a bug where instead of concating the new arrays
+ // it concats them to the first element. work around...
+ var origtestcases = gWindow.gTestcases;
+ for (iTestCase = 0; iTestCase < origtestcases.length; iTestCase++)
+ {
+// test.testCases[test.testCases.length] = origtestcases[iTestCase];
+ var origtestcase = origtestcases[iTestCase];
+ var testCase = test.testCases[test.testCases.length] = {};
+ testCase.name = new String(origtestcase.name);
+ testCase.description = new String(origtestcase.description);
+ testCase.expect = new String(origtestcase.expect);
+ testCase.actual = new String(origtestcase.actual);
+ testCase.passed = origtestcase.passed ? true : false;
+ testCase.reason = new String(origtestcase.reason);
+ testCase.bugnumber = new String(origtestcase.bugnumber?origtestcase.bugnumber:'');
+ }
+ origtestcases = origtestcase = null;
+ }
+ catch(e)
+ {
+ ;
+ }
+ }
+
+ ++gTestNumber;
+
+ if (gTestNumber < gTests.length)
+ {
+ // run test
+ test = gTests[gTestNumber];
+
+ gWindow = window.open('js-test-driver-' +
+ document.forms.testCases.doctype.value +
+ '.html?test=' +
+ test.path +
+ ';language=' +
+ document.forms.testCases.language.value,
+ 'output');
+ if (!gWindow)
+ {
+ alert('This test suite requires popup windows.\n' +
+ 'Please enable them for this site.');
+ }
+ }
+ else if (document.forms.testCases.outputformat.value == 'html')
+ {
+ // all tests completed, display report
+ reportHTML();
+ }
+ else if (document.forms.testCases.outputformat.value == 'javascript')
+ {
+ // all tests completed, display report
+ reportJavaScript();
+ }
+
+}
+
+function reportHTML()
+{
+ var errorsOnly = document.forms.testCases.failures.checked;
+ var totalTestCases = 0;
+ var totalTestCasesPassed = 0;
+ var totalTestCasesFailed = 0;
+
+ gWindow.document.close();
+
+ var writer = new CachedWriter(gWindow.document);
+
+ writer.writeln('<!DOCTYPE HTML PUBLIC ' +
+ '"-//W3C//DTD HTML 4.01 Transitional//EN" ' +
+ '"http://www.w3.org/TR/html4/loose.dtd">');
+
+ writer.writeln('<html>');
+ writer.writeln('<head>');
+ writer.writeln('<title>JavaScript Tests Browser: ' +
+ navigator.userAgent + ' Language: ' +
+ document.forms.testCases.language.value +
+ '<\/title>');
+ writer.writeln('<style type="text/css">');
+ writer.writeln(' .passed { } .failed { background-color: red; }');
+ writer.writeln('table {}');
+ writer.writeln('th.description, th.actual, th.expect { width: 30em;}');
+ writer.writeln('<\/style>');
+
+ writer.writeln('<\/head>');
+ writer.writeln('<body>');
+ writer.writeln('<h2>JavaScript Tests Browser: ' +
+ navigator.userAgent + ' Language: ' +
+ document.forms.testCases.language.value +
+ '<\/h2>');
+
+ writer.writeln('<table border="1">');
+ writer.writeln('<thead>');
+ writer.writeln('<tr>');
+ writer.writeln('<th>Suite<\/th>');
+ writer.writeln('<th>Directory<\/th>');
+ writer.writeln('<th>Test<\/th>');
+ writer.writeln('<th>Passed<\/th>');
+ writer.writeln('<th class="description">Description<\/th>');
+ writer.writeln('<th class="actual">Actual<\/th>');
+ writer.writeln('<th class="expect">Expect<\/th>');
+ writer.writeln('<th>BugNumber<\/th>');
+ writer.writeln('<th>Reason<\/th>');
+ writer.writeln('<\/tr>');
+ writer.writeln('<\/thead>');
+ writer.writeln('<tbody>');
+
+ writer.writeln('<\/tr>');
+
+ for (var suiteName in suites)
+ {
+ var suiteTotals = {passed: 0, failed: 0};
+ var testDirs = suites[suiteName].testDirs;
+
+ for (var testDirName in testDirs)
+ {
+ var dirTotals = {passed: 0, failed: 0};
+ var tests = testDirs[testDirName].tests;
+
+ for (var testName in tests)
+ {
+ var nameTotals = {passed: 0, failed: 0};
+ var test = tests[testName];
+
+ if (! ('testCases' in test) )
+ {
+ // test not run
+ continue;
+ }
+
+ var testCases = test.testCases;
+
+ for (var iTestCase = 0; iTestCase < testCases.length; iTestCase++)
+ {
+ var testCase = testCases[iTestCase];
+ ++totalTestCases;
+ if (testCase.passed)
+ {
+ ++totalTestCasesPassed;
+ ++nameTotals.passed;
+ ++dirTotals.passed;
+ ++suiteTotals.passed;
+ }
+ else
+ {
+ ++totalTestCasesFailed;
+ ++nameTotals.failed;
+ ++dirTotals.failed;
+ ++suiteTotals.failed;
+ }
+
+ if (errorsOnly && testCase.passed)
+ {
+ continue;
+ }
+
+ writer.writeln('<tr class="' +
+ (testCase.passed ? 'passed' : 'failed') + '">' +
+ '<td title="Suite">' + suiteName + '<\/td>' +
+ '<td title="Directory">' + testDirName + '<\/td>' +
+ '<td title="Test">' + testName + '<\/td>' +
+ '<td title="Status">' +
+ (testCase.passed ? 'Test Passed':'Test Failed') +
+ '<\/td>' +
+ '<td title="Description">' +
+ splitString(testCase.description, '<br>', 30) +
+ '<\/td>' +
+ '<td title="Actual">' +
+ splitString(testCase.actual, '<br>', 30) +
+ '<\/td>' +
+ '<td title="Expected">' +
+ splitString(testCase.expect, '<br>', 30) +
+ '<\/td>' +
+ '<td title="Bug">' +
+ (testCase.bugnumber?testCase.bugnumber:'') +
+ '<\/td>' +
+ '<td title="Reason">' + testCase.reason + '<\/td>' +
+ '<\/tr>');
+ } // for iTestCase
+
+ if (!errorsOnly && nameTotals.passed + nameTotals.failed > 0)
+ {
+ writer.writeln('<tr>' +
+ '<td>' + suiteName + '<\/td>' +
+ '<td>' + testDirName + '<\/td>' +
+ '<td colspan="7" style="font-weight:bold;">' +
+ testName + ' ' +
+ 'Passed = ' + nameTotals.passed.toString() + ' ' +
+ 'Failed = ' + nameTotals.failed.toString() +
+ '<\/td>' +
+ '<\/tr>');
+ }
+
+ } // for (var testName in tests)
+
+ if (!errorsOnly && dirTotals.passed + dirTotals.failed > 0)
+ {
+ writer.writeln('<tr>' +
+ '<td>' + suiteName + '<\/td>' +
+ '<td colspan="8" style="font-weight:bold;">' +
+ testDirName + ' ' +
+ 'Passed = ' + dirTotals.passed.toString() + ' ' +
+ 'Failed = ' + dirTotals.failed.toString() +
+ '<\/td>' +
+ '<\/tr>');
+ }
+
+ } // for (var testDirName in testDirs)
+
+ if (!errorsOnly && suiteTotals.passed + suiteTotals.failed > 0)
+ {
+ writer.writeln('<tr>' +
+ '<td colspan="9" style="font-weight:bold;">' +
+ suiteName + ' ' +
+ 'Passed = ' + suiteTotals.passed.toString() + ' ' +
+ 'Failed = ' + suiteTotals.failed.toString() +
+ '<\/td>' +
+ '<\/tr>');
+ }
+
+ } // for (var suiteName in suites)
+
+ writer.writeln('<\/tbody>');
+ writer.writeln('<\/table>');
+
+ writer.writeln('<p>Total TestCases = ' + totalTestCases +
+ ', Passed = ' + totalTestCasesPassed +
+ ', Failed = ' + totalTestCasesFailed +
+ '<\/p>');
+ writer.writeln('<\/body>');
+ writer.writeln('<\/html>');
+
+ writer.close();
+}
+
+// return a string with delim inserted every pos characters
+// if there are no spaces to break the line
+function splitString(str, delim, pos)
+{
+ var newstr = '';
+ var length = str.length;
+
+ if (str.indexOf(' ') != -1)
+ {
+ return str;
+ }
+ for (var i = 0; i < length; i += pos)
+ {
+ newstr += str.substr(i, pos) + delim;
+ }
+ return newstr;
+}
+function reportJavaScript()
+{
+ gWindow.document.close();
+
+ var errorsOnly = document.forms.testCases.failures.checked;
+ var writer = new CachedWriter(gWindow.document);
+
+ writer.writeln('<html>');
+ writer.writeln('<head>');
+ writer.writeln('<title>JavaScript Tests Browser: ' +
+ navigator.userAgent + ' Language: ' +
+ document.forms.testCases.language.value +
+ '<\/title>');
+ writer.writeln('<script type="text/javascript">');
+ writer.writeln('var global = window.parent;');
+ writer.writeln('if (!global.gUAHash) {');
+ writer.writeln(' global.gUAHash = {};');
+ writer.writeln(' global.gUAList = {};');
+ writer.writeln(' global.gUA_id = -1;');
+ writer.writeln(' global.gTestResults = {};');
+ writer.writeln('}');
+ writer.writeln('var gUA = "' + navigator.userAgent + '";');
+ writer.writeln('var gUA_id = global.gUAHash[gUA];');
+ writer.writeln('if (typeof(gUA_id) != "number") {');
+ writer.writeln(' gUA_id = global.gUAHash[gUA] = ++global.gUA_id;');
+ writer.writeln(' global.gUAList[gUA_id] = gUA;');
+ writer.writeln('}');
+ writer.writeln('var gTestResults = global.gTestResults;');
+ writer.writeln('var gLanguage = \'' + document.forms.testCases.language.value + '\';');
+ writer.writeln('var gResult;');
+ writer.writeln('var gResultId;');
+ writer.writeln('var gUAResult;');
+ writer.writeln('var gJSResult;');
+ writer.writeln('var gSuiteId;');
+ writer.writeln('var gSuite;');
+ writer.writeln('var gDirId;');
+ writer.writeln('var gDir;');
+ writer.writeln('var gTestId;');
+ writer.writeln('var gTest;');
+
+ writer.writeln('gUAResult = gTestResults[gUA_id];');
+ writer.writeln('if (!gUAResult) {');
+ writer.writeln(' gUAResult = gTestResults[gUA_id] = {};');
+ writer.writeln('}');
+ writer.writeln('gJSResult = gUAResult[gLanguage];');
+ writer.writeln('if (!gJSResult) {');
+ writer.writeln(' gJSResult = gUAResult[gLanguage] = {};');
+ writer.writeln('}');
+
+
+ for (var suiteName in suites)
+ {
+ var suiteheader = '';
+
+ suiteheader += 'gSuiteId = "' + suiteName + '";\n';
+ suiteheader += 'gSuite = gJSResult[gSuiteId];\n';
+ suiteheader += 'if (!gSuite) {\n';
+ suiteheader += ' gSuite = gJSResult[gSuiteId] = {};\n';
+ suiteheader += '}\n';
+
+ var testDirs = suites[suiteName].testDirs;
+
+ for (var testDirName in testDirs)
+ {
+ var dirheader = '';
+
+ dirheader += 'gDirId = "' + testDirName + '";\n';
+ dirheader += 'gDir = gSuite[gDirId];\n';
+ dirheader += 'if (!gDir) {\n';
+ dirheader += ' gDir = gSuite[gDirId] = {};\n';
+ dirheader += '}\n';
+
+ var tests = testDirs[testDirName].tests;
+
+ for (var testName in tests)
+ {
+ var test = tests[testName];
+
+ if (! ('testCases' in test) )
+ {
+ // test not run
+ continue;
+ }
+
+ var testCases = test.testCases;
+ var resultId = suiteName + '/' + testDirName + '/' + testName;
+
+ var testheader = '';
+ testheader += 'gTestId = "' + testName + '";\n';
+ testheader += 'gTest = gDir[gTestId];\n';
+ testheader += 'if (!gTest) {\n';
+ testheader += ' gTest = gDir[gTestId] = [];\n';
+ testheader += '}\n';
+
+ for (var iTestCase = 0; iTestCase < testCases.length; iTestCase++)
+ {
+ var testCase = testCases[iTestCase];
+ if (errorsOnly && testCase.passed)
+ {
+ continue;
+ }
+
+ if (suiteheader)
+ {
+ writer.writeln(suiteheader);
+ suiteheader = '';
+ }
+ if (dirheader)
+ {
+ writer.writeln(dirheader);
+ dirheader = '';
+ }
+ if (testheader)
+ {
+ writer.writeln(testheader);
+ testheader = '';
+ }
+
+ var name = escape(testCase.name);
+ var desc = escape(testCase.description);
+ var actual = escape(testCase.actual);
+ var expect = escape(testCase.expect);
+ var reason = escape(testCase.reason);
+
+ var buffer = '';
+
+ buffer += 'gTest[gTest.length] = \n';
+ buffer += '{\n';
+ buffer += 'name: "' + name + '",\n';
+ buffer += 'description: "' + desc + '",\n';
+ buffer += 'expect: "' + expect + '",\n';
+ buffer += 'actual: "' + actual + '",\n';
+ buffer += 'passed: ' + testCase.passed + ',\n';
+ buffer += 'reason: "' + reason + '",\n';
+ buffer += 'bugnumber: "' + (testCase.bugnumber ?
+ testCase.bugnumber : '') + '"\n';
+ buffer += '};\n';
+
+ writer.writeln(buffer);
+ buffer = '';
+
+ } // for iTestCase
+
+ } // for testName
+
+ } // for testDirName
+
+ } // for (var suiteName in suites)
+
+ writer.writeln('<\/script>');
+ writer.writeln('<\/head>');
+ writer.writeln('<body>');
+ writer.writeln('<p>JavaScript Tests Browser: ' +
+ navigator.userAgent + ' Language: ' +
+ document.forms.testCases.language.value +
+ '<\/p>');
+ writer.writeln('<\/body>')
+ writer.writeln('<\/html>');
+ writer.close();
+}
+
+// improve IE's performance. Mozilla's is fine. ;-)
+function CachedWriter(doc, limit)
+{
+ this.document = doc;
+ this.pendingCount = 0;
+ this.pendingLimit = limit ? limit : 100;
+ this.lines = [];
+}
+
+CachedWriter.prototype.destroy = function _cachedWriterDestroy()
+{
+ this.document = null;
+ this.pendingCount = 0;
+ this.pendingLimit = 0;
+ this.lines = null;
+}
+
+ CachedWriter.prototype.writeln = function _cachedWriterWriteLine(s)
+{
+ this.lines[this.lines.length] = s;
+ if (++this.pendingCount >= this.pendingLimit)
+ {
+ this.flush();
+ }
+}
+
+CachedWriter.prototype.flush = function _cachedWriterFlush()
+{
+ var s = this.lines.join('\n');
+ this.pendingCount = 0;
+ this.lines = [];
+ if (!window.opera)
+ {
+ for (var ibadchar = 0; ibadchar < 32; ++ibadchar)
+ {
+ if (ibadchar != 10 && ibadchar != 13)
+ {
+ var badchar = String.fromCharCode(ibadchar);
+ var badregx = new RegExp(badchar, 'mg');
+ var escchar = '\\0x' + ibadchar.toString(16);
+ s = s.replace(badregx, escchar);
+ }
+ }
+ }
+ this.document.writeln(s);
+}
+
+ CachedWriter.prototype.close = function _cachedWriterClose()
+{
+ this.flush();
+ this.document.close();
+ this.destroy();
+}