UNPKG

14.3 kBJavaScriptView Raw
1"use strict";
2
3var _ = _interopRequireDefault(require("./"));
4
5var _redux = require("redux");
6
7function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
8
9function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
10
11function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
12
13function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
14
15function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
16
17function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
19describe("API: reduxLeaves(initialState)", function () {
20 describe("GIVEN nested initialState with non-null values for shape { counter, foo, nested: { deep: {}, state: { manageable } } }", function () {
21 var initialState = {
22 counter: 1,
23 foo: ["bar"],
24 nested: {
25 deep: {},
26 state: {
27 manageable: "maybe...?"
28 }
29 }
30 };
31 var reducersDict = {
32 capitalise: function capitalise(leafState, action) {
33 return leafState.concat(action.payload);
34 },
35 exponentiate: {
36 reducer: function reducer(leafState, action) {
37 return Math.pow(leafState, action.payload);
38 },
39 argsToPayload: function argsToPayload(index) {
40 return index;
41 }
42 }
43 };
44 describe("WHEN [reducer, actions] = reduxLeaves(initialState)", function () {
45 var _reduxLeaves = (0, _["default"])(initialState, reducersDict),
46 _reduxLeaves2 = _slicedToArray(_reduxLeaves, 2),
47 reducer = _reduxLeaves2[0],
48 actions = _reduxLeaves2[1];
49
50 test("THEN reducer is a function", function () {
51 expect(_typeof(reducer)).toBe("function");
52 });
53 test("AND actions.counter is an object with a number create API", function () {
54 expect(_typeof(actions.counter)).toBe("object");
55 expect(actions.counter.create).toBeDefined();
56 expect(_typeof(actions.counter.create.increment)).toBe('function');
57 expect(_typeof(actions.counter.create.increment(4))).toBeDefined();
58 expect(_typeof(actions.counter.create.exponentiate)).toBe('function');
59 expect(_typeof(actions.counter.create.exponentiate(5))).toBeDefined();
60 });
61 test("AND actions.foo is an object with an array create API", function () {
62 expect(_typeof(actions.foo)).toBe("object");
63 expect(actions.foo.create).toBeDefined();
64 expect(_typeof(actions.foo.create.push)).toBe('function');
65 });
66 test("AND actions.nested is an object with an object create API", function () {
67 expect(_typeof(actions.nested)).toBe("object");
68 expect(actions.nested.create).toBeDefined();
69 expect(_typeof(actions.nested.create.set)).toBe('function');
70 });
71 test("AND actions.nested.deep is an object with an object create API", function () {
72 expect(_typeof(actions.nested.deep)).toBe("object");
73 expect(actions.nested.deep.create).toBeDefined();
74 expect(_typeof(actions.nested.deep.create.set)).toBe('function');
75 });
76 test("AND actions.nested.state.manageable is an object with a string create API", function () {
77 expect(_typeof(actions.nested.state)).toBe("object");
78 expect(actions.nested.state.manageable.create).toBeDefined();
79 expect(_typeof(actions.nested.state.manageable.create.concat)).toBe('function');
80 expect(_typeof(actions.nested.state.manageable.create.capitalise)).toBe('function');
81 });
82 describe("AND store = createStore(reducer)", function () {
83 var store;
84 beforeEach(function () {
85 store = (0, _redux.createStore)(reducer);
86 });
87 test("THEN store is initialised with state = initialState", function () {
88 expect(store.getState()).toEqual(initialState);
89 });
90 });
91 });
92 });
93});
94//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWR1eExlYXZlcy50ZXN0LnRzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaW5pdGlhbFN0YXRlIiwiY291bnRlciIsImZvbyIsIm5lc3RlZCIsImRlZXAiLCJzdGF0ZSIsIm1hbmFnZWFibGUiLCJyZWR1Y2Vyc0RpY3QiLCJjYXBpdGFsaXNlIiwibGVhZlN0YXRlIiwiYWN0aW9uIiwiY29uY2F0IiwicGF5bG9hZCIsImV4cG9uZW50aWF0ZSIsInJlZHVjZXIiLCJNYXRoIiwicG93IiwiYXJnc1RvUGF5bG9hZCIsImluZGV4IiwiYWN0aW9ucyIsInRlc3QiLCJleHBlY3QiLCJ0b0JlIiwiY3JlYXRlIiwidG9CZURlZmluZWQiLCJpbmNyZW1lbnQiLCJwdXNoIiwic2V0Iiwic3RvcmUiLCJiZWZvcmVFYWNoIiwiZ2V0U3RhdGUiLCJ0b0VxdWFsIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOzs7Ozs7Ozs7Ozs7OztBQUVBQSxRQUFRLENBQUMsZ0NBQUQsRUFBbUMsWUFBTTtBQUUvQ0EsRUFBQUEsUUFBUSxDQUFDLHdIQUFELEVBQTJILFlBQU07QUFZdkksUUFBTUMsWUFBbUIsR0FBRztBQUMxQkMsTUFBQUEsT0FBTyxFQUFFLENBRGlCO0FBRTFCQyxNQUFBQSxHQUFHLEVBQUUsQ0FBQyxLQUFELENBRnFCO0FBRzFCQyxNQUFBQSxNQUFNLEVBQUU7QUFDTkMsUUFBQUEsSUFBSSxFQUFFLEVBREE7QUFFTkMsUUFBQUEsS0FBSyxFQUFFO0FBQ0xDLFVBQUFBLFVBQVUsRUFBRTtBQURQO0FBRkQ7QUFIa0IsS0FBNUI7QUFnQkEsUUFBTUMsWUFBb0QsR0FBRztBQUMzREMsTUFBQUEsVUFBVSxFQUFFLG9CQUFDQyxTQUFELEVBQVlDLE1BQVo7QUFBQSxlQUF1QkQsU0FBUyxDQUFDRSxNQUFWLENBQWlCRCxNQUFNLENBQUNFLE9BQXhCLENBQXZCO0FBQUEsT0FEK0M7QUFFM0RDLE1BQUFBLFlBQVksRUFBRTtBQUNaQyxRQUFBQSxPQUFPLEVBQUUsaUJBQUNMLFNBQUQsRUFBWUMsTUFBWjtBQUFBLGlCQUF1QkssSUFBSSxDQUFDQyxHQUFMLENBQVNQLFNBQVQsRUFBb0JDLE1BQU0sQ0FBQ0UsT0FBM0IsQ0FBdkI7QUFBQSxTQURHO0FBRVpLLFFBQUFBLGFBQWEsRUFBRSx1QkFBQ0MsS0FBRDtBQUFBLGlCQUFtQkEsS0FBbkI7QUFBQTtBQUZIO0FBRjZDLEtBQTdEO0FBUUFuQixJQUFBQSxRQUFRLENBQUMscURBQUQsRUFBd0QsWUFBTTtBQUFBLHlCQUN6QyxrQkFBWUMsWUFBWixFQUEwQk8sWUFBMUIsQ0FEeUM7QUFBQTtBQUFBLFVBQzdETyxPQUQ2RDtBQUFBLFVBQ3BESyxPQURvRDs7QUFHcEVDLE1BQUFBLElBQUksQ0FBQyw0QkFBRCxFQUErQixZQUFNO0FBQ3ZDQyxRQUFBQSxNQUFNLFNBQVFQLE9BQVIsRUFBTixDQUF1QlEsSUFBdkIsQ0FBNEIsVUFBNUI7QUFDRCxPQUZHLENBQUo7QUFJQUYsTUFBQUEsSUFBSSxDQUFDLDJEQUFELEVBQThELFlBQU07QUFDdEVDLFFBQUFBLE1BQU0sU0FBUUYsT0FBTyxDQUFDbEIsT0FBaEIsRUFBTixDQUErQnFCLElBQS9CLENBQW9DLFFBQXBDO0FBQ0FELFFBQUFBLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDbEIsT0FBUixDQUFnQnNCLE1BQWpCLENBQU4sQ0FBK0JDLFdBQS9CO0FBQ0FILFFBQUFBLE1BQU0sU0FBUUYsT0FBTyxDQUFDbEIsT0FBUixDQUFnQnNCLE1BQWhCLENBQXVCRSxTQUEvQixFQUFOLENBQWdESCxJQUFoRCxDQUFxRCxVQUFyRDtBQUNBRCxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2xCLE9BQVIsQ0FBZ0JzQixNQUFoQixDQUF1QkUsU0FBdkIsQ0FBaUMsQ0FBakMsQ0FBUixFQUFOLENBQW1ERCxXQUFuRDtBQUNBSCxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2xCLE9BQVIsQ0FBZ0JzQixNQUFoQixDQUF1QlYsWUFBL0IsRUFBTixDQUFtRFMsSUFBbkQsQ0FBd0QsVUFBeEQ7QUFDQUQsUUFBQUEsTUFBTSxTQUFRRixPQUFPLENBQUNsQixPQUFSLENBQWdCc0IsTUFBaEIsQ0FBdUJWLFlBQXZCLENBQW9DLENBQXBDLENBQVIsRUFBTixDQUFzRFcsV0FBdEQ7QUFDRCxPQVBHLENBQUo7QUFTQUosTUFBQUEsSUFBSSxDQUFDLHVEQUFELEVBQTBELFlBQU07QUFDbEVDLFFBQUFBLE1BQU0sU0FBUUYsT0FBTyxDQUFDakIsR0FBaEIsRUFBTixDQUEyQm9CLElBQTNCLENBQWdDLFFBQWhDO0FBQ0FELFFBQUFBLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDakIsR0FBUixDQUFZcUIsTUFBYixDQUFOLENBQTJCQyxXQUEzQjtBQUNBSCxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2pCLEdBQVIsQ0FBWXFCLE1BQVosQ0FBbUJHLElBQTNCLEVBQU4sQ0FBdUNKLElBQXZDLENBQTRDLFVBQTVDO0FBQ0QsT0FKRyxDQUFKO0FBTUFGLE1BQUFBLElBQUksQ0FBQywyREFBRCxFQUE4RCxZQUFNO0FBQ3RFQyxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2hCLE1BQWhCLEVBQU4sQ0FBOEJtQixJQUE5QixDQUFtQyxRQUFuQztBQUNBRCxRQUFBQSxNQUFNLENBQUNGLE9BQU8sQ0FBQ2hCLE1BQVIsQ0FBZW9CLE1BQWhCLENBQU4sQ0FBOEJDLFdBQTlCO0FBQ0FILFFBQUFBLE1BQU0sU0FBUUYsT0FBTyxDQUFDaEIsTUFBUixDQUFlb0IsTUFBZixDQUFzQkksR0FBOUIsRUFBTixDQUF5Q0wsSUFBekMsQ0FBOEMsVUFBOUM7QUFDRCxPQUpHLENBQUo7QUFNQUYsTUFBQUEsSUFBSSxDQUFDLGdFQUFELEVBQW1FLFlBQU07QUFDM0VDLFFBQUFBLE1BQU0sU0FBUUYsT0FBTyxDQUFDaEIsTUFBUixDQUFlQyxJQUF2QixFQUFOLENBQW1Da0IsSUFBbkMsQ0FBd0MsUUFBeEM7QUFDQUQsUUFBQUEsTUFBTSxDQUFDRixPQUFPLENBQUNoQixNQUFSLENBQWVDLElBQWYsQ0FBb0JtQixNQUFyQixDQUFOLENBQW1DQyxXQUFuQztBQUNBSCxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2hCLE1BQVIsQ0FBZUMsSUFBZixDQUFvQm1CLE1BQXBCLENBQTJCSSxHQUFuQyxFQUFOLENBQThDTCxJQUE5QyxDQUFtRCxVQUFuRDtBQUNELE9BSkcsQ0FBSjtBQU9BRixNQUFBQSxJQUFJLENBQUMsMkVBQUQsRUFBOEUsWUFBTTtBQUN0RkMsUUFBQUEsTUFBTSxTQUFRRixPQUFPLENBQUNoQixNQUFSLENBQWVFLEtBQXZCLEVBQU4sQ0FBb0NpQixJQUFwQyxDQUF5QyxRQUF6QztBQUNBRCxRQUFBQSxNQUFNLENBQUNGLE9BQU8sQ0FBQ2hCLE1BQVIsQ0FBZUUsS0FBZixDQUFxQkMsVUFBckIsQ0FBZ0NpQixNQUFqQyxDQUFOLENBQStDQyxXQUEvQztBQUNBSCxRQUFBQSxNQUFNLFNBQVFGLE9BQU8sQ0FBQ2hCLE1BQVIsQ0FBZUUsS0FBZixDQUFxQkMsVUFBckIsQ0FBZ0NpQixNQUFoQyxDQUF1Q1osTUFBL0MsRUFBTixDQUE2RFcsSUFBN0QsQ0FBa0UsVUFBbEU7QUFDQUQsUUFBQUEsTUFBTSxTQUFRRixPQUFPLENBQUNoQixNQUFSLENBQWVFLEtBQWYsQ0FBcUJDLFVBQXJCLENBQWdDaUIsTUFBaEMsQ0FBdUNmLFVBQS9DLEVBQU4sQ0FBaUVjLElBQWpFLENBQXNFLFVBQXRFO0FBQ0QsT0FMRyxDQUFKO0FBT0F2QixNQUFBQSxRQUFRLENBQUMsa0NBQUQsRUFBcUMsWUFBTTtBQUNqRCxZQUFJNkIsS0FBSjtBQUNBQyxRQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmRCxVQUFBQSxLQUFLLEdBQUcsd0JBQVlkLE9BQVosQ0FBUjtBQUNELFNBRlMsQ0FBVjtBQUlBTSxRQUFBQSxJQUFJLENBQUMscURBQUQsRUFBd0QsWUFBTTtBQUNoRUMsVUFBQUEsTUFBTSxDQUFDTyxLQUFLLENBQUNFLFFBQU4sRUFBRCxDQUFOLENBQXlCQyxPQUF6QixDQUFpQy9CLFlBQWpDO0FBQ0QsU0FGRyxDQUFKO0FBR0QsT0FUTyxDQUFSO0FBVUQsS0FwRE8sQ0FBUjtBQXFERCxHQXpGTyxDQUFSO0FBMEZELENBNUZPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVkdXhMZWF2ZXMsIHsgTGVhZlJlZHVjZXIgfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgU3RvcmUgfSBmcm9tIFwicmVkdXhcIjtcblxuZGVzY3JpYmUoXCJBUEk6IHJlZHV4TGVhdmVzKGluaXRpYWxTdGF0ZSlcIiwgKCkgPT4ge1xuXG4gIGRlc2NyaWJlKFwiR0lWRU4gbmVzdGVkIGluaXRpYWxTdGF0ZSB3aXRoIG5vbi1udWxsIHZhbHVlcyBmb3Igc2hhcGUgeyBjb3VudGVyLCBmb28sIG5lc3RlZDogeyBkZWVwOiB7fSwgc3RhdGU6IHsgbWFuYWdlYWJsZSB9IH0gfVwiLCAoKSA9PiB7XG4gICAgaW50ZXJmYWNlIFN0YXRlIHtcbiAgICAgIGNvdW50ZXI6IG51bWJlclxuICAgICAgZm9vOiBhbnlbXVxuICAgICAgbmVzdGVkOiB7XG4gICAgICAgIGRlZXA6IHt9XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgbWFuYWdlYWJsZTogc3RyaW5nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IFN0YXRlID0ge1xuICAgICAgY291bnRlcjogMSxcbiAgICAgIGZvbzogW1wiYmFyXCJdLFxuICAgICAgbmVzdGVkOiB7XG4gICAgICAgIGRlZXA6IHt9LFxuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIG1hbmFnZWFibGU6IFwibWF5YmUuLi4/XCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHR5cGUgU2NoZW1hID0ge1xuICAgICAgY2FwaXRhbGlzZTogc3RyaW5nLFxuICAgICAgZXhwb25lbnRpYXRlOiBMZWFmUmVkdWNlci5TY2hlbWE8bnVtYmVyLCBbbnVtYmVyXSwgbnVtYmVyPlxuICAgIH1cblxuICAgIGNvbnN0IHJlZHVjZXJzRGljdDogTGVhZlJlZHVjZXIuRGVmaW5pdGlvbnM8U2NoZW1hLCBTdGF0ZT4gPSB7XG4gICAgICBjYXBpdGFsaXNlOiAobGVhZlN0YXRlLCBhY3Rpb24pID0+IGxlYWZTdGF0ZS5jb25jYXQoYWN0aW9uLnBheWxvYWQpLFxuICAgICAgZXhwb25lbnRpYXRlOiB7XG4gICAgICAgIHJlZHVjZXI6IChsZWFmU3RhdGUsIGFjdGlvbikgPT4gTWF0aC5wb3cobGVhZlN0YXRlLCBhY3Rpb24ucGF5bG9hZCksXG4gICAgICAgIGFyZ3NUb1BheWxvYWQ6IChpbmRleDogbnVtYmVyKSA9PiBpbmRleFxuICAgICAgfVxuICAgIH1cblxuICAgIGRlc2NyaWJlKFwiV0hFTiBbcmVkdWNlciwgYWN0aW9uc10gPSByZWR1eExlYXZlcyhpbml0aWFsU3RhdGUpXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IFtyZWR1Y2VyLCBhY3Rpb25zXSA9IHJlZHV4TGVhdmVzKGluaXRpYWxTdGF0ZSwgcmVkdWNlcnNEaWN0KVxuXG4gICAgICB0ZXN0KFwiVEhFTiByZWR1Y2VyIGlzIGEgZnVuY3Rpb25cIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QodHlwZW9mIHJlZHVjZXIpLnRvQmUoXCJmdW5jdGlvblwiKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIkFORCBhY3Rpb25zLmNvdW50ZXIgaXMgYW4gb2JqZWN0IHdpdGggYSBudW1iZXIgY3JlYXRlIEFQSVwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5jb3VudGVyKS50b0JlKFwib2JqZWN0XCIpXG4gICAgICAgIGV4cGVjdChhY3Rpb25zLmNvdW50ZXIuY3JlYXRlKS50b0JlRGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5jb3VudGVyLmNyZWF0ZS5pbmNyZW1lbnQpLnRvQmUoJ2Z1bmN0aW9uJylcbiAgICAgICAgZXhwZWN0KHR5cGVvZiBhY3Rpb25zLmNvdW50ZXIuY3JlYXRlLmluY3JlbWVudCg0KSkudG9CZURlZmluZWQoKVxuICAgICAgICBleHBlY3QodHlwZW9mIGFjdGlvbnMuY291bnRlci5jcmVhdGUuZXhwb25lbnRpYXRlKS50b0JlKCdmdW5jdGlvbicpXG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5jb3VudGVyLmNyZWF0ZS5leHBvbmVudGlhdGUoNSkpLnRvQmVEZWZpbmVkKClcbiAgICAgIH0pXG5cbiAgICAgIHRlc3QoXCJBTkQgYWN0aW9ucy5mb28gaXMgYW4gb2JqZWN0IHdpdGggYW4gYXJyYXkgY3JlYXRlIEFQSVwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5mb28pLnRvQmUoXCJvYmplY3RcIilcbiAgICAgICAgZXhwZWN0KGFjdGlvbnMuZm9vLmNyZWF0ZSkudG9CZURlZmluZWQoKVxuICAgICAgICBleHBlY3QodHlwZW9mIGFjdGlvbnMuZm9vLmNyZWF0ZS5wdXNoKS50b0JlKCdmdW5jdGlvbicpXG4gICAgICB9KVxuXG4gICAgICB0ZXN0KFwiQU5EIGFjdGlvbnMubmVzdGVkIGlzIGFuIG9iamVjdCB3aXRoIGFuIG9iamVjdCBjcmVhdGUgQVBJXCIsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHR5cGVvZiBhY3Rpb25zLm5lc3RlZCkudG9CZShcIm9iamVjdFwiKVxuICAgICAgICBleHBlY3QoYWN0aW9ucy5uZXN0ZWQuY3JlYXRlKS50b0JlRGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5uZXN0ZWQuY3JlYXRlLnNldCkudG9CZSgnZnVuY3Rpb24nKVxuICAgICAgfSlcblxuICAgICAgdGVzdChcIkFORCBhY3Rpb25zLm5lc3RlZC5kZWVwIGlzIGFuIG9iamVjdCB3aXRoIGFuIG9iamVjdCBjcmVhdGUgQVBJXCIsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHR5cGVvZiBhY3Rpb25zLm5lc3RlZC5kZWVwKS50b0JlKFwib2JqZWN0XCIpXG4gICAgICAgIGV4cGVjdChhY3Rpb25zLm5lc3RlZC5kZWVwLmNyZWF0ZSkudG9CZURlZmluZWQoKVxuICAgICAgICBleHBlY3QodHlwZW9mIGFjdGlvbnMubmVzdGVkLmRlZXAuY3JlYXRlLnNldCkudG9CZSgnZnVuY3Rpb24nKVxuICAgICAgfSlcblxuXG4gICAgICB0ZXN0KFwiQU5EIGFjdGlvbnMubmVzdGVkLnN0YXRlLm1hbmFnZWFibGUgaXMgYW4gb2JqZWN0IHdpdGggYSBzdHJpbmcgY3JlYXRlIEFQSVwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5uZXN0ZWQuc3RhdGUpLnRvQmUoXCJvYmplY3RcIilcbiAgICAgICAgZXhwZWN0KGFjdGlvbnMubmVzdGVkLnN0YXRlLm1hbmFnZWFibGUuY3JlYXRlKS50b0JlRGVmaW5lZCgpXG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5uZXN0ZWQuc3RhdGUubWFuYWdlYWJsZS5jcmVhdGUuY29uY2F0KS50b0JlKCdmdW5jdGlvbicpXG4gICAgICAgIGV4cGVjdCh0eXBlb2YgYWN0aW9ucy5uZXN0ZWQuc3RhdGUubWFuYWdlYWJsZS5jcmVhdGUuY2FwaXRhbGlzZSkudG9CZSgnZnVuY3Rpb24nKVxuICAgICAgfSlcblxuICAgICAgZGVzY3JpYmUoXCJBTkQgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyKVwiLCAoKSA9PiB7XG4gICAgICAgIGxldCBzdG9yZTogU3RvcmVcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyKVxuICAgICAgICB9KVxuXG4gICAgICAgIHRlc3QoXCJUSEVOIHN0b3JlIGlzIGluaXRpYWxpc2VkIHdpdGggc3RhdGUgPSBpbml0aWFsU3RhdGVcIiwgKCkgPT4ge1xuICAgICAgICAgIGV4cGVjdChzdG9yZS5nZXRTdGF0ZSgpKS50b0VxdWFsKGluaXRpYWxTdGF0ZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSlcbn0pIl19
\No newline at end of file