@pie-lib/graphing-solution-set 3.2.0-next.0 → 3.2.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__tests__/bg.test.js +282 -0
- package/lib/__tests__/coordinates-label.test.js +276 -0
- package/lib/__tests__/graph-with-controls.test.js +256 -0
- package/lib/__tests__/graph.test.js +113 -0
- package/lib/__tests__/grid-setup.test.js +729 -0
- package/lib/__tests__/grid.test.js +29 -0
- package/lib/__tests__/labels.test.js +45 -0
- package/lib/__tests__/mark-label.test.js +133 -0
- package/lib/__tests__/toggle-bar.test.js +146 -0
- package/lib/__tests__/tool-menu.test.js +540 -0
- package/lib/__tests__/undo-redo.test.js +31 -0
- package/lib/__tests__/use-debounce.test.js +24 -0
- package/lib/__tests__/utils.js +70 -0
- package/lib/__tests__/utils.test.js +123 -0
- package/lib/axis/__tests__/arrow.test.js +60 -0
- package/lib/axis/__tests__/axes.test.js +160 -0
- package/lib/axis/arrow.js +1 -1
- package/lib/axis/axes.js +1 -1
- package/lib/axis/index.js +1 -1
- package/lib/bg.js +1 -1
- package/lib/container/__tests__/actions.test.js +108 -0
- package/lib/container/__tests__/index.test.js +346 -0
- package/lib/container/__tests__/marks.test.js +259 -0
- package/lib/container/__tests__/middleware.test.js +244 -0
- package/lib/container/__tests__/reducer.test.js +450 -0
- package/lib/container/actions.js +1 -1
- package/lib/container/index.js +1 -1
- package/lib/container/marks.js +1 -1
- package/lib/container/middleware.js +1 -1
- package/lib/container/reducer.js +1 -1
- package/lib/coordinates-label.js +1 -1
- package/lib/graph-with-controls.js +1 -1
- package/lib/graph.js +1 -1
- package/lib/grid-setup.js +1 -1
- package/lib/grid.js +1 -1
- package/lib/index.js +1 -1
- package/lib/labels.js +1 -1
- package/lib/mark-label.js +1 -1
- package/lib/toggle-bar.js +1 -1
- package/lib/tool-menu.js +1 -1
- package/lib/tools/index.js +1 -1
- package/lib/tools/line/__tests__/component.test.js +45 -0
- package/lib/tools/line/component.js +1 -1
- package/lib/tools/line/index.js +1 -1
- package/lib/tools/polygon/__tests__/component.test.js +501 -0
- package/lib/tools/polygon/__tests__/index.test.js +92 -0
- package/lib/tools/polygon/__tests__/line.test.js +30 -0
- package/lib/tools/polygon/__tests__/polygon.test.js +61 -0
- package/lib/tools/polygon/component.js +1 -1
- package/lib/tools/polygon/index.js +1 -1
- package/lib/tools/polygon/line.js +1 -1
- package/lib/tools/polygon/polygon.js +1 -1
- package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
- package/lib/tools/shared/arrow-head.js +1 -1
- package/lib/tools/shared/line/__tests__/index.test.js +725 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js +64 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +618 -0
- package/lib/tools/shared/line/index.js +1 -1
- package/lib/tools/shared/line/line-path.js +1 -1
- package/lib/tools/shared/line/with-root-edge.js +1 -1
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
- package/lib/tools/shared/point/__tests__/arrow.test.js +619 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
- package/lib/tools/shared/point/arrow-point.js +1 -1
- package/lib/tools/shared/point/arrow.js +1 -1
- package/lib/tools/shared/point/base-point.js +1 -1
- package/lib/tools/shared/point/index.js +1 -1
- package/lib/tools/shared/styles.js +1 -1
- package/lib/tools/shared/types.js +1 -1
- package/lib/undo-redo.js +1 -1
- package/lib/use-debounce.js +1 -1
- package/lib/utils.js +1 -1
- package/package.json +10 -13
- package/LICENSE.md +0 -5
|
@@ -89,4 +89,4 @@ ArrowedLine.propTypes = {
|
|
|
89
89
|
var Line = (0, _line.lineBase)(ArrowedLine);
|
|
90
90
|
var Component = (0, _line.lineToolComponent)(Line);
|
|
91
91
|
var _default = exports["default"] = Component;
|
|
92
|
-
//# sourceMappingURL=component.js.map
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGluZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3Byb3BUeXBlcyIsIl9wbG90IiwiX3N0eWxlcyIsIl9hcnJvd0hlYWQiLCJfdXRpbHMiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIlN0eWxlZExpbmUiLCJzdHlsZWQiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJpbmNsdWRlcyIsIl9yZWYiLCJ0aGVtZSIsImZpbGwiLCJkaXNhYmxlZCIsImNvcnJlY3RuZXNzIiwic3R5bGVzIiwibGluZSIsImRhc2hlZExpbmUiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwibWlzc2luZyIsIlN0eWxlZEFycm93TWFya2VyIiwiQXJyb3dNYXJrZXIiLCJfcmVmMiIsInN1ZmZpeCIsImFycm93IiwiZGlzYWJsZWRBcnJvdyIsIkFycm93ZWRMaW5lIiwiZXhwb3J0cyIsInByb3BzIiwibWFya2VySWQiLCJnZW5VaWQiLCJjbGFzc05hbWUiLCJncmFwaFByb3BzIiwiX3Byb3BzJGZpbGwiLCJmcm9tIiwidG8iLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInNjYWxlIiwiX2dldEFkanVzdGVkR3JhcGhMaW1pIiwiZ2V0QWRqdXN0ZWRHcmFwaExpbWl0cyIsImRvbWFpbiIsInJhbmdlIiwiX3RyaWckZWRnZXMiLCJ0cmlnIiwiZWRnZXMiLCJfdHJpZyRlZGdlczIiLCJfc2xpY2VkVG9BcnJheTIiLCJlRnJvbSIsImVUbyIsImNyZWF0ZUVsZW1lbnQiLCJzaXplIiwidGhpbm5lclNoYXBlc05lZWRlZCIsImlkIiwiY29uY2F0IiwiX2V4dGVuZHMyIiwieDEiLCJ4IiwieTEiLCJ5IiwieDIiLCJ5MiIsIm1hcmtlckVuZCIsIm1hcmtlclN0YXJ0IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsInR5cGVzIiwiR3JhcGhQcm9wc1R5cGUiLCJQb2ludFR5cGUiLCJMaW5lIiwibGluZUJhc2UiLCJDb21wb25lbnQiLCJsaW5lVG9vbENvbXBvbmVudCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL2xpbmUvY29tcG9uZW50LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsaW5lQmFzZSwgbGluZVRvb2xDb21wb25lbnQsIHN0eWxlcyB9IGZyb20gJy4uL3NoYXJlZC9saW5lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdHJpZywgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IEFycm93TWFya2VyLCBnZW5VaWQgfSBmcm9tICcuLi9zaGFyZWQvYXJyb3ctaGVhZCc7XG5pbXBvcnQgeyBnZXRBZGp1c3RlZEdyYXBoTGltaXRzLCB0aGlubmVyU2hhcGVzTmVlZGVkIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBTdHlsZWRMaW5lID0gc3R5bGVkKCdsaW5lJywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogKHByb3ApID0+ICFbJ2ZpbGwnLCAnZGlzYWJsZWQnLCAnY29ycmVjdG5lc3MnXS5pbmNsdWRlcyhwcm9wKSxcbn0pKCh7IHRoZW1lLCBmaWxsLCBkaXNhYmxlZCwgY29ycmVjdG5lc3MgfSkgPT4gKHtcbiAgLi4uKGZpbGwgPT09ICdTb2xpZCcgPyBzdHlsZXMubGluZSh0aGVtZSkgOiBzdHlsZXMuZGFzaGVkTGluZSh0aGVtZSkpLFxuICAuLi4oZGlzYWJsZWQgJiYgc3R5bGVzLmRpc2FibGVkKHRoZW1lKSksXG4gIC4uLihjb3JyZWN0bmVzcyA9PT0gJ2NvcnJlY3QnICYmIHN0eWxlcy5jb3JyZWN0KHRoZW1lLCAnc3Ryb2tlJykpLFxuICAuLi4oY29ycmVjdG5lc3MgPT09ICdpbmNvcnJlY3QnICYmIHN0eWxlcy5pbmNvcnJlY3QodGhlbWUsICdzdHJva2UnKSksXG4gIC4uLihjb3JyZWN0bmVzcyA9PT0gJ21pc3NpbmcnICYmIHN0eWxlcy5taXNzaW5nKHRoZW1lLCAnc3Ryb2tlJykpLFxufSkpO1xuXG5jb25zdCBTdHlsZWRBcnJvd01hcmtlciA9IHN0eWxlZChBcnJvd01hcmtlciwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogKHByb3ApID0+ICFbJ3N1ZmZpeCddLmluY2x1ZGVzKHByb3ApLFxufSkoKHsgdGhlbWUsIHN1ZmZpeCB9KSA9PiAoe1xuICAuLi4oc3VmZml4ID09PSAnZW5hYmxlZCcgJiYgc3R5bGVzLmFycm93KHRoZW1lKSksXG4gIC4uLihzdWZmaXggPT09ICdkaXNhYmxlZCcgJiYgc3R5bGVzLmRpc2FibGVkQXJyb3codGhlbWUpKSxcbiAgLi4uKHN1ZmZpeCA9PT0gJ2NvcnJlY3QnICYmIHN0eWxlcy5jb3JyZWN0KHRoZW1lKSksXG4gIC4uLihzdWZmaXggPT09ICdpbmNvcnJlY3QnICYmIHN0eWxlcy5pbmNvcnJlY3QodGhlbWUpKSxcbiAgLi4uKHN1ZmZpeCA9PT0gJ21pc3NpbmcnICYmIHN0eWxlcy5taXNzaW5nKHRoZW1lKSksXG59KSk7XG5cbmV4cG9ydCBjb25zdCBBcnJvd2VkTGluZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBtYXJrZXJJZCA9IGdlblVpZCgpO1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY29ycmVjdG5lc3MsIGRpc2FibGVkLCBncmFwaFByb3BzLCBmaWxsID0gJ1NvbGlkJywgZnJvbSwgdG8sIC4uLnJlc3QgfSA9IHByb3BzO1xuICBjb25zdCB7IHNjYWxlIH0gPSBncmFwaFByb3BzO1xuICBjb25zdCB7IGRvbWFpbiwgcmFuZ2UgfSA9IGdldEFkanVzdGVkR3JhcGhMaW1pdHMoZ3JhcGhQcm9wcyk7XG4gIGNvbnN0IFtlRnJvbSwgZVRvXSA9IHRyaWcuZWRnZXMoZG9tYWluLCByYW5nZSkoZnJvbSwgdG8pO1xuICBjb25zdCBzdWZmaXggPSBjb3JyZWN0bmVzcyB8fCAoZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJykgfHwgJ2VuYWJsZWQnO1xuXG4gIHJldHVybiAoXG4gICAgPGc+XG4gICAgICA8ZGVmcz5cbiAgICAgICAgPFN0eWxlZEFycm93TWFya2VyXG4gICAgICAgICAgc2l6ZT17dGhpbm5lclNoYXBlc05lZWRlZChncmFwaFByb3BzKSA/IDQgOiA1fVxuICAgICAgICAgIGlkPXtgJHtwcm9wcy5tYXJrZXJJZCB8fCBtYXJrZXJJZH0tJHtzdWZmaXh9YH1cbiAgICAgICAgICBzdWZmaXg9e3N1ZmZpeH1cbiAgICAgICAgLz5cbiAgICAgIDwvZGVmcz5cbiAgICAgIDxTdHlsZWRMaW5lXG4gICAgICAgIHgxPXtzY2FsZS54KGVGcm9tLngpfVxuICAgICAgICB5MT17c2NhbGUueShlRnJvbS55KX1cbiAgICAgICAgeDI9e3NjYWxlLngoZVRvLngpfVxuICAgICAgICB5Mj17c2NhbGUueShlVG8ueSl9XG4gICAgICAgIGZpbGw9e2ZpbGx9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY29ycmVjdG5lc3M9e2NvcnJlY3RuZXNzfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgbWFya2VyRW5kPXtgdXJsKCMke3Byb3BzLm1hcmtlcklkIHx8IG1hcmtlcklkfS0ke3N1ZmZpeH0pYH1cbiAgICAgICAgbWFya2VyU3RhcnQ9e2B1cmwoIyR7cHJvcHMubWFya2VySWQgfHwgbWFya2VySWR9LSR7c3VmZml4fSlgfVxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgIC8+XG4gICAgPC9nPlxuICApO1xufTtcblxuQXJyb3dlZExpbmUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZpbGw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvcnJlY3RuZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLFxuICBmcm9tOiB0eXBlcy5Qb2ludFR5cGUsXG4gIHRvOiB0eXBlcy5Qb2ludFR5cGUsXG4gIG1hcmtlcklkOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuY29uc3QgTGluZSA9IGxpbmVCYXNlKEFycm93ZWRMaW5lKTtcbmNvbnN0IENvbXBvbmVudCA9IGxpbmVUb29sQ29tcG9uZW50KExpbmUpO1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQTBFLElBQUFRLFNBQUE7QUFBQSxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FB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
|
package/lib/tools/line/index.js
CHANGED
|
@@ -8,4 +8,4 @@ exports.tool = void 0;
|
|
|
8
8
|
var _component = _interopRequireDefault(require("./component"));
|
|
9
9
|
var _line = require("../shared/line");
|
|
10
10
|
var tool = exports.tool = (0, _line.lineTool)('line', _component["default"]);
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tcG9uZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfbGluZSIsInRvb2wiLCJleHBvcnRzIiwibGluZVRvb2wiLCJMaW5lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL2xpbmUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExpbmUgZnJvbSAnLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgbGluZVRvb2wgfSBmcm9tICcuLi9zaGFyZWQvbGluZSc7XG5cbmV4cG9ydCBjb25zdCB0b29sID0gbGluZVRvb2woJ2xpbmUnLCBMaW5lKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUVPLElBQU1FLElBQUksR0FBQUMsT0FBQSxDQUFBRCxJQUFBLEdBQUcsSUFBQUUsY0FBUSxFQUFDLE1BQU0sRUFBRUMscUJBQUksQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
5
|
+
var _testUtils = require("@pie-lib/test-utils");
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _utils = require("../../../__tests__/utils");
|
|
8
|
+
var _component = require("../component");
|
|
9
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
+
var xyLabel = function xyLabel(x, y, index, label) {
|
|
12
|
+
return _objectSpread(_objectSpread({}, (0, _utils.xy)(x, y, index)), {}, {
|
|
13
|
+
label: label
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// Pure function tests - keep as-is
|
|
18
|
+
describe('buildLines', function () {
|
|
19
|
+
var defaultPoints = [(0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(1, 0)];
|
|
20
|
+
var assertBuildLines = function assertBuildLines(points, closed, expected) {
|
|
21
|
+
it("builds points and lines for ".concat(points, " = ").concat(expected), function () {
|
|
22
|
+
var result = (0, _component.buildLines)(points);
|
|
23
|
+
expect(result).toMatchObject([{
|
|
24
|
+
from: (0, _utils.xy)(0, 0, 0),
|
|
25
|
+
to: (0, _utils.xy)(1, 1, 1)
|
|
26
|
+
}, {
|
|
27
|
+
from: (0, _utils.xy)(1, 1, 1),
|
|
28
|
+
to: (0, _utils.xy)(1, 0, 2)
|
|
29
|
+
}]);
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
assertBuildLines(defaultPoints, true, []);
|
|
33
|
+
});
|
|
34
|
+
describe('swap', function () {
|
|
35
|
+
it('swaps pairs', function () {
|
|
36
|
+
var result = (0, _component.swap)([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)], (0, _utils.xy)(0, 0, 0), (0, _utils.xy)(3, 3, 0));
|
|
37
|
+
expect(result).toEqual([(0, _utils.xy)(3, 3, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)]);
|
|
38
|
+
});
|
|
39
|
+
it('swaps first element', function () {
|
|
40
|
+
var result = (0, _component.swap)([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)], (0, _utils.xy)(0, 0, 0), (0, _utils.xy)(5, 5, 0));
|
|
41
|
+
expect(result).toEqual([(0, _utils.xy)(5, 5, 0), (0, _utils.xy)(1, 1, 1)]);
|
|
42
|
+
});
|
|
43
|
+
it('swaps last element', function () {
|
|
44
|
+
var result = (0, _component.swap)([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)], (0, _utils.xy)(2, 2, 2), (0, _utils.xy)(3, 3, 2));
|
|
45
|
+
expect(result).toEqual([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(3, 3, 2)]);
|
|
46
|
+
});
|
|
47
|
+
it('swaps middle element', function () {
|
|
48
|
+
var result = (0, _component.swap)([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)], (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(3, 3, 1));
|
|
49
|
+
expect(result).toEqual([(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(3, 3, 1), (0, _utils.xy)(2, 2, 2)]);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Note: Instance method tests have been removed. Component behavior should be tested
|
|
54
|
+
// through user interactions and integration tests.
|
|
55
|
+
describe('RawBaseComponent', function () {
|
|
56
|
+
var onChange;
|
|
57
|
+
var onChangeProps;
|
|
58
|
+
var onClosePolygon;
|
|
59
|
+
beforeEach(function () {
|
|
60
|
+
onChange = jest.fn();
|
|
61
|
+
onChangeProps = jest.fn();
|
|
62
|
+
onClosePolygon = jest.fn();
|
|
63
|
+
});
|
|
64
|
+
var renderComponent = function renderComponent(extras) {
|
|
65
|
+
var defaults = {
|
|
66
|
+
className: 'className',
|
|
67
|
+
onChange: onChange,
|
|
68
|
+
onChangeProps: onChangeProps,
|
|
69
|
+
onClosePolygon: onClosePolygon,
|
|
70
|
+
graphProps: (0, _utils.graphProps)(),
|
|
71
|
+
points: []
|
|
72
|
+
};
|
|
73
|
+
var props = _objectSpread(_objectSpread({}, defaults), extras);
|
|
74
|
+
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_component.RawBaseComponent, props));
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// used to test items that have labels attached to points
|
|
78
|
+
var labelNode = document.createElement('foreignObject');
|
|
79
|
+
var points = [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B'), xyLabel(0, 2, 2, 'C')];
|
|
80
|
+
var renderWithLabels = function renderWithLabels(extras) {
|
|
81
|
+
return renderComponent(_objectSpread({
|
|
82
|
+
labelNode: labelNode,
|
|
83
|
+
points: points
|
|
84
|
+
}, extras));
|
|
85
|
+
};
|
|
86
|
+
describe('rendering', function () {
|
|
87
|
+
it('renders without crashing', function () {
|
|
88
|
+
var _renderComponent = renderComponent(),
|
|
89
|
+
container = _renderComponent.container;
|
|
90
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
91
|
+
});
|
|
92
|
+
it('renders with labels', function () {
|
|
93
|
+
var _renderWithLabels = renderWithLabels(),
|
|
94
|
+
container = _renderWithLabels.container;
|
|
95
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
96
|
+
});
|
|
97
|
+
it('renders with multiple points', function () {
|
|
98
|
+
var _renderComponent2 = renderComponent({
|
|
99
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)]
|
|
100
|
+
}),
|
|
101
|
+
container = _renderComponent2.container;
|
|
102
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
103
|
+
});
|
|
104
|
+
it('renders with closed polygon', function () {
|
|
105
|
+
var _renderComponent3 = renderComponent({
|
|
106
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
107
|
+
closed: true
|
|
108
|
+
}),
|
|
109
|
+
container = _renderComponent3.container;
|
|
110
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
111
|
+
});
|
|
112
|
+
it('renders with single point', function () {
|
|
113
|
+
var _renderComponent4 = renderComponent({
|
|
114
|
+
points: [(0, _utils.xy)(0, 0, 0)]
|
|
115
|
+
}),
|
|
116
|
+
container = _renderComponent4.container;
|
|
117
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
118
|
+
});
|
|
119
|
+
it('renders with two points', function () {
|
|
120
|
+
var _renderComponent5 = renderComponent({
|
|
121
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
122
|
+
}),
|
|
123
|
+
container = _renderComponent5.container;
|
|
124
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
125
|
+
});
|
|
126
|
+
it('renders empty polygon', function () {
|
|
127
|
+
var _renderComponent6 = renderComponent({
|
|
128
|
+
points: []
|
|
129
|
+
}),
|
|
130
|
+
container = _renderComponent6.container;
|
|
131
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
it('renders with negative coordinates', function () {
|
|
134
|
+
var _renderComponent7 = renderComponent({
|
|
135
|
+
points: [(0, _utils.xy)(-5, -5, 0), (0, _utils.xy)(-1, -1, 1), (0, _utils.xy)(-3, -2, 2)]
|
|
136
|
+
}),
|
|
137
|
+
container = _renderComponent7.container;
|
|
138
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
139
|
+
});
|
|
140
|
+
it('renders with decimal coordinates', function () {
|
|
141
|
+
var _renderComponent8 = renderComponent({
|
|
142
|
+
points: [(0, _utils.xy)(0.5, 0.5, 0), (0, _utils.xy)(1.5, 1.5, 1), (0, _utils.xy)(2.5, 0.5, 2)]
|
|
143
|
+
}),
|
|
144
|
+
container = _renderComponent8.container;
|
|
145
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
146
|
+
});
|
|
147
|
+
it('renders with large coordinate values', function () {
|
|
148
|
+
var _renderComponent9 = renderComponent({
|
|
149
|
+
points: [(0, _utils.xy)(100, 100, 0), (0, _utils.xy)(200, 200, 1), (0, _utils.xy)(150, 250, 2)]
|
|
150
|
+
}),
|
|
151
|
+
container = _renderComponent9.container;
|
|
152
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('states', function () {
|
|
156
|
+
it('renders in disabled state', function () {
|
|
157
|
+
var _renderComponent0 = renderComponent({
|
|
158
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
159
|
+
disabled: true
|
|
160
|
+
}),
|
|
161
|
+
container = _renderComponent0.container;
|
|
162
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
163
|
+
});
|
|
164
|
+
it('renders in enabled state', function () {
|
|
165
|
+
var _renderComponent1 = renderComponent({
|
|
166
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
167
|
+
disabled: false
|
|
168
|
+
}),
|
|
169
|
+
container = _renderComponent1.container;
|
|
170
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
171
|
+
});
|
|
172
|
+
it('renders with correctness correct', function () {
|
|
173
|
+
var _renderComponent10 = renderComponent({
|
|
174
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
175
|
+
correctness: 'correct'
|
|
176
|
+
}),
|
|
177
|
+
container = _renderComponent10.container;
|
|
178
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
179
|
+
});
|
|
180
|
+
it('renders with correctness incorrect', function () {
|
|
181
|
+
var _renderComponent11 = renderComponent({
|
|
182
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
183
|
+
correctness: 'incorrect'
|
|
184
|
+
}),
|
|
185
|
+
container = _renderComponent11.container;
|
|
186
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
187
|
+
});
|
|
188
|
+
it('renders with building state', function () {
|
|
189
|
+
var _renderComponent12 = renderComponent({
|
|
190
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)],
|
|
191
|
+
building: true
|
|
192
|
+
}),
|
|
193
|
+
container = _renderComponent12.container;
|
|
194
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
195
|
+
});
|
|
196
|
+
it('renders with fill property', function () {
|
|
197
|
+
var _renderComponent13 = renderComponent({
|
|
198
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)],
|
|
199
|
+
fill: '#ff0000'
|
|
200
|
+
}),
|
|
201
|
+
container = _renderComponent13.container;
|
|
202
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('labels', function () {
|
|
206
|
+
it('renders with all points labeled', function () {
|
|
207
|
+
var _renderWithLabels2 = renderWithLabels(),
|
|
208
|
+
container = _renderWithLabels2.container;
|
|
209
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
210
|
+
});
|
|
211
|
+
it('renders with partial labels', function () {
|
|
212
|
+
var partialLabels = [xyLabel(0, 0, 0, 'A'), (0, _utils.xy)(2, 2, 1), xyLabel(0, 2, 2, 'C')];
|
|
213
|
+
var _renderComponent14 = renderComponent({
|
|
214
|
+
labelNode: labelNode,
|
|
215
|
+
points: partialLabels
|
|
216
|
+
}),
|
|
217
|
+
container = _renderComponent14.container;
|
|
218
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
219
|
+
});
|
|
220
|
+
it('renders with empty string labels', function () {
|
|
221
|
+
var emptyLabels = [xyLabel(0, 0, 0, ''), xyLabel(2, 2, 1, ''), xyLabel(0, 2, 2, '')];
|
|
222
|
+
var _renderComponent15 = renderComponent({
|
|
223
|
+
labelNode: labelNode,
|
|
224
|
+
points: emptyLabels
|
|
225
|
+
}),
|
|
226
|
+
container = _renderComponent15.container;
|
|
227
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
228
|
+
});
|
|
229
|
+
it('renders without labelNode', function () {
|
|
230
|
+
var _renderComponent16 = renderComponent({
|
|
231
|
+
points: [xyLabel(0, 0, 0, 'A'), xyLabel(2, 2, 1, 'B')]
|
|
232
|
+
}),
|
|
233
|
+
container = _renderComponent16.container;
|
|
234
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
235
|
+
});
|
|
236
|
+
it('renders with labelModeEnabled', function () {
|
|
237
|
+
var _renderWithLabels3 = renderWithLabels({
|
|
238
|
+
labelModeEnabled: true
|
|
239
|
+
}),
|
|
240
|
+
container = _renderWithLabels3.container;
|
|
241
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
242
|
+
});
|
|
243
|
+
it('renders with labelModeEnabled disabled', function () {
|
|
244
|
+
var _renderWithLabels4 = renderWithLabels({
|
|
245
|
+
labelModeEnabled: false
|
|
246
|
+
}),
|
|
247
|
+
container = _renderWithLabels4.container;
|
|
248
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
249
|
+
});
|
|
250
|
+
it('renders with long labels', function () {
|
|
251
|
+
var longLabels = [xyLabel(0, 0, 0, 'Very Long Label Text'), xyLabel(2, 2, 1, 'Another Long Label'), xyLabel(0, 2, 2, 'Yet Another Long Label')];
|
|
252
|
+
var _renderComponent17 = renderComponent({
|
|
253
|
+
labelNode: labelNode,
|
|
254
|
+
points: longLabels
|
|
255
|
+
}),
|
|
256
|
+
container = _renderComponent17.container;
|
|
257
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
describe('polygon shapes', function () {
|
|
261
|
+
it('renders triangle', function () {
|
|
262
|
+
var _renderComponent18 = renderComponent({
|
|
263
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(2, 0, 1), (0, _utils.xy)(1, 2, 2)],
|
|
264
|
+
closed: true
|
|
265
|
+
}),
|
|
266
|
+
container = _renderComponent18.container;
|
|
267
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
268
|
+
});
|
|
269
|
+
it('renders square', function () {
|
|
270
|
+
var _renderComponent19 = renderComponent({
|
|
271
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(2, 0, 1), (0, _utils.xy)(2, 2, 2), (0, _utils.xy)(0, 2, 3)],
|
|
272
|
+
closed: true
|
|
273
|
+
}),
|
|
274
|
+
container = _renderComponent19.container;
|
|
275
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
276
|
+
});
|
|
277
|
+
it('renders pentagon', function () {
|
|
278
|
+
var _renderComponent20 = renderComponent({
|
|
279
|
+
points: [(0, _utils.xy)(1, 0, 0), (0, _utils.xy)(2, 1, 1), (0, _utils.xy)(1.5, 2.5, 2), (0, _utils.xy)(0.5, 2.5, 3), (0, _utils.xy)(0, 1, 4)],
|
|
280
|
+
closed: true
|
|
281
|
+
}),
|
|
282
|
+
container = _renderComponent20.container;
|
|
283
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
284
|
+
});
|
|
285
|
+
it('renders irregular polygon', function () {
|
|
286
|
+
var _renderComponent21 = renderComponent({
|
|
287
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(3, 1, 1), (0, _utils.xy)(2, 4, 2), (0, _utils.xy)(-1, 3, 3)],
|
|
288
|
+
closed: true
|
|
289
|
+
}),
|
|
290
|
+
container = _renderComponent21.container;
|
|
291
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
describe('props', function () {
|
|
295
|
+
it('passes onChange callback', function () {
|
|
296
|
+
var customOnChange = jest.fn();
|
|
297
|
+
var _renderComponent22 = renderComponent({
|
|
298
|
+
onChange: customOnChange,
|
|
299
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
300
|
+
}),
|
|
301
|
+
container = _renderComponent22.container;
|
|
302
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
303
|
+
});
|
|
304
|
+
it('passes onChangeProps callback', function () {
|
|
305
|
+
var customOnChangeProps = jest.fn();
|
|
306
|
+
var _renderComponent23 = renderComponent({
|
|
307
|
+
onChangeProps: customOnChangeProps,
|
|
308
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
309
|
+
}),
|
|
310
|
+
container = _renderComponent23.container;
|
|
311
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
312
|
+
});
|
|
313
|
+
it('passes onClick callback', function () {
|
|
314
|
+
var onClick = jest.fn();
|
|
315
|
+
var _renderComponent24 = renderComponent({
|
|
316
|
+
onClick: onClick,
|
|
317
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
318
|
+
}),
|
|
319
|
+
container = _renderComponent24.container;
|
|
320
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
321
|
+
});
|
|
322
|
+
it('passes onClosePolygon callback', function () {
|
|
323
|
+
var customOnClosePolygon = jest.fn();
|
|
324
|
+
var _renderComponent25 = renderComponent({
|
|
325
|
+
onClosePolygon: customOnClosePolygon,
|
|
326
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)]
|
|
327
|
+
}),
|
|
328
|
+
container = _renderComponent25.container;
|
|
329
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
330
|
+
});
|
|
331
|
+
it('passes onDragStart callback', function () {
|
|
332
|
+
var onDragStart = jest.fn();
|
|
333
|
+
var _renderComponent26 = renderComponent({
|
|
334
|
+
onDragStart: onDragStart,
|
|
335
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
336
|
+
}),
|
|
337
|
+
container = _renderComponent26.container;
|
|
338
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
339
|
+
});
|
|
340
|
+
it('passes onDragStop callback', function () {
|
|
341
|
+
var onDragStop = jest.fn();
|
|
342
|
+
var _renderComponent27 = renderComponent({
|
|
343
|
+
onDragStop: onDragStop,
|
|
344
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
345
|
+
}),
|
|
346
|
+
container = _renderComponent27.container;
|
|
347
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
348
|
+
});
|
|
349
|
+
it('passes coordinatesOnHover', function () {
|
|
350
|
+
var _renderComponent28 = renderComponent({
|
|
351
|
+
coordinatesOnHover: true,
|
|
352
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)]
|
|
353
|
+
}),
|
|
354
|
+
container = _renderComponent28.container;
|
|
355
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
356
|
+
});
|
|
357
|
+
it('passes graphProps', function () {
|
|
358
|
+
var customGraphProps = (0, _utils.graphProps)(0, 10, 0, 10);
|
|
359
|
+
var _renderComponent29 = renderComponent({
|
|
360
|
+
graphProps: customGraphProps,
|
|
361
|
+
points: [(0, _utils.xy)(5, 5, 0), (0, _utils.xy)(7, 7, 1)]
|
|
362
|
+
}),
|
|
363
|
+
container = _renderComponent29.container;
|
|
364
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
365
|
+
});
|
|
366
|
+
it('passes gssLineData', function () {
|
|
367
|
+
var gssLineData = {
|
|
368
|
+
selectedTool: 'solutionSet'
|
|
369
|
+
};
|
|
370
|
+
var _renderComponent30 = renderComponent({
|
|
371
|
+
gssLineData: gssLineData,
|
|
372
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 0, 2)]
|
|
373
|
+
}),
|
|
374
|
+
container = _renderComponent30.container;
|
|
375
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
describe('edge cases', function () {
|
|
379
|
+
it('handles points with same coordinates', function () {
|
|
380
|
+
var _renderComponent31 = renderComponent({
|
|
381
|
+
points: [(0, _utils.xy)(1, 1, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(1, 1, 2)]
|
|
382
|
+
}),
|
|
383
|
+
container = _renderComponent31.container;
|
|
384
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
385
|
+
});
|
|
386
|
+
it('handles collinear points', function () {
|
|
387
|
+
var _renderComponent32 = renderComponent({
|
|
388
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1), (0, _utils.xy)(2, 2, 2)]
|
|
389
|
+
}),
|
|
390
|
+
container = _renderComponent32.container;
|
|
391
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
392
|
+
});
|
|
393
|
+
it('handles very close points', function () {
|
|
394
|
+
var _renderComponent33 = renderComponent({
|
|
395
|
+
points: [(0, _utils.xy)(1, 1, 0), (0, _utils.xy)(1.001, 1.001, 1), (0, _utils.xy)(1.002, 1.002, 2)]
|
|
396
|
+
}),
|
|
397
|
+
container = _renderComponent33.container;
|
|
398
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
399
|
+
});
|
|
400
|
+
it('handles mixed positive and negative coordinates', function () {
|
|
401
|
+
var _renderComponent34 = renderComponent({
|
|
402
|
+
points: [(0, _utils.xy)(-5, 5, 0), (0, _utils.xy)(5, 5, 1), (0, _utils.xy)(5, -5, 2), (0, _utils.xy)(-5, -5, 3)],
|
|
403
|
+
closed: true
|
|
404
|
+
}),
|
|
405
|
+
container = _renderComponent34.container;
|
|
406
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
407
|
+
});
|
|
408
|
+
it('handles points without explicit index', function () {
|
|
409
|
+
var _renderComponent35 = renderComponent({
|
|
410
|
+
points: [{
|
|
411
|
+
x: 0,
|
|
412
|
+
y: 0
|
|
413
|
+
}, {
|
|
414
|
+
x: 1,
|
|
415
|
+
y: 1
|
|
416
|
+
}, {
|
|
417
|
+
x: 2,
|
|
418
|
+
y: 0
|
|
419
|
+
}]
|
|
420
|
+
}),
|
|
421
|
+
container = _renderComponent35.container;
|
|
422
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
423
|
+
});
|
|
424
|
+
it('handles undefined properties', function () {
|
|
425
|
+
var _renderComponent36 = renderComponent({
|
|
426
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)],
|
|
427
|
+
disabled: undefined,
|
|
428
|
+
correctness: undefined,
|
|
429
|
+
building: undefined,
|
|
430
|
+
fill: undefined
|
|
431
|
+
}),
|
|
432
|
+
container = _renderComponent36.container;
|
|
433
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
434
|
+
});
|
|
435
|
+
});
|
|
436
|
+
describe('integration', function () {
|
|
437
|
+
it('renders complete closed polygon with all features', function () {
|
|
438
|
+
var _renderComponent37 = renderComponent({
|
|
439
|
+
points: points,
|
|
440
|
+
closed: true,
|
|
441
|
+
labelNode: labelNode,
|
|
442
|
+
labelModeEnabled: true,
|
|
443
|
+
coordinatesOnHover: true,
|
|
444
|
+
correctness: 'correct',
|
|
445
|
+
disabled: false,
|
|
446
|
+
fill: '#00ff00',
|
|
447
|
+
gssLineData: {
|
|
448
|
+
selectedTool: 'solutionSet'
|
|
449
|
+
},
|
|
450
|
+
onChange: jest.fn(),
|
|
451
|
+
onChangeProps: jest.fn(),
|
|
452
|
+
onClosePolygon: jest.fn(),
|
|
453
|
+
onClick: jest.fn(),
|
|
454
|
+
onDragStart: jest.fn(),
|
|
455
|
+
onDragStop: jest.fn()
|
|
456
|
+
}),
|
|
457
|
+
container = _renderComponent37.container;
|
|
458
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
459
|
+
});
|
|
460
|
+
it('renders building polygon', function () {
|
|
461
|
+
var _renderComponent38 = renderComponent({
|
|
462
|
+
points: [(0, _utils.xy)(0, 0, 0), (0, _utils.xy)(1, 1, 1)],
|
|
463
|
+
building: true,
|
|
464
|
+
closed: false
|
|
465
|
+
}),
|
|
466
|
+
container = _renderComponent38.container;
|
|
467
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
468
|
+
});
|
|
469
|
+
it('renders disabled polygon with labels', function () {
|
|
470
|
+
var _renderComponent39 = renderComponent({
|
|
471
|
+
points: points,
|
|
472
|
+
labelNode: labelNode,
|
|
473
|
+
disabled: true,
|
|
474
|
+
closed: true
|
|
475
|
+
}),
|
|
476
|
+
container = _renderComponent39.container;
|
|
477
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
478
|
+
});
|
|
479
|
+
it('renders polygon in solution set mode', function () {
|
|
480
|
+
var _renderComponent40 = renderComponent({
|
|
481
|
+
points: points,
|
|
482
|
+
closed: true,
|
|
483
|
+
gssLineData: {
|
|
484
|
+
selectedTool: 'solutionSet'
|
|
485
|
+
}
|
|
486
|
+
}),
|
|
487
|
+
container = _renderComponent40.container;
|
|
488
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
489
|
+
});
|
|
490
|
+
it('renders polygon with incorrect correctness', function () {
|
|
491
|
+
var _renderComponent41 = renderComponent({
|
|
492
|
+
points: points,
|
|
493
|
+
closed: true,
|
|
494
|
+
correctness: 'incorrect'
|
|
495
|
+
}),
|
|
496
|
+
container = _renderComponent41.container;
|
|
497
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXRpbHMiLCJfY29tcG9uZW50Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ4eUxhYmVsIiwieCIsInkiLCJpbmRleCIsImxhYmVsIiwieHkiLCJkZXNjcmliZSIsImRlZmF1bHRQb2ludHMiLCJhc3NlcnRCdWlsZExpbmVzIiwicG9pbnRzIiwiY2xvc2VkIiwiZXhwZWN0ZWQiLCJpdCIsImNvbmNhdCIsInJlc3VsdCIsImJ1aWxkTGluZXMiLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0IiwiZnJvbSIsInRvIiwic3dhcCIsInRvRXF1YWwiLCJvbkNoYW5nZSIsIm9uQ2hhbmdlUHJvcHMiLCJvbkNsb3NlUG9seWdvbiIsImJlZm9yZUVhY2giLCJqZXN0IiwiZm4iLCJyZW5kZXJDb21wb25lbnQiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzTmFtZSIsImdyYXBoUHJvcHMiLCJwcm9wcyIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJSYXdCYXNlQ29tcG9uZW50IiwibGFiZWxOb2RlIiwiZG9jdW1lbnQiLCJyZW5kZXJXaXRoTGFiZWxzIiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXJXaXRoTGFiZWxzIiwiX3JlbmRlckNvbXBvbmVudDIiLCJfcmVuZGVyQ29tcG9uZW50MyIsIl9yZW5kZXJDb21wb25lbnQ0IiwiX3JlbmRlckNvbXBvbmVudDUiLCJfcmVuZGVyQ29tcG9uZW50NiIsIl9yZW5kZXJDb21wb25lbnQ3IiwiX3JlbmRlckNvbXBvbmVudDgiLCJfcmVuZGVyQ29tcG9uZW50OSIsIl9yZW5kZXJDb21wb25lbnQwIiwiZGlzYWJsZWQiLCJfcmVuZGVyQ29tcG9uZW50MSIsIl9yZW5kZXJDb21wb25lbnQxMCIsImNvcnJlY3RuZXNzIiwiX3JlbmRlckNvbXBvbmVudDExIiwiX3JlbmRlckNvbXBvbmVudDEyIiwiYnVpbGRpbmciLCJfcmVuZGVyQ29tcG9uZW50MTMiLCJmaWxsIiwiX3JlbmRlcldpdGhMYWJlbHMyIiwicGFydGlhbExhYmVscyIsIl9yZW5kZXJDb21wb25lbnQxNCIsImVtcHR5TGFiZWxzIiwiX3JlbmRlckNvbXBvbmVudDE1IiwiX3JlbmRlckNvbXBvbmVudDE2IiwiX3JlbmRlcldpdGhMYWJlbHMzIiwibGFiZWxNb2RlRW5hYmxlZCIsIl9yZW5kZXJXaXRoTGFiZWxzNCIsImxvbmdMYWJlbHMiLCJfcmVuZGVyQ29tcG9uZW50MTciLCJfcmVuZGVyQ29tcG9uZW50MTgiLCJfcmVuZGVyQ29tcG9uZW50MTkiLCJfcmVuZGVyQ29tcG9uZW50MjAiLCJfcmVuZGVyQ29tcG9uZW50MjEiLCJjdXN0b21PbkNoYW5nZSIsIl9yZW5kZXJDb21wb25lbnQyMiIsImN1c3RvbU9uQ2hhbmdlUHJvcHMiLCJfcmVuZGVyQ29tcG9uZW50MjMiLCJvbkNsaWNrIiwiX3JlbmRlckNvbXBvbmVudDI0IiwiY3VzdG9tT25DbG9zZVBvbHlnb24iLCJfcmVuZGVyQ29tcG9uZW50MjUiLCJvbkRyYWdTdGFydCIsIl9yZW5kZXJDb21wb25lbnQyNiIsIm9uRHJhZ1N0b3AiLCJfcmVuZGVyQ29tcG9uZW50MjciLCJfcmVuZGVyQ29tcG9uZW50MjgiLCJjb29yZGluYXRlc09uSG92ZXIiLCJjdXN0b21HcmFwaFByb3BzIiwiX3JlbmRlckNvbXBvbmVudDI5IiwiZ3NzTGluZURhdGEiLCJzZWxlY3RlZFRvb2wiLCJfcmVuZGVyQ29tcG9uZW50MzAiLCJfcmVuZGVyQ29tcG9uZW50MzEiLCJfcmVuZGVyQ29tcG9uZW50MzIiLCJfcmVuZGVyQ29tcG9uZW50MzMiLCJfcmVuZGVyQ29tcG9uZW50MzQiLCJfcmVuZGVyQ29tcG9uZW50MzUiLCJfcmVuZGVyQ29tcG9uZW50MzYiLCJ1bmRlZmluZWQiLCJfcmVuZGVyQ29tcG9uZW50MzciLCJfcmVuZGVyQ29tcG9uZW50MzgiLCJfcmVuZGVyQ29tcG9uZW50MzkiLCJfcmVuZGVyQ29tcG9uZW50NDAiLCJfcmVuZGVyQ29tcG9uZW50NDEiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbHMvcG9seWdvbi9fX3Rlc3RzX18vY29tcG9uZW50LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdyYXBoUHJvcHMsIHh5IH0gZnJvbSAnLi4vLi4vLi4vX190ZXN0c19fL3V0aWxzJztcblxuaW1wb3J0IHsgYnVpbGRMaW5lcywgUmF3QmFzZUNvbXBvbmVudCwgc3dhcCB9IGZyb20gJy4uL2NvbXBvbmVudCc7XG5cbmNvbnN0IHh5TGFiZWwgPSAoeCwgeSwgaW5kZXgsIGxhYmVsKSA9PiAoe1xuICAuLi54eSh4LCB5LCBpbmRleCksXG4gIGxhYmVsLFxufSk7XG5cbi8vIFB1cmUgZnVuY3Rpb24gdGVzdHMgLSBrZWVwIGFzLWlzXG5kZXNjcmliZSgnYnVpbGRMaW5lcycsICgpID0+IHtcbiAgY29uc3QgZGVmYXVsdFBvaW50cyA9IFt4eSgwLCAwKSwgeHkoMSwgMSksIHh5KDEsIDApXTtcblxuICBjb25zdCBhc3NlcnRCdWlsZExpbmVzID0gKHBvaW50cywgY2xvc2VkLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGBidWlsZHMgcG9pbnRzIGFuZCBsaW5lcyBmb3IgJHtwb2ludHN9ID0gJHtleHBlY3RlZH1gLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZExpbmVzKHBvaW50cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KFtcbiAgICAgICAgeyBmcm9tOiB4eSgwLCAwLCAwKSwgdG86IHh5KDEsIDEsIDEpIH0sXG4gICAgICAgIHsgZnJvbTogeHkoMSwgMSwgMSksIHRvOiB4eSgxLCAwLCAyKSB9LFxuICAgICAgXSk7XG4gICAgfSk7XG4gIH07XG5cbiAgYXNzZXJ0QnVpbGRMaW5lcyhkZWZhdWx0UG9pbnRzLCB0cnVlLCBbXSk7XG59KTtcblxuZGVzY3JpYmUoJ3N3YXAnLCAoKSA9PiB7XG4gIGl0KCdzd2FwcyBwYWlycycsICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBzd2FwKFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSksIHh5KDIsIDIsIDIpXSwgeHkoMCwgMCwgMCksIHh5KDMsIDMsIDApKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFt4eSgzLCAzLCAwKSwgeHkoMSwgMSwgMSksIHh5KDIsIDIsIDIpXSk7XG4gIH0pO1xuXG4gIGl0KCdzd2FwcyBmaXJzdCBlbGVtZW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN3YXAoW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKV0sIHh5KDAsIDAsIDApLCB4eSg1LCA1LCAwKSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbeHkoNSwgNSwgMCksIHh5KDEsIDEsIDEpXSk7XG4gIH0pO1xuXG4gIGl0KCdzd2FwcyBsYXN0IGVsZW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3dhcChbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAyLCAyKV0sIHh5KDIsIDIsIDIpLCB4eSgzLCAzLCAyKSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgzLCAzLCAyKV0pO1xuICB9KTtcblxuICBpdCgnc3dhcHMgbWlkZGxlIGVsZW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3dhcChbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAyLCAyKV0sIHh5KDEsIDEsIDEpLCB4eSgzLCAzLCAxKSk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbeHkoMCwgMCwgMCksIHh5KDMsIDMsIDEpLCB4eSgyLCAyLCAyKV0pO1xuICB9KTtcbn0pO1xuXG4vLyBOb3RlOiBJbnN0YW5jZSBtZXRob2QgdGVzdHMgaGF2ZSBiZWVuIHJlbW92ZWQuIENvbXBvbmVudCBiZWhhdmlvciBzaG91bGQgYmUgdGVzdGVkXG4vLyB0aHJvdWdoIHVzZXIgaW50ZXJhY3Rpb25zIGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cy5cbmRlc2NyaWJlKCdSYXdCYXNlQ29tcG9uZW50JywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2U7XG4gIGxldCBvbkNoYW5nZVByb3BzO1xuICBsZXQgb25DbG9zZVBvbHlnb247XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgb25DaGFuZ2VQcm9wcyA9IGplc3QuZm4oKTtcbiAgICBvbkNsb3NlUG9seWdvbiA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DaGFuZ2VQcm9wcyxcbiAgICAgIG9uQ2xvc2VQb2x5Z29uLFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgICAgcG9pbnRzOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG4gICAgcmV0dXJuIHJlbmRlcig8UmF3QmFzZUNvbXBvbmVudCB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcblxuICAvLyB1c2VkIHRvIHRlc3QgaXRlbXMgdGhhdCBoYXZlIGxhYmVscyBhdHRhY2hlZCB0byBwb2ludHNcbiAgY29uc3QgbGFiZWxOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9yZWlnbk9iamVjdCcpO1xuICBjb25zdCBwb2ludHMgPSBbeHlMYWJlbCgwLCAwLCAwLCAnQScpLCB4eUxhYmVsKDIsIDIsIDEsICdCJyksIHh5TGFiZWwoMCwgMiwgMiwgJ0MnKV07XG4gIGNvbnN0IHJlbmRlcldpdGhMYWJlbHMgPSAoZXh0cmFzKSA9PlxuICAgIHJlbmRlckNvbXBvbmVudCh7XG4gICAgICBsYWJlbE5vZGU6IGxhYmVsTm9kZSxcbiAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgLi4uZXh0cmFzLFxuICAgIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbGFiZWxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcldpdGhMYWJlbHMoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbXVsdGlwbGUgcG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGNsb3NlZCBwb2x5Z29uJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgICBjbG9zZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggc2luZ2xlIHBvaW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCB0d28gcG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGVtcHR5IHBvbHlnb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgcG9pbnRzOiBbXSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbmVnYXRpdmUgY29vcmRpbmF0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoLTUsIC01LCAwKSwgeHkoLTEsIC0xLCAxKSwgeHkoLTMsIC0yLCAyKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggZGVjaW1hbCBjb29yZGluYXRlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgwLjUsIDAuNSwgMCksIHh5KDEuNSwgMS41LCAxKSwgeHkoMi41LCAwLjUsIDIpXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBsYXJnZSBjb29yZGluYXRlIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgxMDAsIDEwMCwgMCksIHh5KDIwMCwgMjAwLCAxKSwgeHkoMTUwLCAyNTAsIDIpXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGVzJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIGluIGRpc2FibGVkIHN0YXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgaW4gZW5hYmxlZCBzdGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSksIHh5KDIsIDAsIDIpXSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGNvcnJlY3RuZXNzIGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAwLCAyKV0sXG4gICAgICAgIGNvcnJlY3RuZXNzOiAnY29ycmVjdCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY29ycmVjdG5lc3MgaW5jb3JyZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgICBjb3JyZWN0bmVzczogJ2luY29ycmVjdCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggYnVpbGRpbmcgc3RhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpXSxcbiAgICAgICAgYnVpbGRpbmc6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggZmlsbCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSksIHh5KDIsIDAsIDIpXSxcbiAgICAgICAgZmlsbDogJyNmZjAwMDAnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsYWJlbHMnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBhbGwgcG9pbnRzIGxhYmVsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aExhYmVscygpO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBwYXJ0aWFsIGxhYmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxMYWJlbHMgPSBbeHlMYWJlbCgwLCAwLCAwLCAnQScpLCB4eSgyLCAyLCAxKSwgeHlMYWJlbCgwLCAyLCAyLCAnQycpXTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgIHBvaW50czogcGFydGlhbExhYmVscyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBlbXB0eSBzdHJpbmcgbGFiZWxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlMYWJlbHMgPSBbeHlMYWJlbCgwLCAwLCAwLCAnJyksIHh5TGFiZWwoMiwgMiwgMSwgJycpLCB4eUxhYmVsKDAsIDIsIDIsICcnKV07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgICBwb2ludHM6IGVtcHR5TGFiZWxzLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGxhYmVsTm9kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eUxhYmVsKDAsIDAsIDAsICdBJyksIHh5TGFiZWwoMiwgMiwgMSwgJ0InKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbGFiZWxNb2RlRW5hYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJXaXRoTGFiZWxzKHsgbGFiZWxNb2RlRW5hYmxlZDogdHJ1ZSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggbGFiZWxNb2RlRW5hYmxlZCBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJXaXRoTGFiZWxzKHsgbGFiZWxNb2RlRW5hYmxlZDogZmFsc2UgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGxvbmcgbGFiZWxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ0xhYmVscyA9IFtcbiAgICAgICAgeHlMYWJlbCgwLCAwLCAwLCAnVmVyeSBMb25nIExhYmVsIFRleHQnKSxcbiAgICAgICAgeHlMYWJlbCgyLCAyLCAxLCAnQW5vdGhlciBMb25nIExhYmVsJyksXG4gICAgICAgIHh5TGFiZWwoMCwgMiwgMiwgJ1lldCBBbm90aGVyIExvbmcgTGFiZWwnKSxcbiAgICAgIF07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgICBwb2ludHM6IGxvbmdMYWJlbHMsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BvbHlnb24gc2hhcGVzJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHRyaWFuZ2xlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgyLCAwLCAxKSwgeHkoMSwgMiwgMildLFxuICAgICAgICBjbG9zZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHNxdWFyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMiwgMCwgMSksIHh5KDIsIDIsIDIpLCB4eSgwLCAyLCAzKV0sXG4gICAgICAgIGNsb3NlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgcGVudGFnb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoMSwgMCwgMCksIHh5KDIsIDEsIDEpLCB4eSgxLjUsIDIuNSwgMiksIHh5KDAuNSwgMi41LCAzKSwgeHkoMCwgMSwgNCldLFxuICAgICAgICBjbG9zZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGlycmVndWxhciBwb2x5Z29uJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgzLCAxLCAxKSwgeHkoMiwgNCwgMiksIHh5KC0xLCAzLCAzKV0sXG4gICAgICAgIGNsb3NlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncHJvcHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Bhc3NlcyBvbkNoYW5nZSBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbU9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIG9uQ2hhbmdlOiBjdXN0b21PbkNoYW5nZSxcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBvbkNoYW5nZVByb3BzIGNhbGxiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tT25DaGFuZ2VQcm9wcyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBvbkNoYW5nZVByb3BzOiBjdXN0b21PbkNoYW5nZVByb3BzLFxuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSldLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIG9uQ2xpY2sgY2FsbGJhY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIG9uQ2xpY2ssXG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgb25DbG9zZVBvbHlnb24gY2FsbGJhY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21PbkNsb3NlUG9seWdvbiA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBvbkNsb3NlUG9seWdvbjogY3VzdG9tT25DbG9zZVBvbHlnb24sXG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIG9uRHJhZ1N0YXJ0IGNhbGxiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25EcmFnU3RhcnQgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgb25EcmFnU3RhcnQsXG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgb25EcmFnU3RvcCBjYWxsYmFjaycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uRHJhZ1N0b3AgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgb25EcmFnU3RvcCxcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBjb29yZGluYXRlc09uSG92ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyOiB0cnVlLFxuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSldLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIGdyYXBoUHJvcHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21HcmFwaFByb3BzID0gZ3JhcGhQcm9wcygwLCAxMCwgMCwgMTApO1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIGdyYXBoUHJvcHM6IGN1c3RvbUdyYXBoUHJvcHMsXG4gICAgICAgIHBvaW50czogW3h5KDUsIDUsIDApLCB4eSg3LCA3LCAxKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgZ3NzTGluZURhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBnc3NMaW5lRGF0YSA9IHsgc2VsZWN0ZWRUb29sOiAnc29sdXRpb25TZXQnIH07XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgZ3NzTGluZURhdGEsXG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKSwgeHkoMiwgMCwgMildLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIHBvaW50cyB3aXRoIHNhbWUgY29vcmRpbmF0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoMSwgMSwgMCksIHh5KDEsIDEsIDEpLCB4eSgxLCAxLCAyKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIGNvbGxpbmVhciBwb2ludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbeHkoMCwgMCwgMCksIHh5KDEsIDEsIDEpLCB4eSgyLCAyLCAyKV0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIHZlcnkgY2xvc2UgcG9pbnRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDEsIDEsIDApLCB4eSgxLjAwMSwgMS4wMDEsIDEpLCB4eSgxLjAwMiwgMS4wMDIsIDIpXSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbWl4ZWQgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGNvb3JkaW5hdGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KC01LCA1LCAwKSwgeHkoNSwgNSwgMSksIHh5KDUsIC01LCAyKSwgeHkoLTUsIC01LCAzKV0sXG4gICAgICAgIGNsb3NlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgcG9pbnRzIHdpdGhvdXQgZXhwbGljaXQgaW5kZXgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgICAgeyB4OiAxLCB5OiAxIH0sXG4gICAgICAgICAgeyB4OiAyLCB5OiAwIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYW5kbGVzIHVuZGVmaW5lZCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogW3h5KDAsIDAsIDApLCB4eSgxLCAxLCAxKV0sXG4gICAgICAgIGRpc2FibGVkOiB1bmRlZmluZWQsXG4gICAgICAgIGNvcnJlY3RuZXNzOiB1bmRlZmluZWQsXG4gICAgICAgIGJ1aWxkaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbGw6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW50ZWdyYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgY29tcGxldGUgY2xvc2VkIHBvbHlnb24gd2l0aCBhbGwgZmVhdHVyZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgcG9pbnRzOiBwb2ludHMsXG4gICAgICAgIGNsb3NlZDogdHJ1ZSxcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgICBsYWJlbE1vZGVFbmFibGVkOiB0cnVlLFxuICAgICAgICBjb29yZGluYXRlc09uSG92ZXI6IHRydWUsXG4gICAgICAgIGNvcnJlY3RuZXNzOiAnY29ycmVjdCcsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgZmlsbDogJyMwMGZmMDAnLFxuICAgICAgICBnc3NMaW5lRGF0YTogeyBzZWxlY3RlZFRvb2w6ICdzb2x1dGlvblNldCcgfSxcbiAgICAgICAgb25DaGFuZ2U6IGplc3QuZm4oKSxcbiAgICAgICAgb25DaGFuZ2VQcm9wczogamVzdC5mbigpLFxuICAgICAgICBvbkNsb3NlUG9seWdvbjogamVzdC5mbigpLFxuICAgICAgICBvbkNsaWNrOiBqZXN0LmZuKCksXG4gICAgICAgIG9uRHJhZ1N0YXJ0OiBqZXN0LmZuKCksXG4gICAgICAgIG9uRHJhZ1N0b3A6IGplc3QuZm4oKSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgYnVpbGRpbmcgcG9seWdvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IFt4eSgwLCAwLCAwKSwgeHkoMSwgMSwgMSldLFxuICAgICAgICBidWlsZGluZzogdHJ1ZSxcbiAgICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgZGlzYWJsZWQgcG9seWdvbiB3aXRoIGxhYmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoe1xuICAgICAgICBwb2ludHM6IHBvaW50cyxcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgY2xvc2VkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBwb2x5Z29uIGluIHNvbHV0aW9uIHNldCBtb2RlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgICBjbG9zZWQ6IHRydWUsXG4gICAgICAgIGdzc0xpbmVEYXRhOiB7IHNlbGVjdGVkVG9vbDogJ3NvbHV0aW9uU2V0JyB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBwb2x5Z29uIHdpdGggaW5jb3JyZWN0IGNvcnJlY3RuZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgICBjbG9zZWQ6IHRydWUsXG4gICAgICAgIGNvcnJlY3RuZXNzOiAnaW5jb3JyZWN0JyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQWtFLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFF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QWYsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RlcsTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQ08sT0FBTyxDQUFDLENBQUMsSUFBQWhCLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDakUsQ0FBQyxDQUFDO0VBRUZPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxZQUFNO0lBQzlCLElBQU1FLE1BQU0sR0FBRyxJQUFBTSxlQUFJLEVBQUMsQ0FBQyxJQUFBZixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFVyxNQUFNLENBQUNGLE1BQU0sQ0FBQyxDQUFDTyxPQUFPLENBQUMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLEVB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
|