| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Recursive value</title> | |
| <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="support.js"></script> | |
| <script> | |
| function recursive_value(desc, value) { | |
| var db, t = async_test(document.title + " - " + desc); | |
| createdb(t).onupgradeneeded = function(e) { | |
| db = e.target.result | |
| db.createObjectStore("store") | |
| .add(value, 1); | |
| e.target.onsuccess = t.step_func(function(e) { | |
| db.transaction('store') | |
| .objectStore('store') | |
| .get(1) | |
| .onsuccess = t.step_func(function(e) | |
| { | |
| try | |
| { | |
| var fresh_value = JSON.stringify(value); | |
| assert_unreached("Testcase is written wrongly, must supply something recursive (that JSON won't stringify)."); | |
| } | |
| catch (e) | |
| { | |
| if (e.name == 'TypeError') | |
| { | |
| try | |
| { | |
| JSON.stringify(e.target.result); | |
| assert_unreached("Expected a non-JSON-serializable value back, didn't get that."); | |
| } | |
| catch (e) | |
| { | |
| t.done(); | |
| return; | |
| } | |
| } | |
| else | |
| throw e; | |
| } | |
| }); | |
| }); | |
| }; | |
| } | |
| var recursive = []; | |
| recursive.push(recursive); | |
| recursive_value('array directly contains self', recursive); | |
| var recursive2 = []; | |
| recursive2.push([recursive2]); | |
| recursive_value('array indirectly contains self', recursive2); | |
| var recursive3 = [recursive]; | |
| recursive_value('array member contains self', recursive3); | |
| </script> | |
| <div id="log"></div> |