| 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. |