Bug 1028418 - Part 7: Tests for caching edge cases; r=shu

This commit is contained in:
Nick Fitzgerald 2015-07-28 13:04:56 -07:00
parent b8d0989a23
commit 0797a7c1e5
2 changed files with 73 additions and 0 deletions

View File

@ -0,0 +1,35 @@
// Test that the SavedFrame caching doesn't get messed up in the presence of
// cross-compartment calls.
const funcSource = "function call(f) { return f(); }";
const g1 = newGlobal();
const g2 = newGlobal();
g1.eval(funcSource);
g2.eval(funcSource);
eval(funcSource);
function doSaveStack() {
return saveStack();
}
const captureStacksAcrossCompartmens = () =>
[this, g1, g2].map(g => g.call(doSaveStack));
(function f0() {
const stacks = [];
for (var i = 0; i < 2; i++)
stacks.push(...captureStacksAcrossCompartmens());
const [s1, s2, s3, s4, s5, s6] = stacks;
assertEq(s1 != s2, true);
assertEq(s2 != s3, true);
assertEq(s3 != s1, true);
assertEq(s1, s4);
assertEq(s2, s5);
assertEq(s3, s6);
}());

View File

@ -0,0 +1,38 @@
// Test that the SavedFrame caching doesn't mess up counts. Specifically, that
// if we capture only the first n frames of a stack, we don't cache that stack
// and return it for when someone else captures another stack and asks for more
// frames than that last time.
function stackLength(stack) {
return stack === null
? 0
: 1 + stackLength(stack.parent);
}
(function f0() {
(function f1() {
(function f2() {
(function f3() {
(function f4() {
(function f5() {
(function f6() {
(function f7() {
(function f8() {
(function f9() {
const s1 = saveStack(3);
const s2 = saveStack(5);
const s3 = saveStack(0 /* no limit */);
assertEq(stackLength(s1), 3);
assertEq(stackLength(s2), 5);
assertEq(stackLength(s3), 11);
}());
}());
}());
}());
}());
}());
}());
}());
}());
}());