| |
| <p><b>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=30212">Bug 30212</a> - Each JS execution in console adds extra item into "scripts" combo</b> |
| |
| <p>The following manual test creates functions via <tt>eval()</tt> and the |
| <tt>Function()</tt> constructor, some functions are named using the |
| <code>//@sourceURL=</code> directive, some aren't. Some contain |
| <tt>debugger</tt> commands, some don't. |
| |
| <p>The functions named <tt>f_named_X</tt> are 'named' via the |
| <code>//@sourceURL=</code> directive, the ones named <tt>f_unnamed_X</tt> |
| are not. The 'named' functions should show up in the Scripts select element used |
| to select a resource/script to view, the 'unnamed' ones should not. |
| |
| <ul> |
| <li><p>open this page with Web Inspector |
| <li><p>switch to the Scripts panel, enabling debug if required |
| <li><p>the available scripts in the select element should be: |
| <ul> |
| <li>(program): f_named_1.eval |
| <li>(program): f_named_2.eval |
| <li>(program): f_named_3.eval |
| <li>hidden-evals.html |
| </ul> |
| <li><p>click this button: <input id=button type=button value="click me"> |
| <li><p>debugger should stop in the <code>clickHandler</code> function |
| <li><p>at this point, start stepping <b>into</b> the code |
| <li><p>you should be able to step into functions <code>f_unnamed_1()</code> |
| and <code>f_unnamed_2()</code>. There are no resource/scripts in the |
| select element that contain these functions, until you actually are paused |
| in them. At that point, entries for these functions will be in the select element, |
| named: "(program)". After pausing in both functions, there will be two "(program)" |
| entries. |
| <li><p>you should be able to use the next/prev buttons (to the left of the select element) |
| to switch to other resources/scripts that have been opened, including the ones |
| containing these functions |
| <li><p>you should be able to click on the functions that exist in the 'hidden' |
| resources from the Call Stack, and be shown the source; click around the |
| stack trace entries to verify |
| <li><p>rather than stepping into the <code>f_named_3()</code> call, press the |
| resume button |
| <li><p>the debugger should stop in <code>f_named_3()</code> because of the |
| <code>debugger</code> command |
| <li><p>rather than stepping into the <code>f_unnamed_3()</code> call, press the |
| resume button |
| <li><p>the debugger should stop in <code>f_unnamed_3()</code> because of the |
| <code>debugger</code> command. At this point, a third "(program)" entry for |
| this function is added to the select element. |
| </ul> |
| |
| <script> |
| |
| function doNothing() { /* allows multi-line functions, easier to debug */ }; |
| |
| eval([ |
| "function f_named_1() {", |
| " doNothing();", |
| " return 'named_1';", |
| "}", |
| "//@sourceURL=f_named_1.eval" |
| ].join("\n")); |
| |
| eval([ |
| "function f_unnamed_1() {", |
| " doNothing();", |
| " return 'unnamed_1';", |
| "}" |
| ].join("\n")); |
| |
| f_named_2 = Function([ |
| "", |
| " doNothing();", |
| " return 'named_2';", |
| "//@sourceURL=f_named_2.eval" |
| ].join("\n")); |
| |
| f_unnamed_2 = Function([ |
| "", |
| " doNothing();", |
| " return 'unnamed_2';" |
| ].join("\n")); |
| |
| f_named_3 = Function([ |
| "", |
| " debugger;", |
| " doNothing();", |
| " return 'named_3';", |
| "//@sourceURL=f_named_3.eval" |
| ].join("\n")); |
| |
| f_unnamed_3 = Function([ |
| "", |
| " debugger;", |
| " doNothing();", |
| " return 'unnamed_3';" |
| ].join("\n")); |
| |
| var button = document.getElementById("button"); |
| |
| button.addEventListener("click", clickHandler, false); |
| |
| function clickHandler() { |
| debugger; |
| f_named_1(); |
| f_unnamed_1(); |
| f_named_2(); |
| f_unnamed_2(); |
| |
| // press "resume" at this point |
| console.log("press resume before calling f_named_3()"); |
| f_named_3(); |
| |
| // press "resume" at this point |
| console.log("press resume before calling f_unnamed_3()"); |
| f_unnamed_3(); |
| } |
| |
| </script> |
| <!-- End --> |