Chromium Code Reviews| Index: LayoutTests/fast/canvas/canvas-lose-restore-googol-size.html |
| diff --git a/LayoutTests/fast/forms/formmethod-attribute-input-html.html b/LayoutTests/fast/canvas/canvas-lose-restore-googol-size.html |
| similarity index 12% |
| copy from LayoutTests/fast/forms/formmethod-attribute-input-html.html |
| copy to LayoutTests/fast/canvas/canvas-lose-restore-googol-size.html |
| index bb44664a46215ee8ba405b8280a85413e0ab8e8a..175e5db56a28f327da68006a67a1573e7b112ed7 100644 |
| --- a/LayoutTests/fast/forms/formmethod-attribute-input-html.html |
| +++ b/LayoutTests/fast/canvas/canvas-lose-restore-googol-size.html |
| @@ -4,31 +4,67 @@ |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body> |
| -<p id="description"></p> |
| -<div id="console"></div> |
| -<form method="get" action="?"> |
| - <input type="hidden" name="hidden" value="I am hidden" /> |
| - <input id="button" formmethod="post" type="submit" name="button" /> |
| -</form> |
| <script> |
| -description("Test for the formmethod attribute in input tags."); |
| +description("Tests to ensure correct behaviour of canvas loss and restoration when size is extremely large then, restored to a reasonable value."); |
| + |
| if (window.testRunner) { |
| + testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| -var button = document.getElementById('button'); |
| +var canvas = document.createElement('canvas') |
| +canvas.addEventListener('contextlost', contextLost); |
| +canvas.addEventListener('contextrestored', contextRestored); |
| +var ctx = canvas.getContext('2d'); |
| +var lostEventHasFired = false; |
| +verifyContextLost(false); |
| + |
| +// WebIDL defines width and height as int. 2147483647 is int max. |
|
Stephen White
2014/03/25 23:25:04
Nit: but the test is googol-sized, not int max?
|
| +var googol = Math.pow(10,100); |
| +canvas.width = googol; |
| +canvas.height = googol; |
| +verifyContextLost(true); |
| +canvas.width = googol; |
| +verifyContextLost(true); |
| +canvas.width = 100; |
| +canvas.height = 100; |
| +verifyContextLost(true); // Restoration is async. |
| + |
| +// Restore a sane dimension |
| -if (document.URL.substring(0, 4) == "file") { |
| - if (document.URL.indexOf('?') == -1) { |
| - button.click(); |
| +function verifyContextLost(shouldBeLost) { |
| + // Verify context loss experimentally as well as isContextLost() |
| + ctx.fillStyle = '#0f0'; |
| + ctx.fillRect(0, 0, 1, 1); |
| + contextLostTest = ctx.getImageData(0, 0, 1, 1).data[1] == 0; |
| + if (shouldBeLost) { |
| + shouldBeTrue('contextLostTest'); |
| + shouldBeTrue('ctx.isContextLost()'); |
| } else { |
| - if (document.URL.substring(document.URL.indexOf('?') + 1, document.URL.length) == "") |
| - testPassed('The formmethod attribute was successfully used'); |
| - else |
| - testFailed('The formmethod attribute was not used'); |
| + shouldBeFalse('contextLostTest'); |
| + shouldBeFalse('ctx.isContextLost()'); |
| + } |
| +} |
| - if (window.testRunner) |
| - testRunner.notifyDone(); |
| +function contextLost() { |
| + if (lostEventHasFired) { |
| + testFailed('Context lost event was dispatched more than once.'); |
| + } else { |
| + testPassed('Graphics context lost event dispatched.'); |
| + } |
| + lostEventHasFired = true; |
| + verifyContextLost(true); |
| +} |
| + |
| +function contextRestored() { |
| + if (lostEventHasFired) { |
| + testPassed('Context restored event dispatched after context lost.'); |
| + } else { |
| + testFailed('Context restored event was dispatched before a context lost event.'); |
| + } |
| + verifyContextLost(false); |
| + if (window.testRunner) { |
| + testRunner.notifyDone(); |
| } |
| } |
| </script> |