const contentcollector = require('../../../src/static/js/contentcollector'); const AttributePool = require('../../../src/static/js/AttributePool'); const cheerio = require('../../../src/node_modules/cheerio'); /** * The html of these tests is intentionally collapsed into a single line, except in special cases. * All tests are duplicated in ./tests/backend/specs/api/importexport/ where they are properly indented. * * While importexport tests target the `setHTML` API endpoint, which is nearly identical to what happens * when a user manually imports a document via the UI, the contentcollector tests don't use rehype to process * the document. Rehype remove spaces and newĺines were applicable. * * Note the final
in every of the tests except when the body ends in a list. */ const tests = { nestedOrderedLi: { description: 'Complex nested Li', html: '
  1. one
    1. 1.1
  2. two
', expectedLineAttribs: [ '*0*1*2*3+1+3', '*0*4*2*5+1+3', '*0*1*2*5+1+3', ], expectedText: [ '*one', '*1.1', '*two', ], }, complexNest: { description: 'Complex list of different types', html: '
  1. item
    1. item1
    2. item2
', expectedLineAttribs: [ '*0*1*2+1+3', '*0*1*2+1+3', '*0*1*2+1+1', '*0*1*2+1+1', '*0*1*2+1+1', '*0*3*2+1+1', '*0*3*2+1+1', '*0*4*2*5+1+4', '*0*6*2*7+1+5', '*0*6*2*7+1+5', ], expectedText: [ '*one', '*two', '*0', '*1', '*2', '*3', '*4', '*item', '*item1', '*item2', ], }, ul: { description: 'Tests if uls properly get attributes', html: '
div

foo

', expectedLineAttribs: ['*0*1*2+1+1', '*0*1*2+1+1', '+3', '+3'], expectedText: ['*a', '*b', 'div', 'foo'], }, ulIndented: { description: 'Tests if indented uls properly get attributes', html: '

foo

', expectedLineAttribs: ['*0*1*2+1+1', '*0*3*2+1+1', '*0*1*2+1+1', '+3'], expectedText: ['*a', '*b', '*a', 'foo'], }, ol: { description: 'Tests if ols properly get line numbers when in a normal OL', html: '
  1. a
  2. b
  3. c

test

', expectedLineAttribs: ['*0*1*2*3+1+1', '*0*1*2*3+1+1', '*0*1*2*3+1+1', '+4'], expectedText: ['*a', '*b', '*c', 'test'], noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?', }, lineDoBreakInOl: { description: 'A single completely empty line break within an ol should reset count if OL is closed off..', html: '
  1. should be 1

hello

  1. should be 1
  2. should be 2

', expectedLineAttribs: ['*0*1*2*3+1+b', '+5', '*0*1*2*4+1+b', '*0*1*2*4+1+b', ''], expectedText: ['*should be 1', 'hello', '*should be 1', '*should be 2', ''], noteToSelf: "Shouldn't include attribute marker in the

line", }, bulletListInOL: { description: 'A bullet within an OL should not change numbering..', html: '

  1. should be 1
  2. should be 2

', expectedLineAttribs: ['*0*1*2*3+1+b', '*0*4*2*3+1+i', '*0*1*2*5+1+b', ''], expectedText: ['*should be 1', '*should be a bullet', '*should be 2', ''], }, testP: { description: 'A single

should create a new line', html: '

', expectedLineAttribs: ['', ''], expectedText: ['', ''], noteToSelf: '

should create a line break but not break numbering', }, nestedOl: { description: 'Tests if ols properly get line numbers when in a normal OL', html: 'a
  1. b
    1. c
notlist

foo

', expectedLineAttribs: ['+1', '*0*1*2*3+1+1', '*0*4*2*5+1+1', '+7', '+3'], expectedText: ['a', '*b', '*c', 'notlist', 'foo'], noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?', }, nestedOl2: { description: 'First item being an UL then subsequent being OL will fail', html: '', expectedLineAttribs: ['+1', '*0*1*2*3+1+1', '*0*4*2*5+1+1'], expectedText: ['a', '*b', '*c'], noteToSelf: 'Ensure empty P does not induce line attribute marker, wont this break the editor?', disabled: true, }, lineDontBreakOL: { description: 'A single completely empty line break within an ol should NOT reset count', html: '
  1. should be 1
  2. should be 2
  3. should be 3

', expectedLineAttribs: [], expectedText: ['*should be 1', '*should be 2', '*should be 3'], noteToSelf: "

should create a line break but not break numbering -- This is what I can't get working!", disabled: true, }, brDontBreakOL: { description: 'A single completely empty line break using
within an ol should NOT reset count', html: '
  1. should be 1

  2. should be 2
  3. should be 3

', expectedLineAttribs: [], expectedText: ['*should be 1', '*should be 2', '*should be 3'], disabled: true, }, normalNewline: { description: 'A normal newline as
should work', html: 'line1
line2
', expectedLineAttribs: ['+5','+5'], expectedText: ['line1', 'line2'], }, indents: { disabled:true, description: 'Two indentations', html: '
', expectedLineAttribs: ['*0*1*2+1+7', '*0*1*2+1+7', '*0*3*2+1+7', '*0*3*2+1+7'], expectedText: ['*indent1', '*indent1', '*indent2', '*indent2', '*indent1'] }, indentsAndNewlines: { disabled: true, // does