132 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { convertHtmlToTree } from 'src/services/html_converter/html_tree_converter.service.js'
 | 
						|
 | 
						|
describe('html_tree_converter', () => {
 | 
						|
  describe('convertHtmlToTree', () => {
 | 
						|
    it('converts html into a tree structure', () => {
 | 
						|
      const input = '1 <p>2</p> <b>3<img src="a">4</b>5'
 | 
						|
      expect(convertHtmlToTree(input)).to.eql([
 | 
						|
        '1 ',
 | 
						|
        [
 | 
						|
          '<p>',
 | 
						|
          ['2'],
 | 
						|
          '</p>'
 | 
						|
        ],
 | 
						|
        ' ',
 | 
						|
        [
 | 
						|
          '<b>',
 | 
						|
          [
 | 
						|
            '3',
 | 
						|
            ['<img src="a">'],
 | 
						|
            '4'
 | 
						|
          ],
 | 
						|
          '</b>'
 | 
						|
        ],
 | 
						|
        '5'
 | 
						|
      ])
 | 
						|
    })
 | 
						|
    it('converts html to tree while preserving tag formatting', () => {
 | 
						|
      const input = '1 <p >2</p><b >3<img   src="a">4</b>5'
 | 
						|
      expect(convertHtmlToTree(input)).to.eql([
 | 
						|
        '1 ',
 | 
						|
        [
 | 
						|
          '<p >',
 | 
						|
          ['2'],
 | 
						|
          '</p>'
 | 
						|
        ],
 | 
						|
        [
 | 
						|
          '<b >',
 | 
						|
          [
 | 
						|
            '3',
 | 
						|
            ['<img   src="a">'],
 | 
						|
            '4'
 | 
						|
          ],
 | 
						|
          '</b>'
 | 
						|
        ],
 | 
						|
        '5'
 | 
						|
      ])
 | 
						|
    })
 | 
						|
    it('converts semi-broken html', () => {
 | 
						|
      const input = '1 <br> 2 <p> 42'
 | 
						|
      expect(convertHtmlToTree(input)).to.eql([
 | 
						|
        '1 ',
 | 
						|
        ['<br>'],
 | 
						|
        ' 2 ',
 | 
						|
        [
 | 
						|
          '<p>',
 | 
						|
          [' 42']
 | 
						|
        ]
 | 
						|
      ])
 | 
						|
    })
 | 
						|
    it('realistic case 1', () => {
 | 
						|
      const input = '<p><span class="h-card"><a class="u-url mention" data-user="9wRC6T2ZZiKWJ0vUi8" href="https://cawfee.club/users/benis" rel="ugc">@<span>benis</span></a></span> <span class="h-card"><a class="u-url mention" data-user="194" href="https://shigusegubu.club/users/hj" rel="ugc">@<span>hj</span></a></span> nice</p>'
 | 
						|
      expect(convertHtmlToTree(input)).to.eql([
 | 
						|
        [
 | 
						|
          '<p>',
 | 
						|
          [
 | 
						|
            [
 | 
						|
              '<span class="h-card">',
 | 
						|
              [
 | 
						|
                [
 | 
						|
                  '<a class="u-url mention" data-user="9wRC6T2ZZiKWJ0vUi8" href="https://cawfee.club/users/benis" rel="ugc">',
 | 
						|
                  [
 | 
						|
                    '@',
 | 
						|
                    [
 | 
						|
                      '<span>',
 | 
						|
                      [
 | 
						|
                        'benis'
 | 
						|
                      ],
 | 
						|
                      '</span>'
 | 
						|
                    ]
 | 
						|
                  ],
 | 
						|
                  '</a>'
 | 
						|
                ]
 | 
						|
              ],
 | 
						|
              '</span>'
 | 
						|
            ],
 | 
						|
            ' ',
 | 
						|
            [
 | 
						|
              '<span class="h-card">',
 | 
						|
              [
 | 
						|
                [
 | 
						|
                  '<a class="u-url mention" data-user="194" href="https://shigusegubu.club/users/hj" rel="ugc">',
 | 
						|
                  [
 | 
						|
                    '@',
 | 
						|
                    [
 | 
						|
                      '<span>',
 | 
						|
                      [
 | 
						|
                        'hj'
 | 
						|
                      ],
 | 
						|
                      '</span>'
 | 
						|
                    ]
 | 
						|
                  ],
 | 
						|
                  '</a>'
 | 
						|
                ]
 | 
						|
              ],
 | 
						|
              '</span>'
 | 
						|
            ],
 | 
						|
            ' nice'
 | 
						|
          ],
 | 
						|
          '</p>'
 | 
						|
        ]
 | 
						|
      ])
 | 
						|
    })
 | 
						|
    it('realistic case 2', () => {
 | 
						|
      const inputOutput = 'Country improv: give me a city<br/>Audience: Memphis<br/>Improv troupe: come on, a better one<br/>Audience: el paso'
 | 
						|
      expect(convertHtmlToTree(inputOutput)).to.eql([
 | 
						|
        'Country improv: give me a city',
 | 
						|
        [
 | 
						|
          '<br/>'
 | 
						|
        ],
 | 
						|
        'Audience: Memphis',
 | 
						|
        [
 | 
						|
          '<br/>'
 | 
						|
        ],
 | 
						|
        'Improv troupe: come on, a better one',
 | 
						|
        [
 | 
						|
          '<br/>'
 | 
						|
        ],
 | 
						|
        'Audience: el paso'
 | 
						|
      ])
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |