All files / xstate/test/examples cd.test.ts

100% Statements 6/6
100% Branches 0/0
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 911x 1x   1x 1x                                                                                           1x                                                                           1x    
import { Machine } from '../../src/index';
import { testAll } from '../utils';
 
describe('Example: CD Player', () => {
  const machine = Machine({
    key: 'cd',
    initial: 'not_loaded',
    states: {
      not_loaded: {
        on: {
          INSERT_CD: 'loaded'
        }
      },
      loaded: {
        initial: 'stopped',
 
        on: {
          EJECT: 'not_loaded'
        },
        states: {
          stopped: {
            on: {
              PLAY: 'playing'
            }
          },
          playing: {
            on: {
              STOP: 'stopped',
              EXPIRED_END: 'stopped',
              EXPIRED_MID: 'playing',
              PAUSE: 'paused'
            }
          },
          paused: {
            initial: 'not_blank',
            states: {
              blank: { on: { TIMER: 'not_blank' } },
              not_blank: { on: { TIMER: 'blank' } }
            },
            on: {
              PAUSE: 'playing',
              PLAY: 'playing',
              STOP: 'stopped'
            }
          }
        }
      }
    }
  });
 
  const expected = {
    not_loaded: {
      INSERT_CD: 'loaded.stopped',
      FAKE: undefined
    },
    loaded: {
      EJECT: 'not_loaded',
      FAKE: undefined
    },
    'loaded.stopped': {
      PLAY: 'loaded.playing',
      EJECT: 'not_loaded',
      FAKE: undefined
    },
    'loaded.playing': {
      EXPIRED_MID: 'loaded.playing',
      EXPIRED_END: 'loaded.stopped',
      STOP: 'loaded.stopped',
      EJECT: 'not_loaded',
      PAUSE: 'loaded.paused.not_blank',
      FAKE: undefined
    },
    'loaded.paused': {
      PAUSE: 'loaded.playing',
      PLAY: 'loaded.playing',
      TIMER: 'loaded.paused.blank',
      EJECT: 'not_loaded',
      STOP: 'loaded.stopped'
    },
    'loaded.paused.blank': {
      PAUSE: 'loaded.playing',
      PLAY: 'loaded.playing',
      TIMER: 'loaded.paused.not_blank',
      EJECT: 'not_loaded',
      STOP: 'loaded.stopped'
    }
  };
 
  testAll(machine, expected);
});