const VALUES = Array . from ( 'abcdefghijklmnopqrstuvwxyz' ) ; function toObjects ( array ) { return array . split ( '' ) . map ( x => ( { id : x } ) ) ; } function permute ( ) { const values = VALUES . slice ( ) ; const number = Math . floor ( Math . random ( ) * VALUES . length ) ; const permuted = [ ] ; for ( let i = 0 ; i < number ; i ++ ) { permuted . push ( ... values . splice ( Math . floor ( Math . random ( ) * ( number - i ) ) , 1 ) ) ; } return permuted . join ( '' ) ; } export default { props : { values : toObjects ( 'abc' ) } , html : '(a)(b)(c)' , test ( { assert , component , target } ) { function test ( sequence ) { const previous = target . textContent ; const expected = sequence . split ( '' ) . map ( x => `(${ x })` ) . join ( '' ) ; component . values = toObjects ( sequence ) ; assert . htmlEqual ( target . innerHTML , expected , `\n${ previous } -> ${ expected }\n${ target . textContent }` ) ; } test ( 'abc' ) ; test ( 'abcd' ) ; test ( 'abecd' ) ; test ( 'fabecd' ) ; test ( 'fabed' ) ; test ( 'beadf' ) ; test ( 'ghbeadf' ) ; test ( 'gf' ) ; test ( 'gc' ) ; test ( 'g' ) ; test ( '' ) ; test ( 'abc' ) ; test ( 'duqbmineapjhtlofrskcg' ) ; test ( 'hdnkjougmrvftewsqpailcb' ) ; test ( 'bidhfacge' ) ; test ( 'kgjnempcboaflidh' ) ; test ( 'fekbijachgd' ) ; test ( 'kdmlgfbicheja' ) ; for ( let i = 0 ; i < 100 ; i += 1 ) test ( permute ( ) ) ; } } ;