1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
import { commitActionTypes } from '~/ide/constants';
import createFileDiff from '~/ide/lib/create_file_diff';
import {
createUpdatedFile,
createNewFile,
createMovedFile,
createDeletedFile,
} from '../file_helpers';
const PATH = 'test/numbers.md';
const PATH_FOO = 'test/foo.md';
const TEXT_LINE_COUNT = 100;
const TEXT = Array(TEXT_LINE_COUNT)
.fill(0)
.map((_, idx) => `${idx + 1}`)
.join('\n');
// eslint-disable-next-line max-params
const spliceLines = (content, lineNumber, deleteCount = 0, newLines = []) => {
const lines = content.split('\n');
lines.splice(lineNumber, deleteCount, ...newLines);
return lines.join('\n');
};
const mapLines = (content, mapFn) => content.split('\n').map(mapFn).join('\n');
describe('IDE lib/create_file_diff', () => {
it('returns empty string with "garbage" action', () => {
const result = createFileDiff(createNewFile(PATH, ''), 'garbage');
expect(result).toBe('');
});
it('preserves ending whitespace in file', () => {
const oldContent = spliceLines(TEXT, 99, 1, ['100 ']);
const newContent = spliceLines(oldContent, 99, 0, ['Lorem', 'Ipsum']);
const expected = `
99
+Lorem
+Ipsum
100 `;
const result = createFileDiff(
createUpdatedFile(PATH, oldContent, newContent),
commitActionTypes.update,
);
expect(result).toContain(expected);
});
describe('with "create" action', () => {
const expectedHead = `diff --git "a/${PATH}" "b/${PATH}"
new file mode 100644`;
const expectedChunkHead = (lineCount) => `--- /dev/null
+++ b/${PATH}
@@ -0,0 +1,${lineCount} @@`;
it('with empty file, does not include diff body', () => {
const result = createFileDiff(createNewFile(PATH, ''), commitActionTypes.create);
expect(result).toBe(`${expectedHead}\n`);
});
it('with single line, includes diff body', () => {
const result = createFileDiff(createNewFile(PATH, '\n'), commitActionTypes.create);
expect(result).toBe(`${expectedHead}
${expectedChunkHead(1)}
+
`);
});
it('without newline, includes no newline comment', () => {
const result = createFileDiff(createNewFile(PATH, 'Lorem ipsum'), commitActionTypes.create);
expect(result).toBe(`${expectedHead}
${expectedChunkHead(1)}
+Lorem ipsum
\\ No newline at end of file
`);
});
it('with content, includes diff body', () => {
const content = `${TEXT}\n`;
const result = createFileDiff(createNewFile(PATH, content), commitActionTypes.create);
expect(result).toBe(`${expectedHead}
${expectedChunkHead(TEXT_LINE_COUNT)}
${mapLines(TEXT, (line) => `+${line}`)}
`);
});
});
describe('with "delete" action', () => {
const expectedHead = `diff --git "a/${PATH}" "b/${PATH}"
deleted file mode 100644`;
const expectedChunkHead = (lineCount) => `--- a/${PATH}
+++ /dev/null
@@ -1,${lineCount} +0,0 @@`;
it('with empty file, does not include diff body', () => {
const result = createFileDiff(createDeletedFile(PATH, ''), commitActionTypes.delete);
expect(result).toBe(`${expectedHead}\n`);
});
it('with content, includes diff body', () => {
const content = `${TEXT}\n`;
const result = createFileDiff(createDeletedFile(PATH, content), commitActionTypes.delete);
expect(result).toBe(`${expectedHead}
${expectedChunkHead(TEXT_LINE_COUNT)}
${mapLines(TEXT, (line) => `-${line}`)}
`);
});
});
describe('with "update" action', () => {
it('includes diff body', () => {
const oldContent = `${TEXT}\n`;
const newContent = `${spliceLines(TEXT, 50, 3, ['Lorem'])}\n`;
const result = createFileDiff(
createUpdatedFile(PATH, oldContent, newContent),
commitActionTypes.update,
);
expect(result).toBe(`diff --git "a/${PATH}" "b/${PATH}"
--- a/${PATH}
+++ b/${PATH}
@@ -47,11 +47,9 @@
47
48
49
50
-51
-52
-53
+Lorem
54
55
56
57
`);
});
});
describe('with "move" action', () => {
it('returns rename head', () => {
const result = createFileDiff(createMovedFile(PATH, PATH_FOO), commitActionTypes.move);
expect(result).toBe(`diff --git "a/${PATH_FOO}" "b/${PATH}"
rename from ${PATH_FOO}
rename to ${PATH}
`);
});
});
});
|