Skip to content

Commit

Permalink
feat(rec): add getTime() method with tests
Browse files Browse the repository at this point in the history
  • Loading branch information
hexjelly committed Jan 30, 2017
1 parent 17ed65b commit ba98444
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 5 deletions.
42 changes: 37 additions & 5 deletions src/rec.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,14 +259,46 @@ class Replay {
})
}

/**
* @typedef {Object} Time
* @property {Number} Time in milliseconds
* @property {Bool} Finished
* @property {String} Reason for finished being true or false
*/

/**
* Get time of replay in milliseconds.
* @param {bool} hs Return hundredths
* @returns {Integer} time
* @returns {Time} Time and whether replay is probably finished or not.
*/
getTime (hs) {
if (hs) return 0
return 0
getTime () {
// First check if last event was a touch event in either event data.
let lastEvent1 = this.events[0][this.events[0].length - 1]
let lastEvent2 = this.events[1][this.events[1].length - 1]
let time1 = 0
let time2 = 0

if (lastEvent1 && lastEvent1.eventType === 'touch') time1 = lastEvent1.time
if (lastEvent2 && lastEvent2.eventType === 'touch') time2 = lastEvent2.time

// Highest frame time.
let frames1Length = this.frames[0].length
let frames2Length = this.frames[1].length
let frameTimeMax = (frames1Length > frames2Length ? frames1Length : frames2Length) * 33.333

// If neither had a touch event, return approximate frame time.
if ((lastEvent1 && lastEvent1.eventType !== 'touch') && (lastEvent2 && lastEvent2.eventType !== 'touch')) {
return { time: Math.round(frameTimeMax), finished: false, reason: 'notouch' }
}

// Set to highest event time.
let eventTimeMax = (time1 > time2 ? time1 : time2) * 2289.37728938
// If event difference to frame time is >1 frames of time, probably not finished?
if (frameTimeMax > (eventTimeMax + 34.333)) {
return { time: Math.round(frameTimeMax), finished: false, reason: 'framediff' }
}

// Otherwise probably finished?
return { time: Math.round(eventTimeMax), finished: true, reason: undefined }
}

/**
Expand Down
42 changes: 42 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,48 @@ test('Invalid Replay event: load() gives error', t => {
}).catch(error => t.pass(error))
})

test('getTime, finished, single', t => {
return Replay.load('test/assets/replays/rec_valid_1.rec').then(result => {
t.deepEqual(result.getTime(), { time: 14649, finished: true, reason: undefined })
}).catch(error => t.fail(error))
})

test('getTime, finished, multi', t => {
return Replay.load('test/assets/replays/rec_valid_2.rec').then(result => {
t.deepEqual(result.getTime(), { time: 14671, finished: true, reason: undefined })
}).catch(error => t.fail(error))
})

test('getTime, unfinished, no event', t => {
return Replay.load('test/assets/replays/unfinished.rec').then(result => {
t.deepEqual(result.getTime(), { time: 533, finished: false, reason: 'framediff' })
}).catch(error => t.fail(error))
})

test('getTime, unfinished, single, event', t => {
return Replay.load('test/assets/replays/rec_valid_3.rec').then(result => {
t.deepEqual(result.getTime(), { time: 4767, finished: false, reason: 'framediff' })
}).catch(error => t.fail(error))
})

test('getTime, unfinished, multi, event', t => {
return Replay.load('test/assets/replays/multi_event_unfinished.rec').then(result => {
t.deepEqual(result.getTime(), { time: 1600, finished: false, reason: 'framediff' })
}).catch(error => t.fail(error))
})

test('getTime, unfinished, multi, event 2', t => {
return Replay.load('test/assets/replays/multi_event_unfinished_2.rec').then(result => {
t.deepEqual(result.getTime(), { time: 3233, finished: false, reason: 'notouch' })
}).catch(error => t.fail(error))
})

test('getTime, unfinished, single, event, framediff', t => {
return Replay.load('test/assets/replays/event_unfinished.rec').then(result => {
t.deepEqual(result.getTime(), { time: 8567, finished: false, reason: 'framediff' })
}).catch(error => t.fail(error))
})

/* * * * * * * *
* Util tests *
* * * * * * * */

0 comments on commit ba98444

Please sign in to comment.