diff --git a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js index c68e925221..24887e02c7 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection.js @@ -170,9 +170,9 @@ endOffset, side) { var lines = this._getDiffLines(side).slice(startLineNum - 1, endLineNum); if (lines.length) { - lines[0] = lines[0].substring(startOffset); lines[lines.length - 1] = lines[lines.length - 1] .substring(0, endOffset); + lines[0] = lines[0].substring(startOffset); } return lines.join('\n'); }, diff --git a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection_test.html b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection_test.html index 774430aa08..d6a6298525 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection_test.html +++ b/polygerrit-ui/app/elements/diff/gr-diff-selection/gr-diff-selection_test.html @@ -244,5 +244,27 @@ limitations under the License. emulateCopyOn(element.querySelector('textarea')); assert.isFalse(selectedTextSpy.called); }); + + test('regression test for 4794', function() { + element._cachedDiffBuilder.getLineElByChild = function(child) { + while (!child.classList.contains('content') && child.parentElement) { + child = child.parentElement; + } + return child.previousElementSibling; + }; + + element.classList.add('selected-right'); + element.classList.remove('selected-left'); + + var selection = window.getSelection(); + var range = document.createRange(); + range.setStart( + element.querySelectorAll('div.contentText')[1].firstChild, 4); + range.setEnd( + element.querySelectorAll('div.contentText')[1].firstChild, 10); + selection.addRange(range); + assert.equal(element._getSelectedText('right'), ' other'); + selection.removeAllRanges(); + }); });