var should = require('chai').should(); var offendersHelpers = require('../../lib/offendersHelpers'); describe('offendersHelpers', function() { describe('domPathToArray', function() { it('should transform a path to an array', function() { var result = offendersHelpers.domPathToArray('body > section#page > div.alternate-color > ul.retroGuide > li[0] > div.retro-chaine.france2'); result.should.deep.equal(['body', 'section#page', 'div.alternate-color', 'ul.retroGuide', 'li[0]', 'div.retro-chaine.france2']); }); it('should work even if a space is missing', function() { var result = offendersHelpers.domPathToArray('body > section#page> div.alternate-color > ul.retroGuide >li[0] > div.retro-chaine.france2'); result.should.deep.equal(['body', 'section#page', 'div.alternate-color', 'ul.retroGuide', 'li[0]', 'div.retro-chaine.france2']); }); }); describe('listOfDomArraysToTree', function() { it('should transform a list of arrays into a tree', function() { var result = offendersHelpers.listOfDomArraysToTree([ ['body', 'section#page', 'div.alternate-color', 'ul.retroGuide', 'li[0]', 'div.retro-chaine.france2'], ['body', 'section#page', 'div.alternate-color', 'ul.retroGuide', 'li[0]', 'div.retro-chaine.france2'], ['body', 'section#page', 'div.alternate-color', 'ul.retroGuide', 'li[1]', 'div.retro-chaine.france2'] ]); result.should.deep.equal({ 'body': { 'section#page': { 'div.alternate-color': { 'ul.retroGuide': { 'li[0]': { 'div.retro-chaine.france2': 2 }, 'li[1]': { 'div.retro-chaine.france2': 1 } } } } } }); }); }); describe('domTreeToHTML', function() { it('should transform a dom tree into HTML with the awaited format', function() { var result = offendersHelpers.domTreeToHTML({ 'body': { 'ul.retroGuide': { 'li[0]': { 'div.retro-chaine.france2': 2 }, 'li[1]': { 'div.retro-chaine.france2': 1 } } } }); result.should.equal('
body
ul.retroGuide
li[0]
div.retro-chaine.france2 (x2)
li[1]
div.retro-chaine.france2
'); }); }); describe('listOfDomPathsToHTML', function() { it('should transform a list of path strings into HTML', function() { var result = offendersHelpers.listOfDomPathsToHTML([ 'body > ul.retroGuide > li[0] > div.retro-chaine.france2', 'body > ul.retroGuide > li[1] > div.retro-chaine.france2', 'body > ul.retroGuide > li[0] > div.retro-chaine.france2', ]); result.should.equal('
body
ul.retroGuide
li[0]
div.retro-chaine.france2 (x2)
li[1]
div.retro-chaine.france2
'); }); }); describe('domPathToButton', function() { it('should transform html', function() { var result = offendersHelpers.domPathToButton('html'); result.should.equal('
html
'); }); it('should transform body', function() { var result = offendersHelpers.domPathToButton('body'); result.should.equal('
body
'); }); it('should transform head', function() { var result = offendersHelpers.domPathToButton('head'); result.should.equal('
head
'); }); it('should transform #document', function() { var result = offendersHelpers.domPathToButton('#document'); result.should.equal('
document
'); }); it('should transform window', function() { var result = offendersHelpers.domPathToButton('window'); result.should.equal('
window
'); }); it('should transform a standard in-body element', function() { var result = offendersHelpers.domPathToButton('body > div#colorbox > div#cboxContent'); result.should.equal('
DOM element div#cboxContent
body
div#colorbox
div#cboxContent
'); }); it('should transform a domFragment element', function() { var result = offendersHelpers.domPathToButton('DocumentFragment'); result.should.equal('
Fragment
'); }); it('should transform a domFragment element', function() { var result = offendersHelpers.domPathToButton('DocumentFragment > div#colorbox > div#cboxContent'); result.should.equal('
Fragment element div#cboxContent
DocumentFragment
div#colorbox
div#cboxContent
'); }); it('should transform an not-attached element', function() { var result = offendersHelpers.domPathToButton('div#sizcache'); result.should.equal('
Created element div#sizcache
'); }); it('should transform an not-attached element path', function() { var result = offendersHelpers.domPathToButton('div > div#sizcache'); result.should.equal('
Created element div#sizcache
div
div#sizcache
'); }); }); describe('backtraceToArray', function() { it('should transform a backtrace into an array', function() { var result = offendersHelpers.backtraceToArray('http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js:1 / http://pouet.com/js/main.js:1'); result.should.deep.equal([ { file: 'http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js', line: 1 }, { file: 'http://pouet.com/js/main.js', line: 1 } ]); }); it('should return null if it fails', function() { var result = offendersHelpers.backtraceToArray('http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js:1 /http://pouet.com/js/main.js:1'); should.equal(result, null); }); }); describe('backtraceArrayToHtml', function() { it('should create a button from a backtrace array', function() { var result = offendersHelpers.backtraceArrayToHtml([ { file: 'http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js', line: 1 }, { file: 'http://pouet.com/js/main.js', line: 1 } ]); result.should.equal('
backtrace
http://pouet.com/js/jquery.footer-transverse-min-v1.0.20.js line 1
http://pouet.com/js/main.js line 1
'); }); it('should display "no backtrace"', function() { var result = offendersHelpers.backtraceArrayToHtml([]); result.should.equal('
no backtrace
'); }); }); describe('sortVarsLikeChromeDevTools', function() { it('should sort in the same strange order', function() { var result = offendersHelpers.sortVarsLikeChromeDevTools([ 'a', 'aaa', 'a2', 'b', 'A', 'AAA', 'B', '_a', '_aaa', '__a', 'a_a', 'aA', 'a__', '$', '$a' ]); result.should.deep.equal([ '$', '$a', 'A', 'AAA', 'B', '__a', '_a', '_aaa', 'a', 'a2', 'aA', 'a__', 'a_a', 'aaa', 'b' ]); }); }); });