all files / redux-await/ test.js

98.84% Statements 85/86
100% Branches 20/20
100% Functions 22/22
98.7% Lines 76/77
6 statements, 1 function, 4 branches Ignored     
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133                                                                                                                 
'use strict';
 
// istanbul ignore next
 
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _expect = require('expect');
 
var _expect2 = _interopRequireDefault(_expect);
 
var _redux = require('redux');
 
var _src = require('./src');
 
describe('redux-await', function () {
  it('exports AWAIT_MARKER', function () {
    _expect2['default'](_src.AWAIT_MARKER).toBeTruthy();
  });
  it('exports AWAIT_META_CONTAINER', function () {
    _expect2['default'](_src.AWAIT_META_CONTAINER).toBeTruthy();
  });
  it('exports AWAIT_INFO_CONTAINER', function () {
    _expect2['default'](_src.AWAIT_INFO_CONTAINER).toBeTruthy();
  });
  it('exports middleware', function () {
    _expect2['default'](_src.middleware).toBeTruthy();
  });
  it('exports createReducer', function () {
    _expect2['default'](_src.createReducer).toBeTruthy();
  });
  it('exports getInfo', function () {
    _expect2['default'](_src.getInfo).toBeTruthy();
  });
 
  describe('createReducer', function () {
    describe('wraps a reducer', function () {
      var reducer = undefined;
      var wrappedReducer = undefined;
      beforeEach(function () {
        reducer = function (state, action) {
          if (state === undefined) state = {};
 
          if (action.type === 'TESTING') {
            return _extends({}, state, { wasTested: true });
          }
          return state;
        };
        wrappedReducer = _src.createReducer(reducer);
      });
 
      it('still runs on actions it was reducing', function () {
        var initalState = wrappedReducer(undefined, { type: 'FOOBAR' });
        _expect2['default'](initalState).toEqual({});
        var nextState = wrappedReducer({}, { type: 'TESTING' });
        _expect2['default'](nextState).toEqual({ wasTested: true });
      });
 
      it('handles events with action.meta[AWAIT_META_CONTAINER]', function () {
        // istanbul ignore next
 
        var _meta;
 
        var nextState = wrappedReducer({ a: true, b: true }, {
          type: 'TESTING',
          meta: (_meta = {}, _meta[_src.AWAIT_META_CONTAINER] = {
            promiseKeys: ['a'],
            status: 'success'
          }, _meta)
        });
        _expect2['default'](nextState.b).toBeTruthy();
        _expect2['default'](nextState.wasTested).toBeTruthy();
      });
    });
  });
 
  it("does it's thing", function (done) {
    var createStoreWithMiddleware = _redux.applyMiddleware(_src.middleware)(_redux.createStore);
    var reducer = function reducer(state, action) {
      if (state === undefined) state = {};
 
      if (action.type === _src.getPendingActionType('TESTING')) {
        return _extends({}, state, { wasPending: true });
      };
      if (action.type === 'TESTING') {
        return _extends({}, state, { wasTested: true, soon: action.payload.soon + '!' });
      }
      return state;
    };
    var store = createStoreWithMiddleware(_src.createReducer(reducer));
    var states = [];
    store.subscribe(function () {
      states.push(store.getState());
      if (states.length === 6) {
        try {
          _expect2['default'](_src.getInfo(states[0]).statuses.soon).toEqual('pending');
          _expect2['default'](states[0].wasPending).toEqual(true);
          _expect2['default'](_src.getInfo(states[1]).statuses.soon).toEqual('pending');
          _expect2['default'](_src.getInfo(states[2]).statuses.soon).toEqual('success');
          _expect2['default'](states[2].soon).toEqual('v!');
          _expect2['default'](states[2].wasTested).toEqual(true);
          _expect2['default'](_src.getInfo(states[3]).statuses.soon).toEqual('failure');
          _expect2['default'](_src.getInfo(states[3]).errors.soon.message).toEqual('no!');
          _expect2['default'](_src.getInfo(states[4]).statuses.soon).toEqual('pending');
          _expect2['default'](_src.getInfo(states[5]).statuses.soon).toEqual('success');
          _expect2['default'](_src.getInfo(states[4]).errors.soon).toBeFalsy();
          _expect2['default'](_src.getInfo(states[5]).errors.soon).toBeFalsy();
          done();
        } catch (e) {
          done(e);
        }
      }
    });
    var generateRejection = function generateRejection() {
      return new Promise(function (_, reject) {
        return setTimeout(function () {
          return reject(new Error('no!'));
        }, 15);
      });
    };
 
    // smiley face;
    store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: Promise.resolve('v'), heyo: Promise.resolve('heyo'), ignore: 123 } });
    store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: generateRejection(), ignore: 123 } });
    setTimeout(function () {
      return store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: Promise.resolve('v'), heyo: Promise.resolve('heyo'), ignore: 123 } });
    }, 20);
  });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9tb3NoZS9Eb2N1bWVudHMvUmFuZG9tUHJvamVjdHMvcmVkdXgtYXdhaXQvdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3NCQUFtQixRQUFROzs7O3FCQUNrQixPQUFPOzttQkFTN0MsT0FBTzs7QUFFZCxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQU07QUFDNUIsSUFBRSxDQUFDLHNCQUFzQixFQUFFLFlBQU07QUFDL0IsMENBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDbkMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLG9CQUFvQixFQUFFLFlBQU07QUFDN0Isd0NBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDakMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07QUFDaEMsMkNBQXFCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDcEMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQU07QUFDMUIscUNBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztHQUM5QixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0FBQzlCLFlBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0FBQ2hDLFVBQUksT0FBTyxZQUFBLENBQUM7QUFDWixVQUFJLGNBQWMsWUFBQSxDQUFDO0FBQ25CLGdCQUFVLENBQUMsWUFBTTtBQUNmLGVBQU8sR0FBRyxVQUFDLEtBQUssRUFBTyxNQUFNLEVBQUs7Y0FBdkIsS0FBSyxnQkFBTCxLQUFLLEdBQUcsRUFBRTs7QUFDbkIsY0FBSSxNQUFN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Q0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCw4QkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLDhCQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsOEJBQU8sYUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsOEJBQU8sYUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCw4QkFBTyxhQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRCw4QkFBTyxhQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRCxjQUFJLEVBQUUsQ0FBQztTQUNSLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDVixjQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDVDtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0gsUUFBTSxpQkFBaUIsR0FBRyxTQUFwQixpQkFBaUI7YUFBUyxJQUFJLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxNQUFNO2VBQUssVUFBVSxDQUFDO2lCQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUFBLEVBQUUsRUFBRSxDQUFDO09BQUEsQ0FBQztLQUFBLENBQUM7OztBQUczRyxTQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2SSxTQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RyxjQUFVLENBQUM7YUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FBQSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0dBRTdKLENBQUMsQ0FBQztDQUVKLENBQUMsQ0FBQyIsImZpbGUiOiIvVXNlcnMvbW9zaGUvRG9jdW1lbnRzL1JhbmRvbVByb2plY3RzL3JlZHV4LWF3YWl0L3Rlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwZWN0IGZyb20gJ2V4cGVjdCc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgYXBwbHlNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHtcbiAgQVdBSVRfTUFSS0VSLFxuICBBV0FJVF9NRVRBX0NPTlRBSU5FUixcbiAgQVdBSVRfSU5GT19DT05UQUlORVIsXG4gIG1pZGRsZXdhcmUsXG4gIGNyZWF0ZVJlZHVjZXIsXG4gIGdldEluZm8sXG4gIGdldFBlbmRpbmdBY3Rpb25UeXBlLFxufSBmcm9tICcuL3NyYyc7XG5cbmRlc2NyaWJlKCdyZWR1eC1hd2FpdCcsICgpID0+IHtcbiAgaXQoJ2V4cG9ydHMgQVdBSVRfTUFSS0VSJywgKCkgPT4ge1xuICAgIGV4cGVjdChBV0FJVF9NQVJLRVIpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG4gIGl0KCdleHBvcnRzIEFXQUlUX01FVEFfQ09OVEFJTkVSJywgKCkgPT4ge1xuICAgIGV4cGVjdChBV0FJVF9NRVRBX0NPTlRBSU5FUikudG9CZVRydXRoeSgpO1xuICB9KTtcbiAgaXQoJ2V4cG9ydHMgQVdBSVRfSU5GT19DT05UQUlORVInLCAoKSA9PiB7XG4gICAgZXhwZWN0KEFXQUlUX0lORk9fQ09OVEFJTkVSKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBtaWRkbGV3YXJlJywgKCkgPT4ge1xuICAgIGV4cGVjdChtaWRkbGV3YXJlKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBjcmVhdGVSZWR1Y2VyJywgKCkgPT4ge1xuICAgIGV4cGVjdChjcmVhdGVSZWR1Y2VyKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBnZXRJbmZvJywgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRJbmZvKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVSZWR1Y2VyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCd3cmFwcyBhIHJlZHVjZXInLCAoKSA9PiB7XG4gICAgICBsZXQgcmVkdWNlcjtcbiAgICAgIGxldCB3cmFwcGVkUmVkdWNlcjtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICByZWR1Y2VyID0gKHN0YXRlID0ge30sIGFjdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ1RFU1RJTkcnKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNUZXN0ZWQ6IHRydWUgfSB9XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9O1xuICAgICAgICB3cmFwcGVkUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIocmVkdWNlcik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3N0aWxsIHJ1bnMgb24gYWN0aW9ucyBpdCB3YXMgcmVkdWNpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRhbFN0YXRlID0gd3JhcHBlZFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdGT09CQVInIH0pO1xuICAgICAgICBleHBlY3QoaW5pdGFsU3RhdGUpLnRvRXF1YWwoe30pO1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSB3cmFwcGVkUmVkdWNlcih7fSwgeyB0eXBlOiAnVEVTVElORycgfSk7XG4gICAgICAgIGV4cGVjdChuZXh0U3RhdGUpLnRvRXF1YWwoeyB3YXNUZXN0ZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2hhbmRsZXMgZXZlbnRzIHdpdGggYWN0aW9uLm1ldGFbQVdBSVRfTUVUQV9DT05UQUlORVJdJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSB3cmFwcGVkUmVkdWNlcih7YTogdHJ1ZSwgYjogdHJ1ZX0sIHtcbiAgICAgICAgICB0eXBlOiAnVEVTVElORycsXG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgW0FXQUlUX01FVEFfQ09OVEFJTkVSXToge1xuICAgICAgICAgICAgICBwcm9taXNlS2V5czogWydhJ10sXG4gICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG5leHRTdGF0ZS5iKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGV4cGVjdChuZXh0U3RhdGUud2FzVGVzdGVkKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImRvZXMgaXQncyB0aGluZ1wiLCBkb25lID0+IHtcbiAgICBjb25zdCBjcmVhdGVTdG9yZVdpdGhNaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKG1pZGRsZXdhcmUpKGNyZWF0ZVN0b3JlKTtcbiAgICBjb25zdCByZWR1Y2VyID0gKHN0YXRlID0ge30sIGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBnZXRQZW5kaW5nQWN0aW9uVHlwZSgnVEVTVElORycpKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNQZW5kaW5nOiB0cnVlIH0gfTtcbiAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ1RFU1RJTkcnKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNUZXN0ZWQ6IHRydWUsIHNvb246IGFjdGlvbi5wYXlsb2FkLnNvb24gKyAnIScgfSB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcbiAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlV2l0aE1pZGRsZXdhcmUoICBjcmVhdGVSZWR1Y2VyKHJlZHVjZXIpICApO1xuICAgIGNvbnN0IHN0YXRlcyA9IFtdO1xuICAgIHN0b3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdGF0ZXMucHVzaChzdG9yZS5nZXRTdGF0ZSgpKTtcbiAgICAgIGlmIChzdGF0ZXMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXhwZWN0KGdldEluZm8oc3RhdGVzWzBdKS5zdGF0dXNlcy5zb29uKS50b0VxdWFsKCdwZW5kaW5nJyk7XG4gICAgICAgICAgZXhwZWN0KHN0YXRlc1swXS53YXNQZW5kaW5nKS50b0VxdWFsKHRydWUpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1sxXSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgncGVuZGluZycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1syXSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgnc3VjY2VzcycpO1xuICAgICAgICAgIGV4cGVjdChzdGF0ZXNbMl0uc29vbikudG9FcXVhbCgndiEnKTtcbiAgICAgICAgICBleHBlY3Qoc3RhdGVzWzJdLndhc1Rlc3RlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgICBleHBlY3QoZ2V0SW5mbyhzdGF0ZXNbM10pLnN0YXR1c2VzLnNvb24pLnRvRXF1YWwoJ2ZhaWx1cmUnKTtcbiAgICAgICAgICBleHBlY3QoZ2V0SW5mbyhzdGF0ZXNbM10pLmVycm9ycy5zb29uLm1lc3NhZ2UpLnRvRXF1YWwoJ25vIScpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s0XSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgncGVuZGluZycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s1XSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgnc3VjY2VzcycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s0XSkuZXJyb3JzLnNvb24pLnRvQmVGYWxzeSgpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s1XSkuZXJyb3JzLnNvb24pLnRvQmVGYWxzeSgpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZW5lcmF0ZVJlamVjdGlvbiA9ICgpID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignbm8hJykpLCAxNSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbWlsZXkgZmFjZTtcbiAgICBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IFByb21pc2UucmVzb2x2ZSgndicpLCBoZXlvOiBQcm9taXNlLnJlc29sdmUoJ2hleW8nKSwgaWdub3JlOiAxMjMgfSB9KTtcbiAgICBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IGdlbmVyYXRlUmVqZWN0aW9uKCksIGlnbm9yZTogMTIzIH0gfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IFByb21pc2UucmVzb2x2ZSgndicpLCBoZXlvOiBQcm9taXNlLnJlc29sdmUoJ2hleW8nKSwgaWdub3JlOiAxMjMgfSB9KSwgMjApXG5cbiAgfSk7XG5cbn0pO1xuIl19