Index: tests/prebuilt/x64/srpc_shm.html |
=================================================================== |
--- tests/prebuilt/x64/srpc_shm.html (revision 4988) |
+++ tests/prebuilt/x64/srpc_shm.html (working copy) |
@@ -1,765 +0,0 @@ |
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
-<html> |
- <!-- Copyright 2009 Google Inc. All rights reserved. --> |
- <head> |
- <title> SRPC Shared Memory API Test </title> |
- <META HTTP-EQUIV="Pragma" CONTENT="no-cache" /> |
- <META HTTP-EQUIV="Expires" CONTENT="-1" /> |
- <style type="text/css"> |
- td.notrun { background-color: skyblue } |
- td.pass { background-color: lime } |
- td.fail { background-color: red } |
- </style> |
- <script type="application/x-javascript"> |
- //<![CDATA[ |
-var SetTestResult = function(element_id, result) { |
- var element = document.getElementById(element_id); |
- element.className = result; |
-} |
- |
-// The NaCl module. Used to produce handles and for __shmFactory invocations. |
-var server; |
-// All shared memory regions will have this size. |
-var shm_size = 65536; |
-// Handle to a shared memory object returned by a NaCl module |
-var nacl_shm_handle; |
-// Shared memory object resulting from mapping a handle from a NaCl module. |
-var nacl_shm; |
-// A mapped shared memory object created by the __shmFactory method. |
-var factory_shm; |
-// The epitome of a test string. |
-var test_str = 'Hello, world.'; |
-// The test string's length. |
-var str_len = test_str.length; |
-// The count of failing tests. Set from the queue length, and decremented |
-// whenever a test passes. |
-var failing_count; |
- |
-// The queue of small tests. |
-var testQueue = [ ]; |
-var appendTest = function(test_descr) { |
- testQueue[testQueue.length] = test_descr; |
-} |
- |
-var expectPass = function(element, has_return, fp) { |
- appendTest(new Array('pass', element, has_return, fp)); |
-} |
- |
-var expectFail = function(element, fp) { |
- appendTest(new Array('fail', element, fp)); |
-} |
- |
-var SharedMemoryFactory = function() { |
- // Test the creation of shared memory objects. |
- // Attempt to create with the wrong number of parameters. |
- expectFail('factory_too_few', |
- function() { |
- return server.__shmFactory(); |
- }); |
- expectFail('factory_too_many', |
- function() { |
- return server.__shmFactory(shm_size, 'extra'); |
- }); |
- // Attempt to create a shared memory region with size of invalid type. |
- expectFail('factory_size_null', |
- function() { |
- return server.__shmFactory(undefined); |
- }); |
- expectFail('factory_size_string', |
- function() { |
- return server.__shmFactory('string'); |
- }); |
- expectFail('factory_size_object', |
- function() { |
- return server.__shmFactory(new Array(10)); |
- }); |
- // Attempt to create a shared memory region with an invalid size. |
- expectFail('factory_size_invalid', |
- function() { |
- return server.__shmFactory(-1); |
- }); |
- // Attempt to create a shared memory region with a valid size. |
- expectPass('factory_conforming', |
- true, |
- function() { |
- return server.__shmFactory(shm_size); |
- }); |
-} |
- |
-var SharedMemoryMaps = function() { |
- // Test the map method of a handle object. |
- // Get a handle to an invalid shared memory object from a NaCl module. |
- expectPass('map_invalid', |
- true, |
- function() { |
- return server.get_invalid_handle(); |
- }); |
- // Attempt to map with the wrong number of parameters. |
- expectFail('map_too_many', |
- function() { |
- nacl_shm_handle.map(1); |
- }); |
- // Attempt to map with the correct number of parameters. |
- expectPass('map_valid', |
- true, |
- function() { |
- return nacl_shm_handle.map(); |
- }); |
- // Attempt to write to a negative offset. |
- expectFail('map_offset_neg', |
- function() { |
- nacl_shm.write(-1, str_len, test_str); |
- }); |
- // Attempt to write to an offset larger than the region size. |
- expectFail('map_offset_big', |
- function() { |
- nacl_shm.write(shm_size, str_len, test_str); |
- }); |
- // Attempt to write with a negative length. |
- expectFail('map_length_neg', |
- function() { |
- nacl_shm.write(0, -1, test_str); |
- }); |
- // Attempt to write with a length larger than the region size. |
- expectFail('map_length_big', |
- function() { |
- nacl_shm.write(0, str_len + 1, test_str); |
- }); |
- // Attempt to write to a valid offset. |
- expectPass('map_conforming', false, |
- function() { |
- nacl_shm.write(0, str_len, test_str); |
- }); |
-} |
- |
-var SharedMemoryWrites = function() { |
- // Test the write method. |
- // Attempt to write with the wrong number of parameters. |
- expectFail('write_too_few', |
- function() { |
- factory_shm.write(0, str_len); |
- }); |
- expectFail('write_too_many', |
- function() { |
- factory_shm.write(0, str_len, test_str, 'extra'); |
- }); |
- // Attempt to write with a badly typed offset parameter. |
- expectFail('write_offset_null', |
- function() { |
- factory_shm.write(undefined, str_len, test_str); |
- }); |
- expectFail('write_offset_string', |
- function() { |
- factory_shm.write('string', str_len, test_str); |
- }); |
- expectFail('write_offset_object', |
- function() { |
- factory_shm.write(new Array(10), str_len, test_str); |
- }); |
- // Attempt to write to a negative offset. |
- expectFail('write_offset_neg', |
- function() { |
- factory_shm.write(-1, str_len, test_str); |
- }); |
- // Attempt to write to an offset larger than the region size. |
- expectFail('write_offset_big', |
- function() { |
- factory_shm.write(shm_size + 1, str_len, test_str); |
- }); |
- // Attempt to write with a badly typed length parameter. |
- expectFail('write_length_null', |
- function() { |
- factory_shm.write(0, undefined, test_str); |
- }); |
- expectFail('write_length_string', |
- function() { |
- factory_shm.write(0, 'string', test_str); |
- }); |
- expectFail('write_length_object', |
- function() { |
- factory_shm.write(0, new Array(10), test_str); |
- }); |
- // Attempt to write with a negative length. |
- expectFail('write_length_neg', |
- function() { |
- factory_shm.write(0, -1, test_str); |
- }); |
- // Attempt to write with a length larger than the region size. |
- expectFail('write_length_big', |
- function() { |
- factory_shm.write(0, shm_size + 1, test_str); |
- }); |
- // Attempt to write with a badly typed string parameter. |
- expectFail('write_string_null', |
- function() { |
- factory_shm.write(0, str_len, undefined); |
- }); |
- expectFail('write_string_integer', |
- function() { |
- factory_shm.write(0, str_len, 10); |
- }); |
- expectFail('write_string_object', |
- function() { |
- factory_shm.write(0, str_len, new Array(10)); |
- }); |
- // Attempt to write overlapping the end of the region. |
- expectFail('write_overlap', |
- function() { |
- factory_shm.write(shm_size - str_len + 1, str_len, test_str); |
- }); |
- // Attempt to write with string.length != length. |
- expectFail('write_length_mismatch', |
- function() { |
- factory_shm.write(0, str_len + 1, test_str); |
- }); |
- // Attempt a valid write. This should pass. |
- expectPass('write_conforming', |
- false, |
- function() { |
- factory_shm.write(0, str_len, test_str); |
- }); |
-} |
- |
-var SharedMemoryReads = function() { |
- // Test the read method. |
- // Attempt to read with the wrong number of parameters. |
- expectFail('read_too_few', |
- function() { |
- return factory_shm.read(0); |
- }); |
- expectFail('read_too_many', |
- function() { |
- return factory_shm.read(0, str_len, 'extra'); |
- }); |
- // Attempt to read with a badly typed offset parameter. |
- expectFail('read_offset_null', |
- function() { |
- return factory_shm.read(undefined, str_len); |
- }); |
- expectFail('read_offset_string', |
- function() { |
- return factory_shm.read('string', str_len); |
- }); |
- expectFail('read_offset_object', |
- function() { |
- return factory_shm.read(new Array(10), str_len); |
- }); |
- // Attempt to read from a negative offset. |
- expectFail('read_offset_neg', |
- function() { |
- return factory_shm.read(-1, str_len); |
- }); |
- // Attempt to read from an offset larger than the region size. |
- expectFail('read_offset_big', |
- function() { |
- return factory_shm.read(shm_size + 1, str_len); |
- }); |
- // Attempt to read with a badly typed length parameter. |
- expectFail('read_length_null', |
- function() { |
- return factory_shm.read(0, undefined); |
- }); |
- expectFail('read_length_string', |
- function() { |
- return factory_shm.read(0, 'string'); |
- }); |
- expectFail('read_length_object', |
- function() { |
- return factory_shm.read(0, new Array(10)); |
- }); |
- // Attempt to read with a negative length. |
- expectFail('read_length_neg', |
- function() { |
- return factory_shm.read(0, -1); |
- }); |
- // Attempt to read with a length larger than the region size. |
- expectFail('read_length_big', |
- function() { |
- return factory_shm.read(0, shm_size + 1); |
- }); |
- // Attempt to read overlapping the end of the region. |
- expectFail('read_overlap', |
- function() { |
- return factory_shm.read(shm_size - str_len + 1, str_len); |
- }); |
- // Attempt a valid read, and ensure return is correct. This should pass. |
- expectPass('read_conforming', |
- true, |
- function() { |
- return factory_shm.read(0, str_len); |
- }); |
-} |
- |
-// The test run functions. |
-var testExpectedPass = function(element, has_return, fp) { |
- var result = undefined; |
- try { |
- result = fp(); |
- if (has_return && (undefined == result)) { |
- SetTestResult(element, 'fail'); |
- } else { |
- SetTestResult(element, 'pass'); |
- --failing_count; |
- } |
- } catch (string) { |
- SetTestResult(element, 'fail'); |
- } |
-} |
- |
-var testExpectedFail = function(element, fp) { |
- var result = undefined; |
- try { |
- result = fp(); |
- SetTestResult(element, 'fail'); |
- } catch (string) { |
- if (undefined == result) { |
- SetTestResult(element, 'pass'); |
- --failing_count; |
- } else { |
- SetTestResult(element, 'fail'); |
- } |
- } |
-} |
- |
-var RunAllTests = function() { |
- var i; |
- var len = testQueue.length; |
- // All tests are considered failure until they have run successfully. |
- // This catches runs that end prematurely. |
- failing_count = len; |
- for (i = 0; i < len; ++i) { |
- var test_descr = testQueue[i]; |
- if ('pass' == test_descr[0]) { |
- testExpectedPass(test_descr[1], test_descr[2], test_descr[3]); |
- } else { |
- testExpectedFail(test_descr[1], test_descr[2]); |
- } |
- } |
- if (0 == failing_count) { |
- // Set the magic Selenium variable to signal success. |
- document.cookie = 'status=OK'; |
- } |
-} |
- |
-var EnqueueAndRunTests = function() { |
- // Setup -- abort entire test if this fails. |
- try { |
- nacl_shm_handle = server.get_shm_handle(shm_size); |
- nacl_shm = server.get_shm_handle(shm_size).map(); |
- factory_shm = server.__shmFactory(shm_size); |
- } catch (string) { |
- window.alert('Memory Maps test setup failed.'); |
- return; |
- } |
- // Enqueue the tests. |
- SharedMemoryFactory(); |
- SharedMemoryMaps(); |
- SharedMemoryWrites(); |
- SharedMemoryReads(); |
- // Run them all. |
- RunAllTests(); |
-} |
- //]]> |
- </script> |
- </head> |
- <body onload="nacllib.waitForModulesAndRunTests();" |
- onunload="nacllib.cleanUp();" > |
- <h1> SRPC Shared Memory API Test </h1> |
- <table cellspacing=5 cellpadding=5 border=5 summary="Test status table"> |
- <tr> |
- <td> |
- </td> |
- <td> |
- <b> __shmFactory tests </b> |
- </td> |
- <td> |
- <b> handle mapping tests </b> |
- </td> |
- <td> |
- <b> write method tests </b> |
- </td> |
- <td> |
- <b> read method tests </b> |
- </td> |
- </tr> |
- <tr> |
- <td> |
- <b> Argument count tests </b> |
- </td> |
- <td valign=top> |
- <table summary="Factory arugments tests"> |
- <tr> |
- <td id="factory_too_few" class="notrun"> |
- argc: too few |
- </td> |
- </tr> |
- <tr> |
- <td id="factory_too_many" class="notrun"> |
- argc: too many |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td> |
- <table summary="Map arguments test"> |
- <tr> |
- <td id="map_too_many" class="notrun"> |
- argc: too many |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td> |
- <table summary="Write argument tests"> |
- <tr> |
- <td id="write_too_few" class="notrun"> |
- argc: too few |
- </td> |
- </tr> |
- <tr> |
- <td id="write_too_many" class="notrun"> |
- argc: too many |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td> |
- <table summary="Read arguments tests"> |
- <tr> |
- <td id="read_too_few" class="notrun"> |
- argc: too few |
- </td> |
- </tr> |
- <tr> |
- <td id="read_too_many" class="notrun"> |
- argc: too many |
- </td> |
- </tr> |
- </table> |
- </td> |
- </tr> |
- <tr> |
- <td> |
- <b> Argument type tests </b> |
- </td> |
- <td valign=top> |
- <table summary="Factory size tests"> |
- <tr> |
- <td id="factory_size_null" class="notrun"> |
- arg[0]: (size) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="factory_size_string" class="notrun"> |
- arg[0]: (size) string |
- </td> |
- </tr> |
- <tr> |
- <td id="factory_size_object" class="notrun"> |
- arg[0]: (size) object |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- </td> |
- <td valign=top> |
- <table summary="Write offset tests"> |
- <tr> |
- <td id="write_offset_null" class="notrun"> |
- arg[0]: (offset) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="write_offset_string" class="notrun"> |
- arg[0]: (offset) string |
- </td> |
- </tr> |
- <tr> |
- <td id="write_offset_object" class="notrun"> |
- arg[0]: (offset) object |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_null" class="notrun"> |
- arg[1]: (length) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_string" class="notrun"> |
- arg[1]: (length) string |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_object" class="notrun"> |
- arg[1]: (length) object |
- </td> |
- </tr> |
- <tr> |
- <td id="write_string_null" class="notrun"> |
- arg[2]: (string) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="write_string_integer" class="notrun"> |
- arg[2]: (string) integer |
- </td> |
- </tr> |
- <tr> |
- <td id="write_string_object" class="notrun"> |
- arg[2]: (string) object |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Read offset tests"> |
- <tr> |
- <td id="read_offset_null" class="notrun"> |
- arg[0]: (offset) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="read_offset_string" class="notrun"> |
- arg[0]: (offset) string |
- </td> |
- </tr> |
- <tr> |
- <td id="read_offset_object" class="notrun"> |
- arg[0]: (offset) object |
- </td> |
- </tr> |
- <tr> |
- <td id="read_length_null" class="notrun"> |
- arg[1]: (length) undefined |
- </td> |
- </tr> |
- <tr> |
- <td id="read_length_string" class="notrun"> |
- arg[1]: (length) string |
- </td> |
- </tr> |
- <tr> |
- <td id="read_length_object" class="notrun"> |
- arg[1]: (length) object |
- </td> |
- </tr> |
- </table> |
- </td> |
- </tr> |
- |
- <tr> |
- <td> |
- <b> Argument range tests </b> |
- </td> |
- <td valign=top> |
- <table summary="Factory invalid size test"> |
- <tr> |
- <td id="factory_size_invalid" class="notrun"> |
- arg[0]: (size) invalid/negative |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Map invalid offset tests"> |
- <tr> |
- <td id="map_offset_neg" class="notrun"> |
- arg[0]: (offset) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="map_offset_big" class="notrun"> |
- arg[0]: (offset) too big |
- </td> |
- </tr> |
- <tr> |
- <td id="map_length_neg" class="notrun"> |
- arg[1]: (length) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="map_length_big" class="notrun"> |
- arg[1]: (length) too big |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Write invalid offset tests"> |
- <tr> |
- <td id="write_offset_neg" class="notrun"> |
- arg[0]: (offset) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="write_offset_big" class="notrun"> |
- arg[0]: (offset) too big |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_neg" class="notrun"> |
- arg[1]: (length) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_big" class="notrun"> |
- arg[1]: (length) too big |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Read invalid offset tests"> |
- <tr> |
- <td id="read_offset_neg" class="notrun"> |
- arg[0]: (offset) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="read_offset_big" class="notrun"> |
- arg[0]: (offset) too big |
- </td> |
- </tr> |
- <tr> |
- <td id="read_length_neg" class="notrun"> |
- arg[1]: (length) negative |
- </td> |
- </tr> |
- <tr> |
- <td id="read_length_big" class="notrun"> |
- arg[1]: (length) too big |
- </td> |
- </tr> |
- </table> |
- </td> |
- </tr> |
- |
- <tr> |
- <td> |
- <b> Semantic error tests </b> |
- </td> |
- <td> |
- </td> |
- <td valign=top> |
- <table summary="Invalid map test"> |
- <tr> |
- <td id="map_invalid" class="notrun"> |
- NaCl module returns invalid handle |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Write error tests"> |
- <tr> |
- <td id="write_overlap" class="notrun"> |
- Write overlaps end of region |
- </td> |
- </tr> |
- <tr> |
- <td id="write_length_mismatch" class="notrun"> |
- Length disagrees with str.length |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Read error tests"> |
- <tr> |
- <td id="read_overlap" class="notrun"> |
- Read overlaps end of region |
- </td> |
- </tr> |
- </table> |
- </td> |
- </tr> |
- |
- <tr> |
- <td> |
- <b> Expected behavior </b> |
- </td> |
- <td valign=top> |
- <table summary="Factory conforming test"> |
- <tr> |
- <td id="factory_conforming" class="notrun"> |
- Conforming usage |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Map conforming tests"> |
- <tr> |
- <td id="map_valid" class="notrun"> |
- Conforming invocation of map |
- </td> |
- </tr> |
- <tr> |
- <td id="map_conforming" class="notrun"> |
- Conforming write to shared memory |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Write conforming test"> |
- <tr> |
- <td id="write_conforming" class="notrun"> |
- Conforming usage |
- </td> |
- </tr> |
- </table> |
- </td> |
- <td valign=top> |
- <table summary="Read conforming test"> |
- <tr> |
- <td id="read_conforming" class="notrun"> |
- Conforming usage |
- </td> |
- </tr> |
- </table> |
- </td> |
- </tr> |
- </table> |
- |
- <table summary="The color codes used for identifying test outcomes"> |
- <tr> <td align="center"> <em> Legend </em> </td> </tr> |
- <tr> <td align="center" class="notrun"> Test not run </td> </tr> |
- <tr> <td align="center" class="pass"> Test passed </td> </tr> |
- <tr> <td align="center" class="fail"> Test failed </td> </tr> |
- </table> |
- <p> |
- <b> |
- NOTE: Some versions of some WebKit-based browsers do not correctly report |
- JavaScript exceptions raised by NPAPI plugins. This can cause some of |
- the above tests to spuriously report failure. |
- </b> |
- </p> |
- |
- <div id=status>NO-STATUS</div> |
- |
- <embed type="application/x-nacl" id="nacl_server" name="nacl_module" |
- width="0" height="0" src="srpc_shm.nexe" /> |
- |
- <script type="text/javascript" src="nacl_js_lib.js"></script> |
- <script type="text/javascript"> |
- //<![CDATA[ |
- var nacllib = new NaclLib("nacl_module", "status", 500); |
- |
- nacllib.test = function() { |
- server = document.getElementById("nacl_server"); |
- EnqueueAndRunTests(); |
- if (0 == testQueue.length) { |
- return "No tests run."; |
- } else if (0 != failing_count) { |
- return "Tests failed."; |
- } else { |
- return ""; |
- } |
- } |
- //]]> |
- </script> |
- </body> |
-</html> |