lint: Fix some straightforward ESLint errors

This commit is contained in:
Richard Hansen 2021-01-24 00:56:11 -05:00 committed by John McLear
parent 4b4b685bba
commit 54a3dbb9a0
4 changed files with 131 additions and 125 deletions

View file

@ -391,9 +391,9 @@ const defaultResponseRefs = {
// convert to a dictionary of operation objects // convert to a dictionary of operation objects
const operations = {}; const operations = {};
for (const resource in resources) { for (const [resource, actions] of Object.entries(resources)) {
for (const action in resources[resource]) { for (const [action, spec] of Object.entries(actions)) {
const {operationId, responseSchema, ...operation} = resources[resource][action]; const {operationId, responseSchema, ...operation} = spec;
// add response objects // add response objects
const responses = {...defaultResponseRefs}; const responses = {...defaultResponseRefs};

View file

@ -1,3 +1,5 @@
'use strict';
/* /*
* This file is copied & modified from <basedir>/tests/backend/specs/api/pad.js * This file is copied & modified from <basedir>/tests/backend/specs/api/pad.js
* *

View file

@ -6,13 +6,11 @@
* TODO: unify those two files, and merge in a single one. * TODO: unify those two files, and merge in a single one.
*/ */
/* eslint-disable max-len */
const common = require('../../common'); const common = require('../../common');
const supertest = require(`${__dirname}/../../../../src/node_modules/supertest`); const settings = require('../../../container/loadSettings.js').loadSettings();
const settings = require(`${__dirname}/../../../../tests/container/loadSettings.js`).loadSettings(); const supertest = require('ep_etherpad-lite/node_modules/supertest');
const api = supertest(`http://${settings.ip}:${settings.port}`);
const api = supertest(`http://${settings.ip}:${settings.port}`);
const apiKey = common.apiKey; const apiKey = common.apiKey;
const apiVersion = 1; const apiVersion = 1;
@ -47,16 +45,16 @@ const testImports = {
}, },
/* /*
"prefixcorrectlinenumber when introduced none list item - currently not supported see #3450":{ "prefixcorrectlinenumber when introduced none list item - currently not supported see #3450": {
input: '<html><body><ol><li>should be 1</li>test<li>should be 2</li></ol></body></html>', input: '<html><body><ol><li>should be 1</li>test<li>should be 2</li></ol></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body><ol start="1" class="number"><li>should be 1</li>test<li>should be 2</li></ol><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body><ol start="1" class="number"><li>should be 1</li>test<li>should be 2</li></ol><br></body></html>',
expectedText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n' expectedText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n',
} }
, ,
"newlinesshouldntresetlinenumber #2194":{ "newlinesshouldntresetlinenumber #2194": {
input: '<html><body><ol><li>should be 1</li>test<li>should be 2</li></ol></body></html>', input: '<html><body><ol><li>should be 1</li>test<li>should be 2</li></ol></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body><ol class="number"><li>should be 1</li>test<li>should be 2</li></ol><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body><ol class="number"><li>should be 1</li>test<li>should be 2</li></ol><br></body></html>',
expectedText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n' expectedText: '\t1. should be 1\n\ttest\n\t2. should be 2\n\n',
} }
*/ */
'ignoreAnyTagsOutsideBody': { 'ignoreAnyTagsOutsideBody': {
@ -69,88 +67,88 @@ const testImports = {
description: 'Indented lists are represented with tabs and without bullets', description: 'Indented lists are represented with tabs and without bullets',
input: '<html><body><ul class="indent"><li>indent</li><li>indent</ul></body></html>', input: '<html><body><ul class="indent"><li>indent</li><li>indent</ul></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body><ul class="indent"><li>indent</li><li>indent</ul><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body><ul class="indent"><li>indent</li><li>indent</ul><br></body></html>',
expectedText: '\tindent\n\tindent\n\n' expectedText: '\tindent\n\tindent\n\n',
}, },
lineWithMultipleSpaces: { 'lineWithMultipleSpaces': {
description: 'Multiple spaces should be collapsed', description: 'Multiple spaces should be collapsed',
input: '<html><body>Text with more than one space.<br></body></html>', input: '<html><body>Text with more than one space.<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Text with more than one space.<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Text with more than one space.<br><br></body></html>',
expectedText: 'Text with more than one space.\n\n' expectedText: 'Text with more than one space.\n\n',
}, },
lineWithMultipleNonBreakingAndNormalSpaces: { 'lineWithMultipleNonBreakingAndNormalSpaces': {
// XXX the HTML between "than" and "one" looks strange // XXX the HTML between "than" and "one" looks strange
description: 'non-breaking space should be preserved, but can be replaced when it', description: 'non-breaking space should be preserved, but can be replaced when it',
input: '<html><body>Text&nbsp;with&nbsp; more&nbsp;&nbsp;&nbsp;than &nbsp;one space.<br></body></html>', input: '<html><body>Text&nbsp;with&nbsp; more&nbsp;&nbsp;&nbsp;than &nbsp;one space.<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Text with&nbsp; more&nbsp;&nbsp; than&nbsp; one space.<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Text with&nbsp; more&nbsp;&nbsp; than&nbsp; one space.<br><br></body></html>',
expectedText: 'Text with more than one space.\n\n' expectedText: 'Text with more than one space.\n\n',
}, },
multiplenbsp: { 'multiplenbsp': {
description: 'Multiple non-breaking space should be preserved', description: 'Multiple non-breaking space should be preserved',
input: '<html><body>&nbsp;&nbsp;<br></body></html>', input: '<html><body>&nbsp;&nbsp;<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp;&nbsp;<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp;&nbsp;<br><br></body></html>',
expectedText: ' \n\n' expectedText: ' \n\n',
}, },
multipleNonBreakingSpaceBetweenWords: { 'multipleNonBreakingSpaceBetweenWords': {
description: 'A normal space is always inserted before a word', description: 'A normal space is always inserted before a word',
input: '<html><body>&nbsp;&nbsp;word1&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;word3<br></body></html>', input: '<html><body>&nbsp;&nbsp;word1&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;word3<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp; word1&nbsp; word2&nbsp;&nbsp; word3<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp; word1&nbsp; word2&nbsp;&nbsp; word3<br><br></body></html>',
expectedText: ' word1 word2 word3\n\n' expectedText: ' word1 word2 word3\n\n',
}, },
nonBreakingSpacePreceededBySpaceBetweenWords: { 'nonBreakingSpacePreceededBySpaceBetweenWords': {
description: 'A non-breaking space preceeded by a normal space', description: 'A non-breaking space preceeded by a normal space',
input: '<html><body> &nbsp;word1 &nbsp;word2 &nbsp;word3<br></body></html>', input: '<html><body> &nbsp;word1 &nbsp;word2 &nbsp;word3<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp;word1&nbsp; word2&nbsp; word3<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp;word1&nbsp; word2&nbsp; word3<br><br></body></html>',
expectedText: ' word1 word2 word3\n\n' expectedText: ' word1 word2 word3\n\n',
}, },
nonBreakingSpaceFollowededBySpaceBetweenWords: { 'nonBreakingSpaceFollowededBySpaceBetweenWords': {
description: 'A non-breaking space followed by a normal space', description: 'A non-breaking space followed by a normal space',
input: '<html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br></body></html>', input: '<html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br><br></body></html>',
expectedText: ' word1 word2 word3\n\n' expectedText: ' word1 word2 word3\n\n',
}, },
spacesAfterNewline: { 'spacesAfterNewline': {
description: 'Collapse spaces that follow a newline', description: 'Collapse spaces that follow a newline',
input:'<!doctype html><html><body>something<br> something<br></body></html>', input: '<!doctype html><html><body>something<br> something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br>something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br>something<br><br></body></html>',
expectedText: 'something\nsomething\n\n' expectedText: 'something\nsomething\n\n',
}, },
spacesAfterNewlineP: { 'spacesAfterNewlineP': {
description: 'Collapse spaces that follow a paragraph', description: 'Collapse spaces that follow a paragraph',
input:'<!doctype html><html><body>something<p></p> something<br></body></html>', input: '<!doctype html><html><body>something<p></p> something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>something<br><br></body></html>',
expectedText: 'something\n\nsomething\n\n' expectedText: 'something\n\nsomething\n\n',
}, },
spacesAtEndOfLine: { 'spacesAtEndOfLine': {
description: 'Collapse spaces that preceed/follow a newline', description: 'Collapse spaces that preceed/follow a newline',
input:'<html><body>something <br> something<br></body></html>', input: '<html><body>something <br> something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br>something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br>something<br><br></body></html>',
expectedText: 'something\nsomething\n\n' expectedText: 'something\nsomething\n\n',
}, },
spacesAtEndOfLineP: { 'spacesAtEndOfLineP': {
description: 'Collapse spaces that preceed/follow a paragraph', description: 'Collapse spaces that preceed/follow a paragraph',
input:'<html><body>something <p></p> something<br></body></html>', input: '<html><body>something <p></p> something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>something<br><br></body></html>',
expectedText: 'something\n\nsomething\n\n' expectedText: 'something\n\nsomething\n\n',
}, },
nonBreakingSpacesAfterNewlines: { 'nonBreakingSpacesAfterNewlines': {
description: 'Don\'t collapse non-breaking spaces that follow a newline', description: 'Don\'t collapse non-breaking spaces that follow a newline',
input:'<html><body>something<br>&nbsp;&nbsp;&nbsp;something<br></body></html>', input: '<html><body>something<br>&nbsp;&nbsp;&nbsp;something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br>&nbsp;&nbsp; something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br>&nbsp;&nbsp; something<br><br></body></html>',
expectedText: 'something\n something\n\n' expectedText: 'something\n something\n\n',
}, },
nonBreakingSpacesAfterNewlinesP: { 'nonBreakingSpacesAfterNewlinesP': {
description: 'Don\'t collapse non-breaking spaces that follow a paragraph', description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
input:'<html><body>something<p></p>&nbsp;&nbsp;&nbsp;something<br></body></html>', input: '<html><body>something<p></p>&nbsp;&nbsp;&nbsp;something<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>&nbsp;&nbsp; something<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>something<br><br>&nbsp;&nbsp; something<br><br></body></html>',
expectedText: 'something\n\n something\n\n' expectedText: 'something\n\n something\n\n',
}, },
collapseSpacesInsideElements: { 'collapseSpacesInsideElements': {
description: 'Preserve only one space when multiple are present', description: 'Preserve only one space when multiple are present',
input: '<html><body>Need <span> more </span> space<i> s </i> !<br></body></html>', input: '<html><body>Need <span> more </span> space<i> s </i> !<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s </em>!<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s </em>!<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
collapseSpacesAcrossNewlines: { 'collapseSpacesAcrossNewlines': {
description: 'Newlines and multiple spaces across newlines should be collapsed', description: 'Newlines and multiple spaces across newlines should be collapsed',
input: ` input: `
<html><body>Need <html><body>Need
@ -159,29 +157,29 @@ const testImports = {
<i> s </i> <i> s </i>
!<br></body></html>`, !<br></body></html>`,
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s </em>!<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s </em>!<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
multipleNewLinesAtBeginning: { 'multipleNewLinesAtBeginning': {
description: 'Multiple new lines and paragraphs at the beginning should be preserved', description: 'Multiple new lines and paragraphs at the beginning should be preserved',
input: '<html><body><br><br><p></p><p></p>first line<br><br>second line<br></body></html>', input: '<html><body><br><br><p></p><p></p>first line<br><br>second line<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body><br><br><br><br>first line<br><br>second line<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body><br><br><br><br>first line<br><br>second line<br><br></body></html>',
expectedText: '\n\n\n\nfirst line\n\nsecond line\n\n' expectedText: '\n\n\n\nfirst line\n\nsecond line\n\n',
}, },
multiLineParagraph:{ 'multiLineParagraph': {
description: "A paragraph with multiple lines should not loose spaces when lines are combined", description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
input:`<html><body> input: `<html><body>
<p> <p>
а б в г ґ д е є ж з и і ї й к л м н о а б в г ґ д е є ж з и і ї й к л м н о
п р с т у ф х ц ч ш щ ю я ь п р с т у ф х ц ч ш щ ю я ь
</p> </p>
</body></html>`, </body></html>`,
expectedHTML: '<!DOCTYPE HTML><html><body>&#1072; &#1073; &#1074; &#1075; &#1169; &#1076; &#1077; &#1108; &#1078; &#1079; &#1080; &#1110; &#1111; &#1081; &#1082; &#1083; &#1084; &#1085; &#1086; &#1087; &#1088; &#1089; &#1090; &#1091; &#1092; &#1093; &#1094; &#1095; &#1096; &#1097; &#1102; &#1103; &#1100;<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&#1072; &#1073; &#1074; &#1075; &#1169; &#1076; &#1077; &#1108; &#1078; &#1079; &#1080; &#1110; &#1111; &#1081; &#1082; &#1083; &#1084; &#1085; &#1086; &#1087; &#1088; &#1089; &#1090; &#1091; &#1092; &#1093; &#1094; &#1095; &#1096; &#1097; &#1102; &#1103; &#1100;<br><br></body></html>',
expectedText: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь\n\n' expectedText: 'а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь\n\n',
}, },
multiLineParagraphWithPre:{ 'multiLineParagraphWithPre': {
//XXX why is there &nbsp; before "in"? // XXX why is there &nbsp; before "in"?
description: "lines in preformatted text should be kept intact", description: 'lines in preformatted text should be kept intact',
input:`<html><body> input: `<html><body>
<p> <p>
а б в г ґ д е є ж з и і ї й к л м н о<pre>multiple а б в г ґ д е є ж з и і ї й к л м н о<pre>multiple
lines lines
@ -191,40 +189,40 @@ const testImports = {
ь</p> ь</p>
</body></html>`, </body></html>`,
expectedHTML: '<!DOCTYPE HTML><html><body>&#1072; &#1073; &#1074; &#1075; &#1169; &#1076; &#1077; &#1108; &#1078; &#1079; &#1080; &#1110; &#1111; &#1081; &#1082; &#1083; &#1084; &#1085; &#1086;<br>multiple<br>&nbsp;&nbsp; lines<br>&nbsp;in<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pre<br><br>&#1087; &#1088; &#1089; &#1090; &#1091; &#1092; &#1093; &#1094; &#1095; &#1096; &#1097; &#1102; &#1103; &#1100;<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>&#1072; &#1073; &#1074; &#1075; &#1169; &#1076; &#1077; &#1108; &#1078; &#1079; &#1080; &#1110; &#1111; &#1081; &#1082; &#1083; &#1084; &#1085; &#1086;<br>multiple<br>&nbsp;&nbsp; lines<br>&nbsp;in<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pre<br><br>&#1087; &#1088; &#1089; &#1090; &#1091; &#1092; &#1093; &#1094; &#1095; &#1096; &#1097; &#1102; &#1103; &#1100;<br><br></body></html>',
expectedText: 'а б в г ґ д е є ж з и і ї й к л м н о\nmultiple\n lines\n in\n pre\n\nп р с т у ф х ц ч ш щ ю я ь\n\n' expectedText: 'а б в г ґ д е є ж з и і ї й к л м н о\nmultiple\n lines\n in\n pre\n\nп р с т у ф х ц ч ш щ ю я ь\n\n',
}, },
preIntroducesASpace: { 'preIntroducesASpace': {
description: "pre should be on a new line not preceeded by a space", description: 'pre should be on a new line not preceeded by a space',
input:`<html><body><p> input: `<html><body><p>
1 1
<pre>preline <pre>preline
</pre></p></body></html>`, </pre></p></body></html>`,
expectedHTML: '<!DOCTYPE HTML><html><body>1<br>preline<br><br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>1<br>preline<br><br><br></body></html>',
expectedText: '1\npreline\n\n\n' expectedText: '1\npreline\n\n\n',
}, },
dontDeleteSpaceInsideElements: { 'dontDeleteSpaceInsideElements': {
description: 'Preserve spaces inside elements', description: 'Preserve spaces inside elements',
input: '<html><body>Need<span> more </span>space<i> s </i>!<br></body></html>', input: '<html><body>Need<span> more </span>space<i> s </i>!<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s </em>!<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s </em>!<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
dontDeleteSpaceOutsideElements: { 'dontDeleteSpaceOutsideElements': {
description: 'Preserve spaces outside elements', description: 'Preserve spaces outside elements',
input: '<html><body>Need <span>more</span> space <i>s</i> !<br></body></html>', input: '<html><body>Need <span>more</span> space <i>s</i> !<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s</em> !<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s</em> !<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
dontDeleteSpaceAtEndOfElement: { 'dontDeleteSpaceAtEndOfElement': {
description: 'Preserve spaces at the end of an element', description: 'Preserve spaces at the end of an element',
input: '<html><body>Need <span>more </span>space <i>s </i>!<br></body></html>', input: '<html><body>Need <span>more </span>space <i>s </i>!<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s </em>!<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space <em>s </em>!<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
dontDeleteSpaceAtBeginOfElements: { 'dontDeleteSpaceAtBeginOfElements': {
description: 'Preserve spaces at the start of an element', description: 'Preserve spaces at the start of an element',
input: '<html><body>Need<span> more</span> space<i> s</i> !<br></body></html>', input: '<html><body>Need<span> more</span> space<i> s</i> !<br></body></html>',
expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s</em> !<br><br></body></html>', expectedHTML: '<!DOCTYPE HTML><html><body>Need more space<em> s</em> !<br><br></body></html>',
expectedText: 'Need more space s !\n\n' expectedText: 'Need more space s !\n\n',
}, },
}; };
@ -315,7 +313,7 @@ describe(__filename, function () {
function endPoint(point, version) { function endPoint(point, version) {
version = version || apiVersion; version = version || apiVersion;
return `/api/${version}/${point}?apikey=${apiKey}`; return `/api/${version}/${point}?apikey=${apiKey}`;
}; }
function makeid() { function makeid() {
let text = ''; let text = '';

View file

@ -1,18 +1,17 @@
'use strict'; 'use strict';
/* eslint-disable max-len */
/* /*
* While importexport tests target the `setHTML` API endpoint, which is nearly identical to what happens * While importexport tests target the `setHTML` API endpoint, which is nearly identical to what
* when a user manually imports a document via the UI, the contentcollector tests here don't use rehype to process * happens when a user manually imports a document via the UI, the contentcollector tests here don't
* the document. Rehype removes spaces and newĺines were applicable, so the expected results here can * use rehype to process the document. Rehype removes spaces and newĺines were applicable, so the
* differ from importexport.js. * expected results here can differ from importexport.js.
* *
* If you add tests here, please also add them to importexport.js * If you add tests here, please also add them to importexport.js
*/ */
const contentcollector = require('../../../src/static/js/contentcollector'); const AttributePool = require('ep_etherpad-lite/static/js/AttributePool');
const AttributePool = require('../../../src/static/js/AttributePool'); const cheerio = require('ep_etherpad-lite/node_modules/cheerio');
const cheerio = require('../../../src/node_modules/cheerio'); const contentcollector = require('ep_etherpad-lite/static/js/contentcollector');
const tests = { const tests = {
nestedLi: { nestedLi: {
@ -124,74 +123,74 @@ const tests = {
lineWithMultipleSpaces: { lineWithMultipleSpaces: {
description: 'Multiple spaces should be preserved', description: 'Multiple spaces should be preserved',
html: '<html><body>Text with more than one space.<br></body></html>', html: '<html><body>Text with more than one space.<br></body></html>',
expectedLineAttribs: [ '+10' ], expectedLineAttribs: ['+10'],
expectedText: ['Text with more than one space.'] expectedText: ['Text with more than one space.'],
}, },
lineWithMultipleNonBreakingAndNormalSpaces: { lineWithMultipleNonBreakingAndNormalSpaces: {
description: 'non-breaking and normal space should be preserved', description: 'non-breaking and normal space should be preserved',
html: '<html><body>Text&nbsp;with&nbsp; more&nbsp;&nbsp;&nbsp;than &nbsp;one space.<br></body></html>', html: '<html><body>Text&nbsp;with&nbsp; more&nbsp;&nbsp;&nbsp;than &nbsp;one space.<br></body></html>',
expectedLineAttribs: [ '+10' ], expectedLineAttribs: ['+10'],
expectedText: ['Text with more than one space.'] expectedText: ['Text with more than one space.'],
}, },
multiplenbsp: { multiplenbsp: {
description: 'Multiple nbsp should be preserved', description: 'Multiple nbsp should be preserved',
html: '<html><body>&nbsp;&nbsp;<br></body></html>', html: '<html><body>&nbsp;&nbsp;<br></body></html>',
expectedLineAttribs: [ '+2' ], expectedLineAttribs: ['+2'],
expectedText: [' '] expectedText: [' '],
}, },
multipleNonBreakingSpaceBetweenWords: { multipleNonBreakingSpaceBetweenWords: {
description: 'Multiple nbsp between words ', description: 'Multiple nbsp between words ',
html: '<html><body>&nbsp;&nbsp;word1&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;word3<br></body></html>', html: '<html><body>&nbsp;&nbsp;word1&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;word3<br></body></html>',
expectedLineAttribs: [ '+m' ], expectedLineAttribs: ['+m'],
expectedText: [' word1 word2 word3'] expectedText: [' word1 word2 word3'],
}, },
nonBreakingSpacePreceededBySpaceBetweenWords: { nonBreakingSpacePreceededBySpaceBetweenWords: {
description: 'A non-breaking space preceeded by a normal space', description: 'A non-breaking space preceeded by a normal space',
html: '<html><body> &nbsp;word1 &nbsp;word2 &nbsp;word3<br></body></html>', html: '<html><body> &nbsp;word1 &nbsp;word2 &nbsp;word3<br></body></html>',
expectedLineAttribs: [ '+l' ], expectedLineAttribs: ['+l'],
expectedText: [' word1 word2 word3'] expectedText: [' word1 word2 word3'],
}, },
nonBreakingSpaceFollowededBySpaceBetweenWords: { nonBreakingSpaceFollowededBySpaceBetweenWords: {
description: 'A non-breaking space followed by a normal space', description: 'A non-breaking space followed by a normal space',
html: '<html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br></body></html>', html: '<html><body>&nbsp; word1&nbsp; word2&nbsp; word3<br></body></html>',
expectedLineAttribs: [ '+l' ], expectedLineAttribs: ['+l'],
expectedText: [' word1 word2 word3'] expectedText: [' word1 word2 word3'],
}, },
spacesAfterNewline: { spacesAfterNewline: {
description: 'Don\'t collapse spaces that follow a newline', description: 'Don\'t collapse spaces that follow a newline',
html:'<!doctype html><html><body>something<br> something<br></body></html>', html: '<!doctype html><html><body>something<br> something<br></body></html>',
expectedLineAttribs: ['+9', '+m'], expectedLineAttribs: ['+9', '+m'],
expectedText: ['something', ' something'] expectedText: ['something', ' something'],
}, },
spacesAfterNewlineP: { spacesAfterNewlineP: {
description: 'Don\'t collapse spaces that follow a empty paragraph', description: 'Don\'t collapse spaces that follow a empty paragraph',
html:'<!doctype html><html><body>something<p></p> something<br></body></html>', html: '<!doctype html><html><body>something<p></p> something<br></body></html>',
expectedLineAttribs: ['+9', '', '+m'], expectedLineAttribs: ['+9', '', '+m'],
expectedText: ['something', '', ' something'] expectedText: ['something', '', ' something'],
}, },
spacesAtEndOfLine: { spacesAtEndOfLine: {
description: 'Don\'t collapse spaces that preceed/follow a newline', description: 'Don\'t collapse spaces that preceed/follow a newline',
html:'<html><body>something <br> something<br></body></html>', html: '<html><body>something <br> something<br></body></html>',
expectedLineAttribs: ['+l', '+m'], expectedLineAttribs: ['+l', '+m'],
expectedText: ['something ', ' something'] expectedText: ['something ', ' something'],
}, },
spacesAtEndOfLineP: { spacesAtEndOfLineP: {
description: 'Don\'t collapse spaces that preceed/follow a empty paragraph', description: 'Don\'t collapse spaces that preceed/follow a empty paragraph',
html:'<html><body>something <p></p> something<br></body></html>', html: '<html><body>something <p></p> something<br></body></html>',
expectedLineAttribs: ['+l', '', '+m'], expectedLineAttribs: ['+l', '', '+m'],
expectedText: ['something ', '', ' something'] expectedText: ['something ', '', ' something'],
}, },
nonBreakingSpacesAfterNewlines: { nonBreakingSpacesAfterNewlines: {
description: 'Don\'t collapse non-breaking spaces that follow a newline', description: 'Don\'t collapse non-breaking spaces that follow a newline',
html:'<html><body>something<br>&nbsp;&nbsp;&nbsp;something<br></body></html>', html: '<html><body>something<br>&nbsp;&nbsp;&nbsp;something<br></body></html>',
expectedLineAttribs: ['+9', '+c'], expectedLineAttribs: ['+9', '+c'],
expectedText: ['something', ' something'] expectedText: ['something', ' something'],
}, },
nonBreakingSpacesAfterNewlinesP: { nonBreakingSpacesAfterNewlinesP: {
description: 'Don\'t collapse non-breaking spaces that follow a paragraph', description: 'Don\'t collapse non-breaking spaces that follow a paragraph',
html:'<html><body>something<p></p>&nbsp;&nbsp;&nbsp;something<br></body></html>', html: '<html><body>something<p></p>&nbsp;&nbsp;&nbsp;something<br></body></html>',
expectedLineAttribs: ['+9', '', '+c'], expectedLineAttribs: ['+9', '', '+c'],
expectedText: ['something', '', ' something'] expectedText: ['something', '', ' something'],
}, },
preserveSpacesInsideElements: { preserveSpacesInsideElements: {
description: 'Preserve all spaces when multiple are present', description: 'Preserve all spaces when multiple are present',
@ -207,27 +206,27 @@ const tests = {
space space
<i> s </i> <i> s </i>
!<br></body></html>`, !<br></body></html>`,
expectedLineAttribs: [ '+19*0+4+b' ], expectedLineAttribs: ['+19*0+4+b'],
expectedText: [ 'Need more space s !' ] expectedText: ['Need more space s !'],
}, },
multipleNewLinesAtBeginning: { multipleNewLinesAtBeginning: {
description: 'Multiple new lines at the beginning should be preserved', description: 'Multiple new lines at the beginning should be preserved',
html: '<html><body><br><br><p></p><p></p>first line<br><br>second line<br></body></html>', html: '<html><body><br><br><p></p><p></p>first line<br><br>second line<br></body></html>',
expectedLineAttribs: ['', '', '', '', '+a', '', '+b'], expectedLineAttribs: ['', '', '', '', '+a', '', '+b'],
expectedText: [ '', '', '', '', 'first line', '', 'second line'] expectedText: ['', '', '', '', 'first line', '', 'second line'],
}, },
multiLineParagraph:{ multiLineParagraph: {
description: "A paragraph with multiple lines should not loose spaces when lines are combined", description: 'A paragraph with multiple lines should not loose spaces when lines are combined',
html:`<html><body><p> html: `<html><body><p>
а б в г ґ д е є ж з и і ї й к л м н о а б в г ґ д е є ж з и і ї й к л м н о
п р с т у ф х ц ч ш щ ю я ь</p> п р с т у ф х ц ч ш щ ю я ь</p>
</body></html>`, </body></html>`,
expectedLineAttribs: [ '+1t' ], expectedLineAttribs: ['+1t'],
expectedText: ["а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь"] expectedText: ['а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ю я ь'],
}, },
multiLineParagraphWithPre:{ multiLineParagraphWithPre: {
description: "lines in preformatted text should be kept intact", description: 'lines in preformatted text should be kept intact',
html:`<html><body><p> html: `<html><body><p>
а б в г ґ д е є ж з и і ї й к л м н о<pre>multiple а б в г ґ д е є ж з и і ї й к л м н о<pre>multiple
lines lines
in in
@ -235,41 +234,48 @@ pre
</pre></p><p>п р с т у ф х ц ч ш щ ю я </pre></p><p>п р с т у ф х ц ч ш щ ю я
ь</p> ь</p>
</body></html>`, </body></html>`,
expectedLineAttribs: [ '+11', '+8', '+5', '+2', '+3', '+r' ], expectedLineAttribs: ['+11', '+8', '+5', '+2', '+3', '+r'],
expectedText: ['а б в г ґ д е є ж з и і ї й к л м н о', 'multiple', 'lines', 'in', 'pre', 'п р с т у ф х ц ч ш щ ю я ь'] expectedText: [
'а б в г ґ д е є ж з и і ї й к л м н о',
'multiple',
'lines',
'in',
'pre',
'п р с т у ф х ц ч ш щ ю я ь',
],
}, },
preIntroducesASpace: { preIntroducesASpace: {
description: "pre should be on a new line not preceeded by a space", description: 'pre should be on a new line not preceeded by a space',
html:`<html><body><p> html: `<html><body><p>
1 1
<pre>preline <pre>preline
</pre></p></body></html>`, </pre></p></body></html>`,
expectedLineAttribs: [ '+6', '+7' ], expectedLineAttribs: ['+6', '+7'],
expectedText: [' 1 ', 'preline'] expectedText: [' 1 ', 'preline'],
}, },
dontDeleteSpaceInsideElements: { dontDeleteSpaceInsideElements: {
description: 'Preserve spaces on the beginning and end of a element', description: 'Preserve spaces on the beginning and end of a element',
html: '<html><body>Need<span> more </span>space<i> s </i>!<br></body></html>', html: '<html><body>Need<span> more </span>space<i> s </i>!<br></body></html>',
expectedLineAttribs: ['+f*0+3+1'], expectedLineAttribs: ['+f*0+3+1'],
expectedText: ['Need more space s !'] expectedText: ['Need more space s !'],
}, },
dontDeleteSpaceOutsideElements: { dontDeleteSpaceOutsideElements: {
description: 'Preserve spaces outside elements', description: 'Preserve spaces outside elements',
html: '<html><body>Need <span>more</span> space <i>s</i> !<br></body></html>', html: '<html><body>Need <span>more</span> space <i>s</i> !<br></body></html>',
expectedLineAttribs: ['+g*0+1+2'], expectedLineAttribs: ['+g*0+1+2'],
expectedText: ['Need more space s !'] expectedText: ['Need more space s !'],
}, },
dontDeleteSpaceAtEndOfElement: { dontDeleteSpaceAtEndOfElement: {
description: 'Preserve spaces at the end of an element', description: 'Preserve spaces at the end of an element',
html: '<html><body>Need <span>more </span>space <i>s </i>!<br></body></html>', html: '<html><body>Need <span>more </span>space <i>s </i>!<br></body></html>',
expectedLineAttribs: ['+g*0+2+1'], expectedLineAttribs: ['+g*0+2+1'],
expectedText: ['Need more space s !'] expectedText: ['Need more space s !'],
}, },
dontDeleteSpaceAtBeginOfElements: { dontDeleteSpaceAtBeginOfElements: {
description: 'Preserve spaces at the start of an element', description: 'Preserve spaces at the start of an element',
html: '<html><body>Need<span> more</span> space<i> s</i> !<br></body></html>', html: '<html><body>Need<span> more</span> space<i> s</i> !<br></body></html>',
expectedLineAttribs: ['+f*0+2+2'], expectedLineAttribs: ['+f*0+2+2'],
expectedText: ['Need more space s !'] expectedText: ['Need more space s !'],
}, },
}; };
@ -325,7 +331,7 @@ describe(__filename, function () {
function arraysEqual(a, b) { function arraysEqual(a, b) {
if (a === b) return true; if (a === b) return true;
if (a == null || b == null) return false; if (a == null || b == null) return false;
if (a.length != b.length) return false; if (a.length !== b.length) return false;
// If you don't care about the order of the elements inside // If you don't care about the order of the elements inside
// the array, you should sort both arrays here. // the array, you should sort both arrays here.