| Index: test/webkit/fast/js/deep-recursion-test.js
|
| diff --git a/test/webkit/stack-overflow-catch.js b/test/webkit/fast/js/deep-recursion-test.js
|
| similarity index 53%
|
| copy from test/webkit/stack-overflow-catch.js
|
| copy to test/webkit/fast/js/deep-recursion-test.js
|
| index 440148eb659f0792d0df86620a83630aa3253108..59df2f1c9ad72b4fc13dd6822299e1f4558b32d1 100644
|
| --- a/test/webkit/stack-overflow-catch.js
|
| +++ b/test/webkit/fast/js/deep-recursion-test.js
|
| @@ -21,56 +21,58 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -description('Test that when the stack overflows, the exception goes to the last frame before the overflow');
|
| +description("This test how deep we can recurse, and that we get an exception when we do, as opposed to a stack overflow.");
|
|
|
| -var level = 0;
|
| -var stackLevel = 0;
|
| -var gotWrongCatch = false;
|
| -
|
| -function test1()
|
| -{
|
| - var myLevel = level;
|
| - var dummy;
|
| + function simpleRecursion(depth) {
|
| + if (depth)
|
| + simpleRecursion(depth - 1);
|
| + }
|
|
|
| try {
|
| - level = level + 1;
|
| - // Dummy code to make this funciton different from test2()
|
| - dummy = level * level + 1;
|
| - if (dummy == 0)
|
| - debug('Should never get here!!!!');
|
| - } catch(err) {
|
| - gotWrongCatch = true;
|
| + simpleRecursion(17472);
|
| + } catch (ex) {
|
| + debug("FAIL: " + ex);
|
| }
|
|
|
| try {
|
| - test2();
|
| - } catch(err) {
|
| - stackLevel = myLevel;
|
| + simpleRecursion(10000000);
|
| + } catch (ex) {
|
| + var msg = String(eval(ex));
|
| + shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
|
| }
|
| -}
|
|
|
| -function test2()
|
| -{
|
| - var myLevel = level;
|
| + try {
|
| + simpleRecursion(1000000000);
|
| + } catch (ex) {
|
| + var msg = String(eval(ex));
|
| + shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
|
| + }
|
|
|
| - // Dummy code to make this funciton different from test1()
|
| - if (gotWrongCatch)
|
| - debug('Should never get here!!!!');
|
| + var tooFewArgsDepth = 0;
|
|
|
| - try {
|
| - level = level + 1;
|
| - } catch(err) {
|
| - gotWrongCatch = true;
|
| + function tooFewArgsRecursion(a) {
|
| + if (tooFewArgsDepth) {
|
| + tooFewArgsDepth--;
|
| + tooFewArgsRecursion();
|
| + }
|
| }
|
|
|
| try {
|
| - test1();
|
| - } catch(err) {
|
| - stackLevel = myLevel;
|
| + tooFewArgsDepth = 10000000;
|
| + tooFewArgsRecursion();
|
| + } catch (ex) {
|
| + var msg = String(eval(ex));
|
| + shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
|
| }
|
| -}
|
|
|
| -test1();
|
| + function tooManyArgsRecursion(depth) {
|
| + if (depth)
|
| + tooManyArgsRecursion(depth - 1, 1);
|
| + }
|
|
|
| -shouldBeFalse("gotWrongCatch");
|
| -shouldBe("(stackLevel)", "(level - 1)");
|
| + try {
|
| + tooManyArgsRecursion(10000000, 1);
|
| + } catch (ex) {
|
| + var msg = String(eval(ex));
|
| + shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
|
| + }
|
|
|