import FixtureSet from '../../FixtureSet'; import TestCase from '../../TestCase'; const React = window.React; export default class MediaEvents extends React.Component { state = { playbackRate: 2, events: { onCanPlay: false, onCanPlayThrough: false, onDurationChange: false, onEmptied: false, onEnded: false, onError: false, onLoadedData: false, onLoadedMetadata: false, onLoadStart: false, onPause: false, onPlay: false, onPlaying: false, onProgress: false, onRateChange: false, onResize: false, onSeeked: false, onSeeking: false, onSuspend: false, onTimeUpdate: false, onVolumeChange: false, onWaiting: false, }, }; updatePlaybackRate = () => { this.video.playbackRate = 2; }; setVideo = el => { this.video = el; }; eventDidFire(event) { this.setState({ events: Object.assign({}, this.state.events, {[event]: true}), }); } getProgress() { const events = Object.keys(this.state.events); const total = events.length; const fired = events.filter(type => this.state.events[type]).length; return fired / total; } render() { const events = Object.keys(this.state.events); const handlers = events.reduce((events, event) => { events[event] = this.eventDidFire.bind(this, event); return events; }, {}); return (
  • Play the loaded video
  • Pause the loaded video
  • Play the failing video
  • Drag the track bar
  • Toggle the volume button
  • Note: This test does not confirm onStalled,{' '} onAbort, or onEncrypted

    All events in the table below should be marked as "true".

    Events

    The following events should bubble:

    {events.map(this.renderOutcome, this)}
    ); } renderOutcome(event) { let fired = this.state.events[event]; return ( {event} {`${fired}`} ); } }