@@ -2427,5 +2427,96 @@ describe('DiffParser', () => {
24272427 ]
24282428 ` ) ;
24292429 } ) ;
2430+
2431+ it ( 'should parse unix diff with binary file' , ( ) => {
2432+ const diff =
2433+ 'diff -ur a/htest.html b/htest.html\n' +
2434+ '--- a/htest.html 2023-01-10 09:43:04.284427636 +0800\n' +
2435+ '+++ b/htest.html 2023-01-10 09:43:10.308388990 +0800\n' +
2436+ '@@ -1 +1 @@\n' +
2437+ '-<a>test</a>\n' +
2438+ '+<a>new test</a>\n' +
2439+ 'Binary files a/image.gif and b/image.gif differ\n' +
2440+ 'diff -ur a/test.json b/test.json\n' +
2441+ '--- a/test.json 2023-01-10 09:43:07.832404870 +0800\n' +
2442+ '+++ b/test.json 2023-01-10 09:43:12.708373605 +0800\n' +
2443+ '@@ -1 +1 @@\n' +
2444+ '-{"list": [1, 2]}\n' +
2445+ '+{"list": [1, 2, 3]}' ;
2446+
2447+ const result = parse ( diff ) ;
2448+ expect ( result ) . toMatchInlineSnapshot ( `
2449+ [
2450+ {
2451+ "addedLines": 1,
2452+ "blocks": [
2453+ {
2454+ "header": "@@ -1 +1 @@",
2455+ "lines": [
2456+ {
2457+ "content": "-<a>test</a>",
2458+ "newNumber": undefined,
2459+ "oldNumber": 1,
2460+ "type": "delete",
2461+ },
2462+ {
2463+ "content": "+<a>new test</a>",
2464+ "newNumber": 1,
2465+ "oldNumber": undefined,
2466+ "type": "insert",
2467+ },
2468+ ],
2469+ "newStartLine": 1,
2470+ "oldStartLine": 1,
2471+ "oldStartLine2": null,
2472+ },
2473+ ],
2474+ "deletedLines": 1,
2475+ "isCombined": false,
2476+ "language": "html",
2477+ "newName": "htest.html",
2478+ "oldName": "htest.html",
2479+ },
2480+ {
2481+ "addedLines": 0,
2482+ "blocks": [],
2483+ "deletedLines": 0,
2484+ "isBinary": true,
2485+ "newName": "image.gif",
2486+ "oldName": "image.gif",
2487+ },
2488+ {
2489+ "addedLines": 1,
2490+ "blocks": [
2491+ {
2492+ "header": "@@ -1 +1 @@",
2493+ "lines": [
2494+ {
2495+ "content": "-{"list": [1, 2]}",
2496+ "newNumber": undefined,
2497+ "oldNumber": 1,
2498+ "type": "delete",
2499+ },
2500+ {
2501+ "content": "+{"list": [1, 2, 3]}",
2502+ "newNumber": 1,
2503+ "oldNumber": undefined,
2504+ "type": "insert",
2505+ },
2506+ ],
2507+ "newStartLine": 1,
2508+ "oldStartLine": 1,
2509+ "oldStartLine2": null,
2510+ },
2511+ ],
2512+ "deletedLines": 1,
2513+ "isCombined": false,
2514+ "language": "json",
2515+ "newName": "test.json",
2516+ "oldName": "test.json",
2517+ },
2518+ ]
2519+ ` ) ;
2520+ } ) ;
24302521 } ) ;
24312522} ) ;
0 commit comments