diff --git a/src/__tests__/diff2html-tests.ts b/src/__tests__/diff2html-tests.ts index 6528b40..eeeae5c 100644 --- a/src/__tests__/diff2html-tests.ts +++ b/src/__tests__/diff2html-tests.ts @@ -157,29 +157,35 @@ describe('Diff2Html', () => { "type": "delete", }, { - "content": "+ TokenRevoked, MissingToken,", + "content": "\\ No newline at end of file", "newNumber": 53, - "oldNumber": undefined, - "type": "insert", + "oldNumber": 55, + "type": "context", }, { - "content": "+ IndexLock, RepositoryError, NotValidRepo, PullRequestNotMergeable, BranchError,", + "content": "+ TokenRevoked, MissingToken,", "newNumber": 54, "oldNumber": undefined, "type": "insert", }, { - "content": "+ PluginError, CodeParserError, EngineError = Value", + "content": "+ IndexLock, RepositoryError, NotValidRepo, PullRequestNotMergeable, BranchError,", "newNumber": 55, "oldNumber": undefined, "type": "insert", }, { - "content": "+}", + "content": "+ PluginError, CodeParserError, EngineError = Value", "newNumber": 56, "oldNumber": undefined, "type": "insert", }, + { + "content": "+}", + "newNumber": 57, + "oldNumber": undefined, + "type": "insert", + }, ], "newStartLine": 50, "oldStartLine": 50, diff --git a/src/__tests__/side-by-side-printer-tests.ts b/src/__tests__/side-by-side-printer-tests.ts index ab886ab..3ea0cb7 100644 --- a/src/__tests__/side-by-side-printer-tests.ts +++ b/src/__tests__/side-by-side-printer-tests.ts @@ -407,6 +407,357 @@ describe('SideBySideRenderer', () => { `); }); + it('should handle files without newlines at the end', () => { + const exampleJson: DiffFile[] = [ + { + blocks: [ + // Scenario 1: Old file missing newline, new file has newline + { + lines: [ + { + content: '-oldLine1', + type: LineType.DELETE, + oldNumber: 1, + newNumber: undefined, + }, + { + content: '\\ No newline at end of file', + type: LineType.CONTEXT, + oldNumber: 1, + newNumber: 1, + }, + { + content: '+newLine1', + type: LineType.INSERT, + oldNumber: undefined, + newNumber: 1, + }, + ], + oldStartLine: 1, + newStartLine: 1, + header: '@@ -1 +1 @@', + }, + // Scenario 2: Old file has newline, new file missing newline + { + lines: [ + { + content: '-oldLine2', + type: LineType.DELETE, + oldNumber: 2, + newNumber: undefined, + }, + { + content: '+newLine2', + type: LineType.INSERT, + oldNumber: undefined, + newNumber: 2, + }, + { + content: '\\ No newline at end of file', + type: LineType.CONTEXT, + oldNumber: 2, + newNumber: 2, + }, + ], + oldStartLine: 2, + newStartLine: 2, + header: '@@ -2 +2 @@', + }, + // Scenario 3: Both files missing newline + { + lines: [ + { + content: '-oldLine3', + type: LineType.DELETE, + oldNumber: 3, + newNumber: undefined, + }, + { + content: '\\ No newline at end of file', + type: LineType.CONTEXT, + oldNumber: 3, + newNumber: 3, + }, + { + content: '+newLine3', + type: LineType.INSERT, + oldNumber: undefined, + newNumber: 3, + }, + { + content: '\\ No newline at end of file', + type: LineType.CONTEXT, + oldNumber: 3, + newNumber: 3, + }, + ], + oldStartLine: 3, + newStartLine: 3, + header: '@@ -3 +3 @@', + }, + ], + deletedLines: 3, + addedLines: 3, + oldName: 'sample', + language: 'txt', + newName: 'sample', + isCombined: false, + isGitDiff: true, + }, + ]; + + const hoganUtils = new HoganJsUtils({}); + const sideBySideRenderer = new SideBySideRenderer(hoganUtils, {}); + const html = sideBySideRenderer.render(exampleJson); + expect(html).toMatchInlineSnapshot(` + "
| + |
+ @@ -1 +1 @@
+ |
+
| + 1 + | +
+
+ -
+ oldLine1
+
+ |
+
| + 1 + | +
+
+ \\
+ No newline at end of file
+
+ |
+
| + + | +
+
+
+
+ + |
+
| + |
+ @@ -2 +2 @@
+ |
+
| + 2 + | +
+
+ -
+
+ |
+
| + + | +
+
+
+
+ + |
+
| + |
+ @@ -3 +3 @@
+ |
+
| + 3 + | +
+
+ -
+ oldLine3
+
+ |
+
| + 3 + | +
+
+ \\
+ No newline at end of file
+
+ |
+
| + + | +
+
+
+
+ + |
+
| + + | +
+
+
+
+ + |
+
| + |
+ |
+
| + + | +
+
+
+
+ + |
+
| + + | +
+
+
+
+ + |
+
| + 1 + | +
+
+ +
+ newLine1
+
+ |
+
| + |
+ |
+
| + 2 + | +
+
+ +
+ newLine2
+
+ |
+
| + 2 + | +
+
+ \\
+ No newline at end of file
+
+ |
+
| + |
+ |
+
| + + | +
+
+
+
+ + |
+
| + + | +
+
+
+
+ + |
+
| + 3 + | +
+
+ +
+ newLine3
+
+ |
+
| + 3 + | +
+
+ \\
+ No newline at end of file
+
+ |
+