diff options
Diffstat (limited to 'test/data')
-rw-r--r-- | test/data/cow.jpg | bin | 0 -> 1635 bytes | |||
-rw-r--r-- | test/data/dashboard.xml | 11 | ||||
-rw-r--r-- | test/data/json.php | 9 | ||||
-rw-r--r-- | test/data/json_obj.js | 1 | ||||
-rw-r--r-- | test/data/jsonp.php | 10 | ||||
-rw-r--r-- | test/data/name.html | 1 | ||||
-rw-r--r-- | test/data/name.php | 29 | ||||
-rw-r--r-- | test/data/test.html | 7 | ||||
-rw-r--r-- | test/data/test.js | 3 | ||||
-rw-r--r-- | test/data/test.php | 7 | ||||
-rw-r--r-- | test/data/test2.html | 5 | ||||
-rw-r--r-- | test/data/test3.html | 3 | ||||
-rw-r--r-- | test/data/testrunner.js | 303 | ||||
-rw-r--r-- | test/data/testsuite.css | 113 | ||||
-rw-r--r-- | test/data/text.php | 12 | ||||
-rw-r--r-- | test/data/with_fries.xml | 25 |
16 files changed, 539 insertions, 0 deletions
diff --git a/test/data/cow.jpg b/test/data/cow.jpg Binary files differnew file mode 100644 index 000000000..2c5b67225 --- /dev/null +++ b/test/data/cow.jpg diff --git a/test/data/dashboard.xml b/test/data/dashboard.xml new file mode 100644 index 000000000..10f6b3347 --- /dev/null +++ b/test/data/dashboard.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<dashboard> + <locations class="foo"> + <location for="bar"> + <infowindowtab> + <tab title="Location"><![CDATA[blabla]]></tab> + <tab title="Users"><![CDATA[blublu]]></tab> + </infowindowtab> + </location> + </locations> +</dashboard> diff --git a/test/data/json.php b/test/data/json.php new file mode 100644 index 000000000..08e3f9e32 --- /dev/null +++ b/test/data/json.php @@ -0,0 +1,9 @@ +<?php
+error_reporting(0);
+$json = $_REQUEST['json'];
+if($json) {
+ echo '[ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ]';
+} else {
+ echo '{ "data": {"lang": "en", "length": 25} }';
+}
+?>
\ No newline at end of file diff --git a/test/data/json_obj.js b/test/data/json_obj.js new file mode 100644 index 000000000..7fa61820f --- /dev/null +++ b/test/data/json_obj.js @@ -0,0 +1 @@ +{ "data": {"lang": "en", "length": 25} } diff --git a/test/data/jsonp.php b/test/data/jsonp.php new file mode 100644 index 000000000..75000252b --- /dev/null +++ b/test/data/jsonp.php @@ -0,0 +1,10 @@ +<?php
+error_reporting(0);
+$callback = $_REQUEST['callback'];
+$json = $_REQUEST['json'];
+if($json) {
+ echo $callback . '([ {"name": "John", "age": 21}, {"name": "Peter", "age": 25 } ])';
+} else {
+ echo $callback . '({ "data": {"lang": "en", "length": 25} })';
+}
+?>
diff --git a/test/data/name.html b/test/data/name.html new file mode 100644 index 000000000..0fa32d1a8 --- /dev/null +++ b/test/data/name.html @@ -0,0 +1 @@ +ERROR <script type="text/javascript">ok( true, "name.html retrieved" );</script> diff --git a/test/data/name.php b/test/data/name.php new file mode 100644 index 000000000..a4b990e3d --- /dev/null +++ b/test/data/name.php @@ -0,0 +1,29 @@ +<?php
+error_reporting(0);
+$wait = $_REQUEST['wait'];
+if($wait) {
+ sleep($wait);
+}
+$xml = $_REQUEST['xml'];
+if($xml) {
+ header("Content-type: text/xml");
+ $result = ($xml == "5-2") ? "3" : "?";
+ echo "<math><calculation>$xml</calculation><result>$result</result></math>";
+ die();
+}
+$name = $_REQUEST['name'];
+if($name == 'foo') {
+ echo "bar";
+ die();
+} else if($name == 'peter') {
+ echo "pan";
+ die();
+}
+$request = apache_request_headers();
+$request = $request['X-Custom-Header'];
+if(strlen($request) > 0) {
+ echo $request;
+ die();
+}
+echo 'ERROR <script type="text/javascript">ok( true, "name.php executed" );</script>';
+?>
\ No newline at end of file diff --git a/test/data/test.html b/test/data/test.html new file mode 100644 index 000000000..fc6dc3860 --- /dev/null +++ b/test/data/test.html @@ -0,0 +1,7 @@ +html text<br/> +<script type="text/javascript">/* <![CDATA[ */ +testFoo = "foo"; $('#foo').html('foo'); +ok( true, "test.html executed" ); +/* ]]> */</script> +<script src="data/test.js"></script> +blabla diff --git a/test/data/test.js b/test/data/test.js new file mode 100644 index 000000000..f8bdd091e --- /dev/null +++ b/test/data/test.js @@ -0,0 +1,3 @@ +var foobar = "bar";
+$('#ap').html('bar');
+ok( true, "test.js executed");
diff --git a/test/data/test.php b/test/data/test.php new file mode 100644 index 000000000..9dbea9798 --- /dev/null +++ b/test/data/test.php @@ -0,0 +1,7 @@ +html text<br/> +<script type="text/javascript">/* <![CDATA[ */ +testFoo = "foo"; $('#foo').html('foo'); +ok( true, "test.php executed" ); +/* ]]> */</script> +<script src="data/test.js?<?php srand(); echo time() . '' . rand(); ?>"></script> +blabla
\ No newline at end of file diff --git a/test/data/test2.html b/test/data/test2.html new file mode 100644 index 000000000..ebf610e43 --- /dev/null +++ b/test/data/test2.html @@ -0,0 +1,5 @@ +<script type="text/javascript"> +var testFoo = "foo"; +$('#foo').html('foo'); +ok( true, "test2.html executed" ); +</script> diff --git a/test/data/test3.html b/test/data/test3.html new file mode 100644 index 000000000..909d41745 --- /dev/null +++ b/test/data/test3.html @@ -0,0 +1,3 @@ +<div class="user">This is a user</div> +<div class="user">This is a user</div> +<div class="teacher">This is a teacher</div> diff --git a/test/data/testrunner.js b/test/data/testrunner.js new file mode 100644 index 000000000..69377e452 --- /dev/null +++ b/test/data/testrunner.js @@ -0,0 +1,303 @@ +var _config = { + fixture: null, + Test: [], + stats: { + all: 0, + bad: 0 + }, + queue: [], + blocking: true, + timeout: null, + expected: null, + currentModule: null, + asyncTimeout: 2 // seconds for async timeout +}; + +var isLocal = !!(window.location.protocol == 'file:'); + +$(function() { + $('#userAgent').html(navigator.userAgent); + runTest(); +}); + +function synchronize(callback) { + _config.queue[_config.queue.length] = callback; + if(!_config.blocking) { + process(); + } +} + +function process() { + while(_config.queue.length && !_config.blocking) { + var call = _config.queue[0]; + _config.queue = _config.queue.slice(1); + call(); + } +} + +function stop(allowFailure) { + _config.blocking = true; + var handler = allowFailure ? start : function() { + ok( false, "Test timed out" ); + start(); + }; + // Disabled, caused too many random errors + //_config.timeout = setTimeout(handler, _config.asyncTimeout * 1000); +} +function start() { + // A slight delay, to avoid any current callbacks + setTimeout(function(){ + if(_config.timeout) + clearTimeout(_config.timeout); + _config.blocking = false; + process(); + }, 13); +} + +function runTest() { + _config.blocking = false; + var time = new Date(); + _config.fixture = document.getElementById('main').innerHTML; + synchronize(function() { + time = new Date() - time; + $("<div>").html(['<p class="result">Tests completed in ', + time, ' milliseconds.<br/>', + _config.stats.bad, ' tests of ', _config.stats.all, ' failed.</p>'] + .join('')) + .appendTo("body"); + $("#banner").addClass(_config.stats.bad ? "fail" : "pass"); + }); +} + +function test(name, callback, nowait) { + if(_config.currentModule) + name = _config.currentModule + " module: " + name; + + var filter = location.search.slice(1); + if ( filter && encodeURIComponent(name).indexOf(filter) == -1 ) + return; + + synchronize(function() { + _config.Test = []; + try { + callback(); + } catch(e) { + if( typeof console != "undefined" && console.error && console.warn ) { + console.error("Test " + name + " died, exception and test follows"); + console.error(e); + console.warn(callback.toString()); + } + _config.Test.push( [ false, "Died on test #" + (_config.Test.length+1) + ": " + e ] ); + } + }); + synchronize(function() { + reset(); + + // don't output pause tests + if(nowait) return; + + if(_config.expected && _config.expected != _config.Test.length) { + _config.Test.push( [ false, "Expected " + _config.expected + " assertions, but " + _config.Test.length + " were run" ] ); + } + _config.expected = null; + + var good = 0, bad = 0; + var ol = document.createElement("ol"); + ol.style.display = "none"; + var li = "", state = "pass"; + for ( var i = 0; i < _config.Test.length; i++ ) { + var li = document.createElement("li"); + li.className = _config.Test[i][0] ? "pass" : "fail"; + li.innerHTML = _config.Test[i][1]; + ol.appendChild( li ); + + _config.stats.all++; + if ( !_config.Test[i][0] ) { + state = "fail"; + bad++; + _config.stats.bad++; + } else good++; + } + + var li = document.createElement("li"); + li.className = state; + + var b = document.createElement("strong"); + b.innerHTML = name + " <b style='color:black;'>(<b class='fail'>" + bad + "</b>, <b class='pass'>" + good + "</b>, " + _config.Test.length + ")</b>"; + b.onclick = function(){ + var n = this.nextSibling; + if ( jQuery.css( n, "display" ) == "none" ) + n.style.display = "block"; + else + n.style.display = "none"; + }; + $(b).dblclick(function(event) { + var target = jQuery(event.target).filter("strong").clone(); + if ( target.length ) { + target.children().remove(); + location.href = location.href.match(/^(.+?)(\?.*)?$/)[1] + "?" + encodeURIComponent($.trim(target.text())); + } + }); + li.appendChild( b ); + li.appendChild( ol ); + + document.getElementById("tests").appendChild( li ); + }); +} + +// call on start of module test to prepend name to all tests +function module(moduleName) { + _config.currentModule = moduleName; +} + +/** + * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + */ +function expect(asserts) { + _config.expected = asserts; +} + +/** + * Resets the test setup. Useful for tests that modify the DOM. + */ +function reset() { + document.getElementById('main').innerHTML = _config.fixture; +} + +/** + * Asserts true. + * @example ok( $("a").size() > 5, "There must be at least 5 anchors" ); + */ +function ok(a, msg) { + _config.Test.push( [ !!a, msg ] ); +} + +/** + * Asserts that two arrays are the same + */ +function isSet(a, b, msg) { + var ret = true; + if ( a && b && a.length != undefined && a.length == b.length ) { + for ( var i = 0; i < a.length; i++ ) + if ( a[i] != b[i] ) + ret = false; + } else + ret = false; + if ( !ret ) + _config.Test.push( [ ret, msg + " expected: " + serialArray(b) + " result: " + serialArray(a) ] ); + else + _config.Test.push( [ ret, msg ] ); +} + +/** + * Asserts that two objects are equivalent + */ +function isObj(a, b, msg) { + var ret = true; + + if ( a && b ) { + for ( var i in a ) + if ( a[i] != b[i] ) + ret = false; + + for ( i in b ) + if ( a[i] != b[i] ) + ret = false; + } else + ret = false; + + _config.Test.push( [ ret, msg ] ); +} + +function serialArray( a ) { + var r = []; + + if ( a && a.length ) + for ( var i = 0; i < a.length; i++ ) { + var str = a[i].nodeName; + if ( str ) { + str = str.toLowerCase(); + if ( a[i].id ) + str += "#" + a[i].id; + } else + str = a[i]; + r.push( str ); + } + + return "[ " + r.join(", ") + " ]" +} + +/** + * Returns an array of elements with the given IDs, eg. + * @example q("main", "foo", "bar") + * @result [<div id="main">, <span id="foo">, <input id="bar">] + */ +function q() { + var r = []; + for ( var i = 0; i < arguments.length; i++ ) + r.push( document.getElementById( arguments[i] ) ); + return r; +} + +/** + * Asserts that a select matches the given IDs + * @example t("Check for something", "//[a]", ["foo", "baar"]); + * @result returns true if "//[a]" return two elements with the IDs 'foo' and 'baar' + */ +function t(a,b,c) { + var f = jQuery(b); + var s = ""; + for ( var i = 0; i < f.length; i++ ) + s += (s && ",") + '"' + f[i].id + '"'; + isSet(f, q.apply(q,c), a + " (" + b + ")"); +} + +/** + * Add random number to url to stop IE from caching + * + * @example url("data/test.html") + * @result "data/test.html?10538358428943" + * + * @example url("data/test.php?foo=bar") + * @result "data/test.php?foo=bar&10538358345554" + */ +function url(value) { + return value + (/\?/.test(value) ? "&" : "?") + new Date().getTime() + "" + parseInt(Math.random()*100000); +} + +/** + * Checks that the first two arguments are equal, with an optional message. + * Prints out both expected and actual values on failure. + * + * Prefered to ok( expected == actual, message ) + * + * @example equals( "Expected 2 characters.", v.formatMessage("Expected {0} characters.", 2) ); + * + * @param Object expected + * @param Object actual + * @param String message (optional) + */ +function equals(actual, expected, message) { + var result = expected == actual; + message = message || (result ? "okay" : "failed"); + _config.Test.push( [ result, result ? message + ": " + expected : message + " expected: " + expected + " actual: " + actual ] ); +} + +/** + * Trigger an event on an element. + * + * @example triggerEvent( document.body, "click" ); + * + * @param DOMElement elem + * @param String type + */ +function triggerEvent( elem, type, event ) { + if ( jQuery.browser.mozilla || jQuery.browser.opera ) { + event = document.createEvent("MouseEvents"); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + elem.dispatchEvent( event ); + } else if ( jQuery.browser.msie ) { + elem.fireEvent("on"+type); + } +} diff --git a/test/data/testsuite.css b/test/data/testsuite.css new file mode 100644 index 000000000..b9d487bc4 --- /dev/null +++ b/test/data/testsuite.css @@ -0,0 +1,113 @@ +body, div, h1 { font-family: 'trebuchet ms', verdana, arial; margin: 0; padding: 0 } +body {font-size: 10pt; } +h1 { padding: 15px; font-size: large; background-color: #06b; color: white; } +h2 { padding: 10px; background-color: #eee; color: black; margin: 0; font-size: small; font-weight: normal } + +.pass { color: green; } +.fail { color: red; } +p.result { margin-left: 1em; } + +#banner { height: 2em; border-bottom: 1px solid white; } +h2.pass { background-color: green; } +h2.fail { background-color: red; } + +div#fx-tests h4 { + background: red; +} + +div#fx-tests h4.pass { + background: green; +} + +div#fx-tests div.box { + background: red url(data/cow.jpg) no-repeat; + overflow: hidden; + border: 2px solid #000; +} + +div#fx-tests div.overflow { + overflow: visible; +} + +div.inline { + display: inline; +} + +div.autoheight { + height: auto; +} + +div.autowidth { + width: auto; +} + +div.autoopacity { + opacity: auto; +} + +div.largewidth { + width: 100px; +} + +div.largeheight { + height: 100px; +} + +div.largeopacity { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); +} + +div.medwidth { + width: 50px; +} + +div.medheight { + height: 50px; +} + +div.medopacity { + opacity: 0.5; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50); +} + +div.nowidth { + width: 0px; +} + +div.noheight { + height: 0px; +} + +div.noopacity { + opacity: 0; + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0); +} + +div.hidden { + display: none; +} + +div#fx-tests div.widewidth { + background-repeat: repeat-x; +} + +div#fx-tests div.wideheight { + background-repeat: repeat-y; +} + +div#fx-tests div.widewidth.wideheight { + background-repeat: repeat; +} + +div#fx-tests div.noback { + background-image: none; +} + +div.chain, div.chain div { width: 100px; height: 20px; position: relative; float: left; } +div.chain div { position: absolute; top: 0px; left: 0px; } + +div.chain.test { background: red; } +div.chain.test div { background: green; } + +div.chain.out { background: green; } +div.chain.out div { background: red; display: none; } diff --git a/test/data/text.php b/test/data/text.php new file mode 100644 index 000000000..c06ef4b8e --- /dev/null +++ b/test/data/text.php @@ -0,0 +1,12 @@ +Lorem ipsum dolor sit amet
+consectetuer adipiscing elit
+Sed lorem leo
+lorem leo consectetuer adipiscing elit
+Sed lorem leo
+rhoncus sit amet
+elementum at
+bibendum at, eros
+Cras at mi et tortor egestas vestibulum
+sed Cras at mi vestibulum
+Phasellus sed felis sit amet
+orci dapibus semper.
diff --git a/test/data/with_fries.xml b/test/data/with_fries.xml new file mode 100644 index 000000000..88e0e49d5 --- /dev/null +++ b/test/data/with_fries.xml @@ -0,0 +1,25 @@ +<?xml version='1.0' encoding='UTF-8'?> +<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <soap:Body> + <jsconf xmlns="http://www.example.com/ns1"> + <response xmlns:ab="http://www.example.com/ns2"> + <meta> + <component id="seite1"> + <properties xmlns:cd="http://www.example.com/ns3"> + <property name="prop1"> + <thing /> + <value>1</value> + </property> + <property name="prop2"> + <thing att="something" /> + </property> + <foo_bar>foo</foo_bar> + </properties> + </component> + </meta> + </response> + </jsconf> + </soap:Body> +</soap:Envelope> |