Skip to content

Commit 12bf4d7

Browse files
committed
prettier string comparison output
make the comarison between huges strings look better close axross#13
1 parent 47f8045 commit 12bf4d7

File tree

3 files changed

+111
-8
lines changed

3 files changed

+111
-8
lines changed

Diff for: distributions/index.js

+57-3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ var _jsondiffpatch = require('jsondiffpatch');
3636

3737
var _jsondiffpatch2 = _interopRequireDefault(_jsondiffpatch);
3838

39+
var _pdiff = require('pdiff');
40+
41+
var _pdiff2 = _interopRequireDefault(_pdiff);
42+
3943
var INDENT = ' ';
4044
var FIG_TICK = _figures2['default'].tick;
4145
var FIG_CROSS = _figures2['default'].cross;
@@ -108,6 +112,58 @@ var createReporter = function createReporter() {
108112
});
109113
};
110114

115+
var diffStrings = function diffStrings(actual, expected) {
116+
var padding = ' ';
117+
var line = 1;
118+
var diff_ = _pdiff2['default'].addLineNumbers(_pdiff2['default'].diff(actual.replace(/\\n/g, '\n'), expected.replace(/\\n/g, '\n')));
119+
var diff = _pdiff2['default'].extractDiff(diff_, line);
120+
var maxLine = diff_.length;
121+
var digit = String(maxLine).length;
122+
var spaces = '';
123+
for (var i = 0; i < digit - 1; i++) {
124+
spaces += ' ';
125+
}console.log('');
126+
diff.forEach(function (group, i) {
127+
group.forEach(function (delta) {
128+
var text = padding;
129+
// Add line numbers
130+
if (delta.lineNumberOfLhs != undefined) {
131+
text += _chalk2['default'].magenta((spaces + (delta.lineNumberOfLhs + 1)).substr(-digit));
132+
} else {
133+
text += spaces + _chalk2['default'].magenta('-');
134+
}
135+
text += ' ';
136+
if (delta.lineNumberOfRhs != undefined) {
137+
text += _chalk2['default'].magenta((spaces + (delta.lineNumberOfRhs + 1)).substr(-digit));
138+
} else {
139+
text += spaces + _chalk2['default'].magenta('-');
140+
}
141+
text += ' ';
142+
143+
// Add the value of this line
144+
delta.values.forEach(function (value) {
145+
if (value.added) {
146+
text += _chalk2['default'].green.inverse(value.value);
147+
return;
148+
}
149+
if (value.removed) {
150+
text += _chalk2['default'].red.inverse(value.value);
151+
return;
152+
}
153+
text += _chalk2['default'].dim(value.value);
154+
});
155+
156+
// Ouput the delta
157+
console.log(text);
158+
});
159+
160+
if (i != diff.length - 1) {
161+
console.log(padding + _chalk2['default'].dim('...'));
162+
}
163+
});
164+
console.log('');
165+
};
166+
111167
var _assert$diag = assert.diag;
112168
var at = _assert$diag.at;
113169
var actual = _assert$diag.actual;
@@ -148,9 +204,7 @@ var createReporter = function createReporter() {
148204
} else if (expected === 'undefined' && actual === 'undefined') {
149205
;
150206
} else if (expected_type === 'string') {
151-
var compared = (0, _diff.diffWords)(actual, expected).map(writeDiff).join('');
152-
153-
println(compared, 4);
207+
diffStrings(actual, expected);
154208
} else {
155209
println(_chalk2['default'].red.inverse(actual) + _chalk2['default'].green.inverse(expected), 4);
156210
}

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"duplexer": "^0.1.1",
1919
"figures": "^1.4.0",
2020
"jsondiffpatch": "^0.1.41",
21+
"pdiff": "^2.0.0",
2122
"pretty-ms": "^2.1.0",
2223
"tap-parser": "^1.2.2",
2324
"through2": "^2.0.0"

Diff for: sources/index.js

+53-5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import through2 from 'through2';
66
import parser from 'tap-parser';
77
import prettyMs from 'pretty-ms';
88
import jsondiffpatch from 'jsondiffpatch';
9+
import pdiff from 'pdiff';
910

1011
const INDENT = ' ';
1112
const FIG_TICK = figures.tick;
@@ -64,6 +65,57 @@ const createReporter = () => {
6465
return value.replace(/(^\s*)(.*)/g, (m, one, two) => one + style(two))
6566
};
6667

68+
const diffStrings = (actual, expected) => {
69+
const padding = ' ';
70+
const line = 1;
71+
const diff_ = pdiff.addLineNumbers(pdiff.diff(actual.replace(/\\n/g, '\n'), expected.replace(/\\n/g, '\n')));
72+
const diff = pdiff.extractDiff(diff_, line);
73+
const maxLine = diff_.length;
74+
const digit = String(maxLine).length;
75+
let spaces = '';
76+
for (let i = 0; i < digit - 1; i++) spaces += ' ';
77+
console.log('');
78+
diff.forEach((group, i) => {
79+
group.forEach(delta => {
80+
let text = padding;
81+
// Add line numbers
82+
if (delta.lineNumberOfLhs != undefined) {
83+
text += chalk.magenta((spaces + (delta.lineNumberOfLhs + 1)).substr(-digit));
84+
} else {
85+
text += spaces + chalk.magenta('-');
86+
}
87+
text += ' ';
88+
if (delta.lineNumberOfRhs != undefined) {
89+
text += chalk.magenta((spaces + (delta.lineNumberOfRhs + 1)).substr(-digit));
90+
} else {
91+
text += spaces + chalk.magenta('-');
92+
}
93+
text += ' ';
94+
95+
// Add the value of this line
96+
delta.values.forEach(value => {
97+
if (value.added) {
98+
text += chalk.green.inverse(value.value);
99+
return;
100+
}
101+
if (value.removed) {
102+
text += chalk.red.inverse(value.value);
103+
return;
104+
}
105+
text += chalk.dim(value.value);
106+
})
107+
108+
// Ouput the delta
109+
console.log(text);
110+
});
111+
112+
if (i != diff.length - 1) {
113+
console.log(padding + chalk.dim('...'));
114+
}
115+
});
116+
console.log('');
117+
};
118+
67119
let {
68120
at,
69121
actual,
@@ -108,11 +160,7 @@ const createReporter = () => {
108160
} else if (expected === 'undefined' && actual === 'undefined') {
109161
;
110162
} else if (expected_type === 'string') {
111-
const compared = diffWords(actual, expected)
112-
.map(writeDiff)
113-
.join('');
114-
115-
println(compared, 4);
163+
diffStrings(actual, expected)
116164
} else {
117165
println(
118166
chalk.red.inverse(actual) + chalk.green.inverse(expected),

0 commit comments

Comments
 (0)