Tests: Fixed pretty print incorrectly calculating print width (#2821)
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
diff --git a/tests/helper/token-stream-transformer.js b/tests/helper/token-stream-transformer.js
index 834c98b..db0c6ac 100644
--- a/tests/helper/token-stream-transformer.js
+++ b/tests/helper/token-stream-transformer.js
@@ -79,9 +79,10 @@ class GlueItem { }
/**
* @param {TokenStream} tokenStream
+ * @param {number} [level]
* @returns {PrettyTokenStream}
*/
-function toPrettyTokenStream(tokenStream) {
+function toPrettyTokenStream(tokenStream, level = 0) {
/** @type {PrettyTokenStream} */
const prettyStream = [];
for (const token of tokenStream) {
@@ -116,26 +117,27 @@ function toPrettyTokenStream(tokenStream) {
*/
function innerSimple(value) {
if (Array.isArray(value.content)) {
- return [value.type, toPrettyTokenStream(value.content)];
+ return [value.type, toPrettyTokenStream(value.content, level + 1)];
} else {
return [value.type, value.content];
}
}
- prettyFormat(prettyStream);
+ prettyFormat(prettyStream, (level + 1) * 4);
return prettyStream;
}
/**
* @param {PrettyTokenStream} prettyStream
+ * @param {number} indentationWidth
* @returns {void}
*/
-function prettyFormat(prettyStream) {
+function prettyFormat(prettyStream, indentationWidth) {
// The maximum number of (glued) tokens per line
const MAX_TOKEN_PER_LINE = 5;
// The maximum number of characters per line
// (this is based on an estimation. The actual output might be longer.)
- const MAX_PRINT_WIDTH = 80;
+ const MAX_PRINT_WIDTH = 80 - indentationWidth;
prettyTrimLineBreaks(prettyStream);
// enable all line breaks with >=2 breaks in the source token stream
@@ -181,7 +183,17 @@ function prettyFormat(prettyStream) {
return lines.map(g => {
if (g.length > 1) {
return g
- .map(item => isToken(item) ? ", ".length + JSON.stringify(item).length : 0)
+ .map(item => {
+ if (isToken(item)) {
+ if (typeof item === "string") {
+ return ", ".length + JSON.stringify(item).length;
+ } else {
+ return ", ".length + JSON.stringify(item).length + " ".length;
+ }
+ } else {
+ return 0;
+ }
+ })
.reduce((a, b) => a + b, 0) - ", ".length;
} else {
// we don't really care about the print width of a single-token line