| <!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> |