Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/line_highlighter_spec.js')
-rw-r--r--spec/frontend/line_highlighter_spec.js275
1 files changed, 0 insertions, 275 deletions
diff --git a/spec/frontend/line_highlighter_spec.js b/spec/frontend/line_highlighter_spec.js
deleted file mode 100644
index 97ae6c0e3b7..00000000000
--- a/spec/frontend/line_highlighter_spec.js
+++ /dev/null
@@ -1,275 +0,0 @@
-/* eslint-disable no-return-assign, no-new, no-underscore-dangle */
-
-import $ from 'jquery';
-import * as utils from '~/lib/utils/common_utils';
-import LineHighlighter from '~/line_highlighter';
-
-describe('LineHighlighter', () => {
- const testContext = {};
-
- const clickLine = (number, eventData = {}) => {
- if ($.isEmptyObject(eventData)) {
- return $(`#L${number}`).click();
- }
- const e = $.Event('click', eventData);
- return $(`#L${number}`).trigger(e);
- };
- beforeEach(() => {
- loadFixtures('static/line_highlighter.html');
- testContext.class = new LineHighlighter();
- testContext.css = testContext.class.highlightLineClass;
- return (testContext.spies = {
- __setLocationHash__: jest
- .spyOn(testContext.class, '__setLocationHash__')
- .mockImplementation(() => {}),
- });
- });
-
- describe('behavior', () => {
- it('highlights one line given in the URL hash', () => {
- new LineHighlighter({ hash: '#L13' });
-
- expect($('#LC13')).toHaveClass(testContext.css);
- });
-
- it('highlights one line given in the URL hash with given CSS class name', () => {
- const hiliter = new LineHighlighter({ hash: '#L13', highlightLineClass: 'hilite' });
-
- expect(hiliter.highlightLineClass).toBe('hilite');
- expect($('#LC13')).toHaveClass('hilite');
- expect($('#LC13')).not.toHaveClass('hll');
- });
-
- it('highlights a range of lines given in the URL hash', () => {
- new LineHighlighter({ hash: '#L5-25' });
-
- expect($(`.${testContext.css}`).length).toBe(21);
- for (let line = 5; line <= 25; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
-
- it('highlights a range of lines given in the URL hash using GitHub format', () => {
- new LineHighlighter({ hash: '#L5-L25' });
-
- expect($(`.${testContext.css}`).length).toBe(21);
- for (let line = 5; line <= 25; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
-
- it('scrolls to the first highlighted line on initial load', () => {
- jest.spyOn(utils, 'scrollToElement');
- new LineHighlighter({ hash: '#L5-25' });
-
- expect(utils.scrollToElement).toHaveBeenCalledWith('#L5', expect.anything());
- });
-
- it('discards click events', () => {
- const clickSpy = jest.fn();
-
- $('a[data-line-number]').click(clickSpy);
-
- clickLine(13);
-
- expect(clickSpy.mock.calls[0][0].isDefaultPrevented()).toEqual(true);
- });
-
- it('handles garbage input from the hash', () => {
- const func = () => {
- return new LineHighlighter({ fileHolderSelector: '#blob-content-holder' });
- };
-
- expect(func).not.toThrow();
- });
-
- it('handles hashchange event', () => {
- const highlighter = new LineHighlighter();
-
- jest.spyOn(highlighter, 'highlightHash').mockImplementation(() => {});
-
- window.dispatchEvent(new Event('hashchange'), 'L15');
-
- expect(highlighter.highlightHash).toHaveBeenCalled();
- });
- });
-
- describe('clickHandler', () => {
- it('handles clicking on a child icon element', () => {
- const spy = jest.spyOn(testContext.class, 'setHash');
- $('#L13 [data-testid="link-icon"]').mousedown().click();
-
- expect(spy).toHaveBeenCalledWith(13);
- expect($('#LC13')).toHaveClass(testContext.css);
- });
-
- describe('without shiftKey', () => {
- it('highlights one line when clicked', () => {
- clickLine(13);
-
- expect($('#LC13')).toHaveClass(testContext.css);
- });
-
- it('unhighlights previously highlighted lines', () => {
- clickLine(13);
- clickLine(20);
-
- expect($('#LC13')).not.toHaveClass(testContext.css);
- expect($('#LC20')).toHaveClass(testContext.css);
- });
-
- it('sets the hash', () => {
- const spy = jest.spyOn(testContext.class, 'setHash');
- clickLine(13);
-
- expect(spy).toHaveBeenCalledWith(13);
- });
- });
-
- describe('with shiftKey', () => {
- it('sets the hash', () => {
- const spy = jest.spyOn(testContext.class, 'setHash');
- clickLine(13);
- clickLine(20, {
- shiftKey: true,
- });
-
- expect(spy).toHaveBeenCalledWith(13);
- expect(spy).toHaveBeenCalledWith(13, 20);
- });
-
- describe('without existing highlight', () => {
- it('highlights the clicked line', () => {
- clickLine(13, {
- shiftKey: true,
- });
-
- expect($('#LC13')).toHaveClass(testContext.css);
- expect($(`.${testContext.css}`).length).toBe(1);
- });
-
- it('sets the hash', () => {
- const spy = jest.spyOn(testContext.class, 'setHash');
- clickLine(13, {
- shiftKey: true,
- });
-
- expect(spy).toHaveBeenCalledWith(13);
- });
- });
-
- describe('with existing single-line highlight', () => {
- it('uses existing line as last line when target is lesser', () => {
- clickLine(20);
- clickLine(15, {
- shiftKey: true,
- });
-
- expect($(`.${testContext.css}`).length).toBe(6);
- for (let line = 15; line <= 20; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
-
- it('uses existing line as first line when target is greater', () => {
- clickLine(5);
- clickLine(10, {
- shiftKey: true,
- });
-
- expect($(`.${testContext.css}`).length).toBe(6);
- for (let line = 5; line <= 10; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
- });
-
- describe('with existing multi-line highlight', () => {
- beforeEach(() => {
- clickLine(10, {
- shiftKey: true,
- });
- clickLine(13, {
- shiftKey: true,
- });
- });
-
- it('uses target as first line when it is less than existing first line', () => {
- clickLine(5, {
- shiftKey: true,
- });
-
- expect($(`.${testContext.css}`).length).toBe(6);
- for (let line = 5; line <= 10; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
-
- it('uses target as last line when it is greater than existing first line', () => {
- clickLine(15, {
- shiftKey: true,
- });
-
- expect($(`.${testContext.css}`).length).toBe(6);
- for (let line = 10; line <= 15; line += 1) {
- expect($(`#LC${line}`)).toHaveClass(testContext.css);
- }
- });
- });
- });
- });
-
- describe('hashToRange', () => {
- beforeEach(() => {
- testContext.subject = testContext.class.hashToRange;
- });
-
- it('extracts a single line number from the hash', () => {
- expect(testContext.subject('#L5')).toEqual([5, null]);
- });
-
- it('extracts a range of line numbers from the hash', () => {
- expect(testContext.subject('#L5-15')).toEqual([5, 15]);
- });
-
- it('returns [null, null] when the hash is not a line number', () => {
- expect(testContext.subject('#foo')).toEqual([null, null]);
- });
- });
-
- describe('highlightLine', () => {
- beforeEach(() => {
- testContext.subject = testContext.class.highlightLine;
- });
-
- it('highlights the specified line', () => {
- testContext.subject(13);
-
- expect($('#LC13')).toHaveClass(testContext.css);
- });
-
- it('accepts a String-based number', () => {
- testContext.subject('13');
-
- expect($('#LC13')).toHaveClass(testContext.css);
- });
- });
-
- describe('setHash', () => {
- beforeEach(() => {
- testContext.subject = testContext.class.setHash;
- });
-
- it('sets the location hash for a single line', () => {
- testContext.subject(5);
-
- expect(testContext.spies.__setLocationHash__).toHaveBeenCalledWith('#L5');
- });
-
- it('sets the location hash for a range', () => {
- testContext.subject(5, 15);
-
- expect(testContext.spies.__setLocationHash__).toHaveBeenCalledWith('#L5-15');
- });
- });
-});