UNPKG

ts-audio

Version:

`ts-audio` is an agnostic and easy-to-use library to work with the `AudioContext` API and create Playlists.

106 lines (88 loc) 2.4 kB
import { shuffle, weightedFiles, preloadFiles } from '../utils' function compare(arr1: string[], arr2: string[]): boolean { for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) { return false } } return true } function unique(arr: string[]): boolean { return arr.length === new Set(arr.map((item) => item)).size } describe('utils', () => { describe('shuffle', () => { test('shuffles the elements of a given array', () => { const files = ['./file2.mp3', './file1.mp3', './file3.mp3', './file100.mp3', './file50.mp3'] const shuffled = shuffle(files) expect(shuffled.length).toBe(files.length) expect(compare(shuffled, files)).toBeFalsy() expect(unique(shuffled)).toBeTruthy() }) }) describe('preload files', () => { const files = [ './file2.mp3', './file1.mp3', './file3.mp3', './file4.mp3', './file5.mp3', './file6.mp3', './file7.mp3', ] test('requests up to 3 files concurrently', (done) => { let counter = 0 const api = () => { counter++ return Promise.resolve({} as Response) } preloadFiles(files, 3, api, () => { expect(counter).toBe(7) done() }) }) test('requests next file from the queue if a request fails', (done) => { let counter = 0 const api = (file: string) => { counter++ if (['./file3.mp3', './file7.mp3'].includes(file)) { return Promise.reject({} as Response) } return Promise.resolve({} as Response) } preloadFiles(files, 3, api, () => { expect(counter).toBe(7) done() }) }) }) describe('weightedFiles', () => { test('builds a new array based on the weight of each file', () => { const map = { 'file1.mp3': 2, 'file2.mp3': 4, 'file3.mp3': 10, } const result = weightedFiles(map) result.sort((a, b) => a.localeCompare(b)) expect(result).toStrictEqual([ 'file1.mp3', 'file1.mp3', 'file2.mp3', 'file2.mp3', 'file2.mp3', 'file2.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', 'file3.mp3', ]) }) }) })