import 'mocha' ; import { expect } from 'chai' ; import { scrambledEqual , sequenceEqual } from '@/application/Common/Array' ; import { ComparerTestScenario } from './Array.ComparerTestScenario' ; describe ( 'Array' , ( ) => { describe ( 'scrambledEqual' , ( ) => { describe ( 'throws if arguments are undefined' , ( ) => { it ( 'first argument is undefined' , ( ) => { const expectedError = 'undefined first array' ; const act = ( ) => scrambledEqual ( undefined , [ ] ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; it ( 'second arguments is undefined' , ( ) => { const expectedError = 'undefined second array' ; const act = ( ) => scrambledEqual ( [ ] , undefined ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; } ) ; describe ( 'returns as expected' , ( ) => { const scenario = new ComparerTestScenario ( ) . addSameItemsWithSameOrder ( true ) . addSameItemsWithDifferentOrder ( true ) . addDifferentItemsWithSameLength ( false ) . addDifferentItemsWithDifferentLength ( false ) ; scenario . forEachCase ( ( testCase ) => { it ( testCase . name , ( ) => { const actual = scrambledEqual ( testCase . first , testCase . second ) ; expect ( actual ) . to . equal ( testCase . expected ) ; } ) ; } ) ; } ) ; } ) ; describe ( 'sequenceEqual' , ( ) => { describe ( 'throws if arguments are undefined' , ( ) => { it ( 'first argument is undefined' , ( ) => { const expectedError = 'undefined first array' ; const act = ( ) => sequenceEqual ( undefined , [ ] ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; it ( 'second arguments is undefined' , ( ) => { const expectedError = 'undefined second array' ; const act = ( ) => sequenceEqual ( [ ] , undefined ) ; expect ( act ) . to . throw ( expectedError ) ; } ) ; } ) ; describe ( 'returns as expected' , ( ) => { const scenario = new ComparerTestScenario ( ) . addSameItemsWithSameOrder ( true ) . addSameItemsWithDifferentOrder ( true ) . addDifferentItemsWithSameLength ( false ) . addDifferentItemsWithDifferentLength ( false ) ; scenario . forEachCase ( ( testCase ) => { it ( testCase . name , ( ) => { const actual = scrambledEqual ( testCase . first , testCase . second ) ; expect ( actual ) . to . equal ( testCase . expected ) ; } ) ; } ) ; } ) ; } ) ; } ) ;