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.'"); |
+ } |