max-frame-count.js (1327B)
1 // Test that we can capture only the N newest frames. 2 // This is the maxFrameCount argument to JS::CaptureCurrentStack. 3 4 load(libdir + 'asserts.js'); 5 6 function recur(n, limit) { 7 if (n > 0) 8 return recur(n - 1, limit); 9 return saveStack(limit); 10 } 11 12 // Negative values are rejected. 13 assertThrowsInstanceOf(() => saveStack(-1), TypeError); 14 15 // Zero means 'no limit'. 16 assertEq(saveStack(0).parent, null); 17 assertEq(recur(0, 0).parent !== null, true); 18 assertEq(recur(0, 0).parent.parent, null); 19 assertEq(recur(1, 0).parent.parent.parent, null); 20 assertEq(recur(2, 0).parent.parent.parent.parent, null); 21 assertEq(recur(3, 0).parent.parent.parent.parent.parent, null); 22 23 // limit of 1 24 assertEq(saveStack(1).parent, null); 25 assertEq(recur(0, 1).parent, null); 26 assertEq(recur(0, 1).parent, null); 27 assertEq(recur(1, 1).parent, null); 28 assertEq(recur(2, 1).parent, null); 29 30 // limit of 2 31 assertEq(saveStack(2).parent, null); 32 assertEq(recur(0, 2).parent !== null, true); 33 assertEq(recur(0, 2).parent.parent, null); 34 assertEq(recur(1, 2).parent.parent, null); 35 assertEq(recur(2, 2).parent.parent, null); 36 37 // limit of 3 38 assertEq(saveStack(3).parent, null); 39 assertEq(recur(0, 3).parent !== null, true); 40 assertEq(recur(0, 3).parent.parent, null); 41 assertEq(recur(1, 3).parent.parent.parent, null); 42 assertEq(recur(2, 3).parent.parent.parent, null);