| <html> | 
 | <head> | 
 | <script src="../http/tests/inspector/inspector-test.js"></script> | 
 | <script src="../http/tests/inspector/console-test.js"></script> | 
 | <script src="../http/tests/inspector/workspace-test.js"></script> | 
 | <script src="../http/tests/inspector/debugger-test.js"></script> | 
 | <script src="resources/example-fileset-for-test.js"></script> | 
 | <script src="editor/editor-test.js"></script> | 
 | <script> | 
 | function test() | 
 | { | 
 |     var panel = WebInspector.panels.sources; | 
 |     var sourcesView = panel._sourcesView; | 
 |     var historyManager = sourcesView._historyManager; | 
 |     var editorContainer = sourcesView._editorContainer; | 
 |  | 
 |     function rollback() | 
 |     { | 
 |         historyManager.rollback(); | 
 |     } | 
 |  | 
 |     function rollover() | 
 |     { | 
 |         historyManager.rollover(); | 
 |     } | 
 |  | 
 |     function dumpSelection(editor, label) | 
 |     { | 
 |         var selection = editor.selection(); | 
 |         var label = "<" + label + ">"; | 
 |         var fileName = "[" + editor._url.split("/").pop() + "]"; | 
 |         var selectionText = ""; | 
 |         if (selection.isEmpty()) | 
 |             selectionText = "line: " + selection.startLine + " column: " + selection.startColumn; | 
 |         else | 
 |             selectionText = "(NOT EMPTY): " + selection.toString(); | 
 |         InspectorTest.addResult(label + " " + selectionText + " " + fileName); | 
 |     } | 
 |  | 
 |     function eventSenderClickAtEditor(editor, lineNumber, columnNumber) | 
 |     { | 
 |         editor.scrollToLine(lineNumber); | 
 |         var coordinates = editor.cursorPositionToCoordinates(lineNumber, columnNumber); | 
 |         eventSender.mouseMoveTo(coordinates.x, coordinates.y); | 
 |         eventSender.mouseDown(); | 
 |         eventSender.mouseUp(); | 
 |         dumpSelection(editor, "Mouse click (" + lineNumber + ", " + columnNumber + ")"); | 
 |     } | 
 |  | 
 |     function clickAndDump(editor, lines, columns) | 
 |     { | 
 |         for (var i = 0; i < lines.length; ++i) { | 
 |             var lineNumber = lines[i]; | 
 |             var columnNumber = columns[i]; | 
 |             var originSelection = editor.selection(); | 
 |             editor.setSelection(WebInspector.TextRange.createFromLocation(lineNumber, columnNumber)); | 
 |             editor._delegate.onJumpToPosition(originSelection, editor.selection()); | 
 |             dumpSelection(editor, "Mouse click (" + lineNumber + ", " + columnNumber + ")"); | 
 |         } | 
 |     } | 
 |  | 
 |     InspectorTest.runTestSuite([ | 
 |         function testSimpleMovements(next) | 
 |         { | 
 |             InspectorTest.showScriptSource("example-fileset-for-test.js", onContentLoaded); | 
 |  | 
 |             function onContentLoaded() | 
 |             { | 
 |                 var editor = panel.visibleView.textEditor; | 
 |                 dumpSelection(editor, "Initial position"); | 
 |                 eventSenderClickAtEditor(editor, 4, 7, true); | 
 |  | 
 |                 InspectorTest.typeIn(editor, "\nSome more text here", step2); | 
 |             } | 
 |  | 
 |             function step2() { | 
 |                 var editor = panel.visibleView.textEditor; | 
 |                 dumpSelection(editor, "Typed in some text"); | 
 |  | 
 |                 rollback(); | 
 |                 dumpSelection(editor, "Rolled back"); | 
 |                 InspectorTest.typeIn(editor, "\nSome more text here as well\n", step3); | 
 |             } | 
 |  | 
 |             function step3() { | 
 |                 var editor = panel.visibleView.textEditor; | 
 |                 dumpSelection(editor, "Typed in some text"); | 
 |  | 
 |                 rollover(); | 
 |                 dumpSelection(editor, "Rolled over"); | 
 |                 next(); | 
 |             } | 
 |         }, | 
 |  | 
 |         function testSequentialJumps(next) | 
 |         { | 
 |             var editor = panel.visibleView.textEditor; | 
 |             // Hide inspector view to significantly speed up following tests from testsuite. | 
 |             InspectorTest.hideInspectorView(); | 
 |             const jumpsToDo = 4; | 
 |             clickAndDump(editor, [10, 11, 12, 13], [3, 4, 5, 6]); | 
 |  | 
 |             for (var i = 0; i < jumpsToDo; ++i) { | 
 |                 rollback(); | 
 |                 dumpSelection(editor, "Rolled back"); | 
 |             } | 
 |             for (var i = 0; i < jumpsToDo; ++i) { | 
 |                 rollover(); | 
 |                 dumpSelection(editor, "Rolled over"); | 
 |             } | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testDeletePreviousJumpLocations(next) | 
 |         { | 
 |             var editor = panel.visibleView.textEditor; | 
 |             editor.editRange(new WebInspector.TextRange(9, 0, 15, 0), ""); | 
 |             dumpSelection(editor, "Removed lines from 9 to 15"); | 
 |             rollback(); | 
 |             dumpSelection(editor, "Rolled back"); | 
 |             rollover(); | 
 |             dumpSelection(editor, "Rolled over"); | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testDeleteNextJumpLocations(next) | 
 |         { | 
 |             var editor = panel.visibleView.textEditor; | 
 |             const jumpsToDo = 4; | 
 |             clickAndDump(editor, [10, 11, 12, 13], [3, 4, 5, 6]); | 
 |  | 
 |             for (var i = 0; i < jumpsToDo; ++i) | 
 |                 rollback(); | 
 |             dumpSelection(editor, "Rolled back 4 times"); | 
 |             editor.editRange(new WebInspector.TextRange(9, 0, 11, 0), ""); | 
 |             dumpSelection(editor, "Removed lines from 9 to 11"); | 
 |             rollover(); | 
 |             dumpSelection(editor, "Rolled over"); | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testCrossFileJump(next) | 
 |         { | 
 |             InspectorTest.showScriptSource("workspace-test.js", onContentLoaded); | 
 |             function onContentLoaded() | 
 |             { | 
 |                 var editor = panel.visibleView.textEditor; | 
 |                 dumpSelection(editor, "Opened workspace-test.js"); | 
 |                 clickAndDump(editor, [10, 11], [1, 1]); | 
 |                 for (var i = 0; i < 4; ++i) { | 
 |                     rollback(); | 
 |                     dumpSelection(panel.visibleView.textEditor, "Rolled back"); | 
 |                 } | 
 |                 for (var i = 0; i < 4; ++i) { | 
 |                     rollover(); | 
 |                     dumpSelection(panel.visibleView.textEditor, "Rolled over"); | 
 |                 } | 
 |                 next(); | 
 |             } | 
 |         }, | 
 |  | 
 |         function testCloseCrossFile(next) | 
 |         { | 
 |             var selectedTab = editorContainer._tabbedPane.selectedTabId; | 
 |             editorContainer._tabbedPane.closeTab(selectedTab); | 
 |             dumpSelection(panel.visibleView.textEditor, "Close active tab"); | 
 |             for (var i = 0; i < 1; ++i) { | 
 |                 rollback(); | 
 |                 dumpSelection(panel.visibleView.textEditor, "Rolled back"); | 
 |             } | 
 |             for (var i = 0; i < 3; ++i) { | 
 |                 rollover(); | 
 |                 dumpSelection(panel.visibleView.textEditor, "Rolled over"); | 
 |             } | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testHistoryDepth(next) | 
 |         { | 
 |             var lines = []; | 
 |             var columns = []; | 
 |             const jumpsAmount = WebInspector.EditingLocationHistoryManager.HistoryDepth; | 
 |             for(var i = 0; i < jumpsAmount; ++i) { | 
 |                 lines.push(i + 10); | 
 |                 columns.push(7); | 
 |             } | 
 |             var editor = panel.visibleView.textEditor; | 
 |             clickAndDump(editor, lines, columns); | 
 |             for (var i = 0; i < jumpsAmount; ++i) { | 
 |                 rollback(); | 
 |                 dumpSelection(editor, "Rolled back"); | 
 |             } | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testInFileSearch(next) | 
 |         { | 
 |             var searchableView = panel.searchableView(); | 
 |  | 
 |             dumpSelection(panel.visibleView.textEditor, "Before searching"); | 
 |  | 
 |             searchableView.showSearchField(); | 
 |             searchableView._searchInputElement.value = "generate_"; | 
 |             searchableView._performSearch(true, true); | 
 |             for (var i = 0; i < 3; ++i) | 
 |                 searchableView.handleFindNextShortcut(); | 
 |             searchableView.handleCancelSearchShortcut(); | 
 |  | 
 |             dumpSelection(panel.visibleView.textEditor, "After searching"); | 
 |             rollback(); | 
 |             dumpSelection(panel.visibleView.textEditor, "Rolled back"); | 
 |             rollover(); | 
 |             dumpSelection(panel.visibleView.textEditor, "Rolled over"); | 
 |             next(); | 
 |         }, | 
 |  | 
 |         function testShowAnchorLocation(next) | 
 |         { | 
 |             dumpSelection(panel.visibleView.textEditor, "Before switching to other panel"); | 
 |             InspectorTest.waitForScriptSource("workspace-test.js", onScriptSource); | 
 |             function onScriptSource(uiSourceCode) | 
 |             { | 
 |                 var linkifier = new WebInspector.Linkifier(); | 
 |                 var anchorURI = WebInspector.networkMapping.networkURL(uiSourceCode); | 
 |                 var anchor = linkifier.linkifyScriptLocation(WebInspector.targetManager.mainTarget(), null, anchorURI, 10, 1); | 
 |                 WebInspector.Revealer.revealPromise(anchor[WebInspector.Linkifier._uiLocationSymbol]).then(function() { | 
 |                     InspectorTest.addResult("Selection: " + panel.visibleView.textEditor.selection().toString()); | 
 |                     dumpSelection(panel.visibleView.textEditor, "Showed anchor in " + anchorURI.split("/").pop() + " with line 333 column 3"); | 
 |                     rollback(); | 
 |                     dumpSelection(panel.visibleView.textEditor, "Rolled back"); | 
 |                     rollover(); | 
 |                     dumpSelection(panel.visibleView.textEditor, "Rolled over"); | 
 |                     next(); | 
 |                 }); | 
 |             } | 
 |         }, | 
 |  | 
 |         function testShowUISourceCode(next) | 
 |         { | 
 |             dumpSelection(panel.visibleView.textEditor, "Initial state"); | 
 |  | 
 |             InspectorTest.waitForScriptSource("example-fileset-for-test.js", onScriptSourceLoaded); | 
 |             function onScriptSourceLoaded(uiSourceCode) | 
 |             { | 
 |                 var jumps = [20, 10, 30]; | 
 |                 for (var i = 0; i < jumps.length; ++i) { | 
 |                     panel.showUISourceCode(uiSourceCode, jumps[i]); | 
 |                     dumpSelection(panel.visibleView.textEditor, "jump to line " + jumps[i]); | 
 |                 } | 
 |                 panel.showUISourceCode(uiSourceCode, 40, 10); | 
 |                 dumpSelection(panel.visibleView.textEditor, "highlight line 40"); | 
 |                 for (var i = 0; i < jumps.length + 1; ++i) { | 
 |                     rollback(); | 
 |                     dumpSelection(panel.visibleView.textEditor, "rollback"); | 
 |                 } | 
 |                 next(); | 
 |             } | 
 |         } | 
 |     ]); | 
 | }; | 
 | </script> | 
 | </head> | 
 | <body onload="runTest()"> | 
 | <p>Tests that jumping to previous location works as intended.</p> | 
 | </body> | 
 | </html> |