From 3ac04dd9cbb3c14fb2522793b2268b910837d8c4 Mon Sep 17 00:00:00 2001 From: wei <> Date: Wed, 31 May 2006 04:26:21 +0000 Subject: Update selenium javascript, now runs in Safari! --- tests/FunctionalTests/selenium/core/xpath/misc.js | 255 ++++++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100755 tests/FunctionalTests/selenium/core/xpath/misc.js (limited to 'tests/FunctionalTests/selenium/core/xpath/misc.js') diff --git a/tests/FunctionalTests/selenium/core/xpath/misc.js b/tests/FunctionalTests/selenium/core/xpath/misc.js new file mode 100755 index 00000000..9017542e --- /dev/null +++ b/tests/FunctionalTests/selenium/core/xpath/misc.js @@ -0,0 +1,255 @@ +// Copyright 2005 Google Inc. +// All Rights Reserved +// +// Miscellania that support the ajaxslt implementation. +// +// Author: Steffen Meschkat +// + +function el(i) { + return document.getElementById(i); +} + +function px(x) { + return x + 'px'; +} + +// Split a string s at all occurrences of character c. This is like +// the split() method of the string object, but IE omits empty +// strings, which violates the invariant (s.split(x).join(x) == s). +function stringSplit(s, c) { + var a = s.indexOf(c); + if (a == -1) { + return [ s ]; + } + + var parts = []; + parts.push(s.substr(0,a)); + while (a != -1) { + var a1 = s.indexOf(c, a + 1); + if (a1 != -1) { + parts.push(s.substr(a + 1, a1 - a - 1)); + } else { + parts.push(s.substr(a + 1)); + } + a = a1; + } + + return parts; +} + +// Returns the text value if a node; for nodes without children this +// is the nodeValue, for nodes with children this is the concatenation +// of the value of all children. +function xmlValue(node) { + if (!node) { + return ''; + } + + var ret = ''; + if (node.nodeType == DOM_TEXT_NODE || + node.nodeType == DOM_CDATA_SECTION_NODE || + node.nodeType == DOM_ATTRIBUTE_NODE) { + ret += node.nodeValue; + + } else if (node.nodeType == DOM_ELEMENT_NODE || + node.nodeType == DOM_DOCUMENT_NODE || + node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) { + for (var i = 0; i < node.childNodes.length; ++i) { + ret += arguments.callee(node.childNodes[i]); + } + } + return ret; +} + +// Returns the representation of a node as XML text. +function xmlText(node) { + var ret = ''; + if (node.nodeType == DOM_TEXT_NODE) { + ret += xmlEscapeText(node.nodeValue); + + } else if (node.nodeType == DOM_ELEMENT_NODE) { + ret += '<' + node.nodeName; + for (var i = 0; i < node.attributes.length; ++i) { + var a = node.attributes[i]; + if (a && a.nodeName && a.nodeValue) { + ret += ' ' + a.nodeName; + ret += '="' + xmlEscapeAttr(a.nodeValue) + '"'; + } + } + + if (node.childNodes.length == 0) { + ret += '/>'; + + } else { + ret += '>'; + for (var i = 0; i < node.childNodes.length; ++i) { + ret += arguments.callee(node.childNodes[i]); + } + ret += ''; + } + + } else if (node.nodeType == DOM_DOCUMENT_NODE || + node.nodeType == DOM_DOCUMENT_FRAGMENT_NODE) { + for (var i = 0; i < node.childNodes.length; ++i) { + ret += arguments.callee(node.childNodes[i]); + } + } + + return ret; +} + +// Applies the given function to each element of the array. +function mapExec(array, func) { + for (var i = 0; i < array.length; ++i) { + func(array[i]); + } +} + +// Returns an array that contains the return value of the given +// function applied to every element of the input array. +function mapExpr(array, func) { + var ret = []; + for (var i = 0; i < array.length; ++i) { + ret.push(func(array[i])); + } + return ret; +}; + +// Reverses the given array in place. +function reverseInplace(array) { + for (var i = 0; i < array.length / 2; ++i) { + var h = array[i]; + var ii = array.length - i - 1; + array[i] = array[ii]; + array[ii] = h; + } +} + +// Shallow-copies an array. +function copyArray(dst, src) { + for (var i = 0; i < src.length; ++i) { + dst.push(src[i]); + } +} + +function assert(b) { + if (!b) { + throw 'assertion failed'; + } +} + +// Based on +// +var DOM_ELEMENT_NODE = 1; +var DOM_ATTRIBUTE_NODE = 2; +var DOM_TEXT_NODE = 3; +var DOM_CDATA_SECTION_NODE = 4; +var DOM_ENTITY_REFERENCE_NODE = 5; +var DOM_ENTITY_NODE = 6; +var DOM_PROCESSING_INSTRUCTION_NODE = 7; +var DOM_COMMENT_NODE = 8; +var DOM_DOCUMENT_NODE = 9; +var DOM_DOCUMENT_TYPE_NODE = 10; +var DOM_DOCUMENT_FRAGMENT_NODE = 11; +var DOM_NOTATION_NODE = 12; + + +var xpathdebug = false; // trace xpath parsing +var xsltdebug = false; // trace xslt processing + + +// Escape XML special markup chracters: tag delimiter < > and entity +// reference start delimiter &. The escaped string can be used in XML +// text portions (i.e. between tags). +function xmlEscapeText(s) { + return s.replace(/&/g, '&').replace(//g, '>'); +} + +// Escape XML special markup characters: tag delimiter < > entity +// reference start delimiter & and quotes ". The escaped string can be +// used in double quoted XML attribute value portions (i.e. in +// attributes within start tags). +function xmlEscapeAttr(s) { + return xmlEscapeText(s).replace(/\"/g, '"'); +} + +// Escape markup in XML text, but don't touch entity references. The +// escaped string can be used as XML text (i.e. between tags). +function xmlEscapeTags(s) { + return s.replace(//g, '>'); +} + +// An implementation of the debug log. + +var logging__ = false; + +function Log() {}; + +Log.lines = []; + +Log.write = function(s) { + if (logging__) { + this.lines.push(xmlEscapeText(s)); + this.show(); + } +}; + +// Writes the given XML with every tag on a new line. +Log.writeXML = function(xml) { + if (logging__) { + var s0 = xml.replace(/'); + this.lines.push(s2); + this.show(); + } +} + +// Writes without any escaping +Log.writeRaw = function(s) { + if (logging__) { + this.lines.push(s); + this.show(); + } +} + +Log.clear = function() { + if (logging__) { + var l = this.div(); + l.innerHTML = ''; + this.lines = []; + } +} + +Log.show = function() { + var l = this.div(); + l.innerHTML += this.lines.join('
') + '
'; + this.lines = []; + l.scrollTop = l.scrollHeight; +} + +Log.div = function() { + var l = document.getElementById('log'); + if (!l) { + l = document.createElement('div'); + l.id = 'log'; + l.style.position = 'absolute'; + l.style.right = '5px'; + l.style.top = '5px'; + l.style.width = '250px'; + l.style.height = '150px'; + l.style.overflow = 'auto'; + l.style.backgroundColor = '#f0f0f0'; + l.style.border = '1px solid gray'; + l.style.fontSize = '10px'; + l.style.padding = '5px'; + document.body.appendChild(l); + } + return l; +} + + +function Timer() {} +Timer.start = function() {} +Timer.end = function() {} -- cgit v1.2.3