<!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="resources/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', 'readonly', {durability: 'relaxed'}) .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>