| | 1 | [[PageOutline]] |
| | 2 | = Writing good test cases = |
| | 3 | |
| | 4 | ''Should have some tips here about how to make a test which is easy to know when it succeeds, things like a 100x100 green block, just printing SUCCESS or FAILURE, and using `dumpAsText()`.'' |
| | 5 | |
| | 6 | ''Should remind folks to write tests that work both in Safari and in DRT. The trick is to test for the existence of a special object like layoutTestController before using it. An example:'' |
| | 7 | {{{ |
| | 8 | if (window.layoutTestController) |
| | 9 | layoutTestController.dumpAsText() |
| | 10 | }}} |
| | 11 | |
| | 12 | = DumpRenderTree JavaScript Environment = |
| | 13 | |
| | 14 | DumpRenderTree exposes a number of additional JavaScript objects in the testing environment. |
| | 15 | |
| | 16 | These can be used to perform additional debugging-related tasks. |
| | 17 | |
| | 18 | == `window.layoutTestController` == |
| | 19 | |
| | 20 | === `dumpAsText()` === |
| | 21 | |
| | 22 | Call this method to make your test output plain text instead of a render tree. This is useful if your test prints messages rather than testing fancy layout. For an example of how to print to a console in a test, check out `LayoutTests/fast/dom/ Element/attribute-uppercase.html`. |
| | 23 | |
| | 24 | === `waitUntilDone()` and `notifyDone()` === |
| | 25 | |
| | 26 | By default, DumpRenderTree dumps each test file immediately after the document has loaded and the load event handlers have executed. If your test needs to do further processing after loading -- for example, waiting for a timer to fire -- call `layoutTestController.waitUntilDone()` to tell DumpRenderTree to delay its dump, and then call `notifyDone` when your results are ready. |
| | 27 | |
| | 28 | == `window.eventSender` == |
| | 29 | |
| | 30 | === `mouseMoveTo(x, y)` === |
| | 31 | |
| | 32 | Used to change the current mouse position. |
| | 33 | |
| | 34 | === `leapForward(ms)` === |
| | 35 | |
| | 36 | Jumps the current event time forward by a specified number of miliseconds. |
| | 37 | |
| | 38 | === `mouseDown()` === |
| | 39 | |
| | 40 | Sends a mouseDown event to the WebView at the current mouse position. |
| | 41 | |
| | 42 | === `mouseUp()` === |
| | 43 | |
| | 44 | Sends a mouseUp event to the WebView at the current mouse position. |
| | 45 | |
| | 46 | === `mouseClick()` === |
| | 47 | |
| | 48 | Call `mouseClick` only if you need to simulate a click in a platform widget. Otherwise, use `mouseDown` and `mouseUp`. |
| | 49 | |
| | 50 | == `window.textInputController` == |
| | 51 | |
| | 52 | ''Needs to be filled in.'' |
| | 53 | |
| | 54 | === `insertText` === |
| | 55 | |
| | 56 | === `doCommand` === |
| | 57 | |
| | 58 | === `setMarkedText` === |
| | 59 | |
| | 60 | === `substringFromRange` === |
| | 61 | |
| | 62 | === `attributedSubstringFromRange` === |
| | 63 | |
| | 64 | === `firstRectForCharacterRange` === |
| | 65 | |
| | 66 | === `characterIndexForPoint` === |
| | 67 | |
| | 68 | === `makeAttributedString` === |
| | 69 | |
| | 70 | == `window.appleScriptController` == |
| | 71 | |
| | 72 | === `doJavaScript()` === |
| | 73 | |
| | 74 | ''Needs to be filled in.'' |
| | 75 | |
| | 76 | == `window.navigationController` == |
| | 77 | |
| | 78 | '''The navigation controller is currently broken.''' ''Need to add a bug number.'' |
| | 79 | |
| | 80 | === `evalAfterBackForwardNavigation(script [, destination])` === |
| | 81 | |
| | 82 | To test a bug having to do with the loader or the back/forward cache, call this method to run a script after executing a back/forward navigation. The first argument is the script to run, and the second argument is the page to load during the navigation. The second argument is optional. It defaults to `about:blank`. |
| | 83 | |
| | 84 | = Writing tests which require network access = |
| | 85 | |
| | 86 | `run-webkit-tests` (the script which runs DumpRenderTree) also launches a local Apache daemon (`httpd`) to allow real local-only network based testing (for incremental loads, XMLHttpRequest, etc.) ap needs to document how best to use this. |