forked from atom/github
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpatch-preview-view.test.js
128 lines (107 loc) · 4.01 KB
/
patch-preview-view.test.js
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
import React from 'react';
import {mount} from 'enzyme';
import dedent from 'dedent-js';
import PatchPreviewView from '../../lib/views/patch-preview-view';
import {multiFilePatchBuilder} from '../builder/patch';
import {assertMarkerRanges} from '../helpers';
describe('PatchPreviewView', function() {
let atomEnv, multiFilePatch;
beforeEach(function() {
atomEnv = global.buildAtomEnvironment();
multiFilePatch = multiFilePatchBuilder()
.addFilePatch(fp => {
fp.setOldFile(f => f.path('file.txt'));
fp.addHunk(h => h.unchanged('000').added('001', '002').deleted('003', '004'));
fp.addHunk(h => h.unchanged('005').deleted('006').added('007').unchanged('008'));
})
.build()
.multiFilePatch;
});
afterEach(function() {
atomEnv.destroy();
});
function buildApp(override = {}) {
const props = {
multiFilePatch,
fileName: 'file.txt',
diffRow: 3,
maxRowCount: 4,
config: atomEnv.config,
...override,
};
return <PatchPreviewView {...props} />;
}
function getEditor(wrapper) {
return wrapper.find('AtomTextEditor').instance().getRefModel().getOr(null);
}
it('builds and renders sub-PatchBuffer content within a TextEditor', function() {
const wrapper = mount(buildApp({fileName: 'file.txt', diffRow: 5, maxRowCount: 4}));
const editor = getEditor(wrapper);
assert.strictEqual(editor.getText(), dedent`
001
002
003
004
`);
});
it('retains sub-PatchBuffers, adopting new content if the MultiFilePatch changes', function() {
const wrapper = mount(buildApp({fileName: 'file.txt', diffRow: 4, maxRowCount: 4}));
const previewPatchBuffer = wrapper.state('previewPatchBuffer');
assert.strictEqual(previewPatchBuffer.getBuffer().getText(), dedent`
000
001
002
003
`);
wrapper.setProps({});
assert.strictEqual(wrapper.state('previewPatchBuffer'), previewPatchBuffer);
assert.strictEqual(previewPatchBuffer.getBuffer().getText(), dedent`
000
001
002
003
`);
const {multiFilePatch: newPatch} = multiFilePatchBuilder()
.addFilePatch(fp => {
fp.setOldFile(f => f.path('file.txt'));
fp.addHunk(h => h.unchanged('000').added('001').unchanged('changed').deleted('003', '004'));
fp.addHunk(h => h.unchanged('005').deleted('006').added('007').unchanged('008'));
})
.build();
wrapper.setProps({multiFilePatch: newPatch});
assert.strictEqual(wrapper.state('previewPatchBuffer'), previewPatchBuffer);
assert.strictEqual(previewPatchBuffer.getBuffer().getText(), dedent`
000
001
changed
003
`);
});
it('decorates the addition and deletion marker layers', function() {
const wrapper = mount(buildApp({fileName: 'file.txt', diffRow: 5, maxRowCount: 4}));
const additionDecoration = wrapper.find(
'BareDecoration[className="github-FilePatchView-line--added"][type="line"]',
);
const additionLayer = additionDecoration.prop('decorableHolder').get();
assertMarkerRanges(additionLayer, [[0, 0], [1, 3]]);
const deletionDecoration = wrapper.find(
'BareDecoration[className="github-FilePatchView-line--deleted"][type="line"]',
);
const deletionLayer = deletionDecoration.prop('decorableHolder').get();
assertMarkerRanges(deletionLayer, [[2, 0], [3, 3]]);
});
it('includes a diff icon gutter when enabled', function() {
atomEnv.config.set('github.showDiffIconGutter', true);
const wrapper = mount(buildApp());
const gutter = wrapper.find('BareGutter');
assert.strictEqual(gutter.prop('name'), 'diff-icons');
assert.strictEqual(gutter.prop('type'), 'line-number');
assert.strictEqual(gutter.prop('className'), 'icons');
assert.strictEqual(gutter.prop('labelFn')(), '\u00a0');
});
it('omits the diff icon gutter when disabled', function() {
atomEnv.config.set('github.showDiffIconGutter', false);
const wrapper = mount(buildApp());
assert.isFalse(wrapper.exists('BareGutter'));
});
});