UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

282 lines (281 loc) 42.3 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var _react = _interopRequireWildcard(require("react")); var _sinon = _interopRequireDefault(require("sinon")); var _enzyme = require("enzyme"); var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer")); var _ = _interopRequireDefault(require("..")); var _icon = _interopRequireDefault(require("../../icon")); var _excluded = ["countHanzi"], _excluded2 = ["countHanzi"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var stub = _sinon["default"].stub(console, "error"); var InputMounter = function (_Component) { function InputMounter() { var _this; _classCallCheck(this, InputMounter); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, InputMounter, [].concat(args)); _this.state = { value: "中文abc", leftElement: _react["default"].createElement(_icon["default"], { icon: "add" }) }; return _this; } _inherits(InputMounter, _Component); return _createClass(InputMounter, [{ key: "render", value: function render() { var _this2 = this; var _this$props = this.props, countHanzi = _this$props.countHanzi, others = _objectWithoutProperties(_this$props, _excluded); var _this$state = this.state, leftElement = _this$state.leftElement, value = _this$state.value; return _react["default"].createElement(_["default"], _extends({ countHanzi: countHanzi, leftElement: leftElement, limit: 10, value: value, onChange: function onChange(_ref) { var val = _ref.target.value; return _this2.setState({ value: val }); } }, others)); } }]); }(_react.Component); var TextareaMounter = function (_Component2) { function TextareaMounter() { var _this3; _classCallCheck(this, TextareaMounter); for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } _this3 = _callSuper(this, TextareaMounter, [].concat(args)); _this3.state = { value: "中文abc" }; return _this3; } _inherits(TextareaMounter, _Component2); return _createClass(TextareaMounter, [{ key: "render", value: function render() { var _this4 = this; var _this$props2 = this.props, countHanzi = _this$props2.countHanzi, others = _objectWithoutProperties(_this$props2, _excluded2); var value = this.state.value; return _react["default"].createElement(_["default"].Textarea, _extends({ countHanzi: countHanzi, limit: 10, value: value, onChange: function onChange(_ref2) { var val = _ref2.target.value; return _this4.setState({ value: val }); } }, others)); } }]); }(_react.Component); describe("Input", function () { beforeAll(function () { Object.defineProperty(Element.prototype, "clientWidth", { writable: true, configurable: true, value: 200 }); }); it("快照验证", function () { var wrapper = _reactTestRenderer["default"].create(_react["default"].createElement(_["default"], null)); expect(wrapper).toMatchSnapshot(); }); it("是否正确渲染文本框", function () { var wrapper = _reactTestRenderer["default"].create(_react["default"].createElement(_["default"].Textarea, null)); expect(wrapper).toMatchSnapshot(); }); it("是否能验证 contentJustify", function () { (0, _enzyme.render)(_react["default"].createElement(_["default"], { contentJustify: true })); (0, _enzyme.render)(_react["default"].createElement(_["default"], { contentJustify: true, value: "111\u4E2D\u6587" })); expect(stub.calledOnce).toEqual(true); stub.restore(); }); it("是否能验证 limit", function () { (0, _enzyme.render)(_react["default"].createElement(_["default"], { limit: 10, rightElement: _react["default"].createElement("div", null, "string") })); expect(stub.calledOnce).toEqual(true); stub.restore(); }); it("是否支持 limit 功能", function () { var wrapper0 = (0, _enzyme.mount)(_react["default"].createElement(InputMounter, { countHanzi: true })); var wrapper1 = (0, _enzyme.mount)(_react["default"].createElement(InputMounter, { countHanzi: false })); wrapper0.find("input").simulate("change", { target: { value: "111中文" } }); wrapper1.find("input").simulate("change", { target: { value: "111中文" } }); expect(wrapper0.find(".adui-input-limit").text()).toEqual("4/10"); expect(wrapper1.find(".adui-input-limit").text()).toEqual("5/10"); }); it("是否显示正确的 leftElement rightElement", function () { var wrapper = (0, _enzyme.mount)(_react["default"].createElement(_["default"], { leftElement: _react["default"].createElement(_icon["default"], { icon: "search" }), rightElement: _react["default"].createElement(_icon["default"], { icon: "search" }) })); var left = wrapper.find(".adui-input-left"); var right = wrapper.find(".adui-input-right"); left.simulate("click"); right.simulate("click"); }); it("是否能正确处理 leftElement 宽度", function () { var wrapper = (0, _enzyme.mount)(_react["default"].createElement(InputMounter, null)); wrapper.setState({ leftElement: null }); wrapper.setProps({ rightElement: _react["default"].createElement(_icon["default"], { icon: "add" }) }); wrapper.setProps({ rightElement: null }); }); it("事件验证", function () { var onPressEnter = jest.fn(); var onKeyDown = jest.fn(); var onBlur = jest.fn(); var onFocus = jest.fn(); var wrapper = (0, _enzyme.mount)(_react["default"].createElement(_["default"], { onPressEnter: onPressEnter, onKeyDown: onKeyDown, onBlur: onBlur, onFocus: onFocus })); wrapper.find("input").simulate("keydown", { key: "enter", keyCode: 13 }); wrapper.find("input").simulate("focus"); wrapper.find("input").simulate("blur"); expect(onPressEnter).toHaveBeenCalledTimes(1); expect(onKeyDown).toHaveBeenCalledTimes(1); expect(onBlur).toHaveBeenCalledTimes(1); expect(onFocus).toHaveBeenCalledTimes(1); }); it("验证 Cleave.js", function () { var wrapper = (0, _enzyme.mount)(_react["default"].createElement(InputMounter, { cleaveOptions: { uppercase: true } })); wrapper.setState({ value: "abc" }); wrapper.update(); expect(wrapper.find("input").get(0).props.value).toBe("ABC"); }); it("Textarea: 快照验证", function () { var wrapper = _reactTestRenderer["default"].create(_react["default"].createElement(_["default"].Textarea, null)); expect(wrapper).toMatchSnapshot(); }); it("Textarea: 是否能正确验证 limit", function () { (0, _enzyme.render)(_react["default"].createElement(_["default"].Textarea, { limit: 10, resize: "both" })); expect(stub.calledOnce).toEqual(true); }); it("Textarea: 是否支持 limit 功能", function () { var wrapper0 = (0, _enzyme.mount)(_react["default"].createElement(TextareaMounter, { countHanzi: true })); var wrapper1 = (0, _enzyme.mount)(_react["default"].createElement(TextareaMounter, { countHanzi: false })); wrapper0.find("textarea").simulate("change", { target: { value: "111中文" } }); wrapper1.find("textarea").simulate("change", { target: { value: "111中文" } }); expect(wrapper0.find(".adui-input-limit").text()).toEqual("4/10"); expect(wrapper1.find(".adui-input-limit").text()).toEqual("5/10"); }); it("Textarea: 事件验证", function () { var onPressEnter = jest.fn(); var onKeyDown = jest.fn(); var onBlur = jest.fn(); var onFocus = jest.fn(); var wrapper = (0, _enzyme.mount)(_react["default"].createElement(_["default"].Textarea, { onPressEnter: onPressEnter, onKeyDown: onKeyDown, onBlur: onBlur, onFocus: onFocus })); wrapper.find("textarea").simulate("keydown", { key: "enter", keyCode: 13 }); wrapper.find("textarea").simulate("focus"); expect(wrapper.find(".adui-input-wrapper").at(0).props().className.includes("adui-input-focused")).toBe(true); wrapper.find("textarea").simulate("blur"); expect(wrapper.find(".adui-input-wrapper").at(0).props().className.includes("adui-input-focused")).toBe(false); expect(onPressEnter).toHaveBeenCalledTimes(1); expect(onKeyDown).toHaveBeenCalledTimes(1); expect(onBlur).toHaveBeenCalledTimes(1); expect(onFocus).toHaveBeenCalledTimes(1); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc2lub24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2VuenltZSIsIl9yZWFjdFRlc3RSZW5kZXJlciIsIl8iLCJfaWNvbiIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIm8iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiX2NsYXNzQ2FsbENoZWNrIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsInByb3RvdHlwZSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsIl9pbmhlcml0cyIsImNyZWF0ZSIsInZhbHVlIiwiX3NldFByb3RvdHlwZU9mIiwic3R1YiIsInNpbm9uIiwiY29uc29sZSIsIklucHV0TW91bnRlciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0Iiwic3RhdGUiLCJsZWZ0RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpY29uIiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImNvdW50SGFuemkiLCJvdGhlcnMiLCJfdGhpcyRzdGF0ZSIsImxpbWl0Iiwib25DaGFuZ2UiLCJfcmVmIiwidmFsIiwidGFyZ2V0Iiwic2V0U3RhdGUiLCJDb21wb25lbnQiLCJUZXh0YXJlYU1vdW50ZXIiLCJfQ29tcG9uZW50MiIsIl90aGlzMyIsIl9sZW4yIiwiX2tleTIiLCJfdGhpczQiLCJfdGhpcyRwcm9wczIiLCJUZXh0YXJlYSIsIl9yZWYyIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJFbGVtZW50IiwiaXQiLCJ3cmFwcGVyIiwiVGVzdFJlbmRlcmVyIiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwiY29udGVudEp1c3RpZnkiLCJjYWxsZWRPbmNlIiwidG9FcXVhbCIsInJlc3RvcmUiLCJyaWdodEVsZW1lbnQiLCJ3cmFwcGVyMCIsIm1vdW50Iiwid3JhcHBlcjEiLCJmaW5kIiwic2ltdWxhdGUiLCJ0ZXh0IiwibGVmdCIsInJpZ2h0Iiwic2V0UHJvcHMiLCJvblByZXNzRW50ZXIiLCJqZXN0IiwiZm4iLCJvbktleURvd24iLCJvbkJsdXIiLCJvbkZvY3VzIiwia2V5Q29kZSIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsImNsZWF2ZU9wdGlvbnMiLCJ1cHBlcmNhc2UiLCJ1cGRhdGUiLCJ0b0JlIiwicmVzaXplIiwiYXQiLCJjbGFzc05hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL2lucHV0L19fdGVzdHNfXy9pbmRleC50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHNpbm9uIGZyb20gXCJzaW5vblwiXG5pbXBvcnQgeyBtb3VudCwgcmVuZGVyIH0gZnJvbSBcImVuenltZVwiXG5pbXBvcnQgVGVzdFJlbmRlcmVyIGZyb20gXCJyZWFjdC10ZXN0LXJlbmRlcmVyXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi5cIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uLy4uL2ljb25cIlxuXG5jb25zdCBzdHViID0gc2lub24uc3R1Yihjb25zb2xlLCBcImVycm9yXCIpXG5cbmNsYXNzIElucHV0TW91bnRlciBleHRlbmRzIENvbXBvbmVudDxhbnksIGFueT4ge1xuICBzdGF0ZSA9IHtcbiAgICB2YWx1ZTogXCLkuK3mlodhYmNcIixcbiAgICBsZWZ0RWxlbWVudDogPEljb24gaWNvbj1cImFkZFwiIC8+LFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY291bnRIYW56aSwgLi4ub3RoZXJzIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgeyBsZWZ0RWxlbWVudCwgdmFsdWUgfSA9IHRoaXMuc3RhdGVcbiAgICByZXR1cm4gKFxuICAgICAgPElucHV0XG4gICAgICAgIGNvdW50SGFuemk9e2NvdW50SGFueml9XG4gICAgICAgIGxlZnRFbGVtZW50PXtsZWZ0RWxlbWVudH1cbiAgICAgICAgbGltaXQ9ezEwfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXsoeyB0YXJnZXQ6IHsgdmFsdWU6IHZhbCB9IH0pID0+IHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdmFsIH0pfVxuICAgICAgICB7Li4ub3RoZXJzfVxuICAgICAgLz5cbiAgICApXG4gIH1cbn1cblxuY2xhc3MgVGV4dGFyZWFNb3VudGVyIGV4dGVuZHMgQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHN0YXRlID0ge1xuICAgIHZhbHVlOiBcIuS4reaWh2FiY1wiLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY291bnRIYW56aSwgLi4ub3RoZXJzIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5zdGF0ZVxuICAgIHJldHVybiAoXG4gICAgICA8SW5wdXQuVGV4dGFyZWFcbiAgICAgICAgY291bnRIYW56aT17Y291bnRIYW56aX1cbiAgICAgICAgbGltaXQ9ezEwfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXsoeyB0YXJnZXQ6IHsgdmFsdWU6IHZhbCB9IH0pID0+IHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdmFsIH0pfVxuICAgICAgICB7Li4ub3RoZXJzfVxuICAgICAgLz5cbiAgICApXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJJbnB1dFwiLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCBcImNsaWVudFdpZHRoXCIsIHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IDIwMCxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwi5b+r54Wn6aqM6K+BXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZSg8SW5wdXQgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG4gIGl0KFwi5piv5ZCm5q2j56Gu5riy5p+T5paH5pys5qGGXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZSg8SW5wdXQuVGV4dGFyZWEgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG4gIGl0KFwi5piv5ZCm6IO96aqM6K+BIGNvbnRlbnRKdXN0aWZ5XCIsICgpID0+IHtcbiAgICByZW5kZXIoPElucHV0IGNvbnRlbnRKdXN0aWZ5IC8+KVxuICAgIHJlbmRlcig8SW5wdXQgY29udGVudEp1c3RpZnkgdmFsdWU9XCIxMTHkuK3mlodcIiAvPilcbiAgICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0VxdWFsKHRydWUpXG4gICAgc3R1Yi5yZXN0b3JlKClcbiAgfSlcbiAgaXQoXCLmmK/lkKbog73pqozor4EgbGltaXRcIiwgKCkgPT4ge1xuICAgIHJlbmRlcig8SW5wdXQgbGltaXQ9ezEwfSByaWdodEVsZW1lbnQ9ezxkaXY+c3RyaW5nPC9kaXY+fSAvPilcbiAgICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0VxdWFsKHRydWUpXG4gICAgc3R1Yi5yZXN0b3JlKClcbiAgfSlcbiAgaXQoXCLmmK/lkKbmlK/mjIEgbGltaXQg5Yqf6IO9XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyMCA9IG1vdW50KDxJbnB1dE1vdW50ZXIgY291bnRIYW56aSAvPilcbiAgICBjb25zdCB3cmFwcGVyMSA9IG1vdW50KDxJbnB1dE1vdW50ZXIgY291bnRIYW56aT17ZmFsc2V9IC8+KVxuICAgIHdyYXBwZXIwLmZpbmQoXCJpbnB1dFwiKS5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIxMTHkuK3mlodcIiB9IH0pXG4gICAgd3JhcHBlcjEuZmluZChcImlucHV0XCIpLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjExMeS4reaWh1wiIH0gfSlcbiAgICBleHBlY3Qod3JhcHBlcjAuZmluZChcIi5hZHVpLWlucHV0LWxpbWl0XCIpLnRleHQoKSkudG9FcXVhbChcIjQvMTBcIilcbiAgICBleHBlY3Qod3JhcHBlcjEuZmluZChcIi5hZHVpLWlucHV0LWxpbWl0XCIpLnRleHQoKSkudG9FcXVhbChcIjUvMTBcIilcbiAgfSlcbiAgaXQoXCLmmK/lkKbmmL7npLrmraPnoa7nmoQgbGVmdEVsZW1lbnQgcmlnaHRFbGVtZW50XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8SW5wdXRcbiAgICAgICAgbGVmdEVsZW1lbnQ9ezxJY29uIGljb249XCJzZWFyY2hcIiAvPn1cbiAgICAgICAgcmlnaHRFbGVtZW50PXs8SWNvbiBpY29uPVwic2VhcmNoXCIgLz59XG4gICAgICAvPlxuICAgIClcbiAgICBjb25zdCBsZWZ0ID0gd3JhcHBlci5maW5kKFwiLmFkdWktaW5wdXQtbGVmdFwiKVxuICAgIGNvbnN0IHJpZ2h0ID0gd3JhcHBlci5maW5kKFwiLmFkdWktaW5wdXQtcmlnaHRcIilcbiAgICBsZWZ0LnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICByaWdodC5zaW11bGF0ZShcImNsaWNrXCIpXG4gIH0pXG4gIGl0KFwi5piv5ZCm6IO95q2j56Gu5aSE55CGIGxlZnRFbGVtZW50IOWuveW6plwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KDxJbnB1dE1vdW50ZXIgLz4pXG4gICAgd3JhcHBlci5zZXRTdGF0ZSh7IGxlZnRFbGVtZW50OiBudWxsIH0pXG4gICAgd3JhcHBlci5zZXRQcm9wcyh7IHJpZ2h0RWxlbWVudDogPEljb24gaWNvbj1cImFkZFwiIC8+IH0pXG4gICAgd3JhcHBlci5zZXRQcm9wcyh7IHJpZ2h0RWxlbWVudDogbnVsbCB9KVxuICB9KVxuICBpdChcIuS6i+S7tumqjOivgVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25QcmVzc0VudGVyID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25LZXlEb3duID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25CbHVyID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25Gb2N1cyA9IGplc3QuZm4oKVxuXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPElucHV0XG4gICAgICAgIG9uUHJlc3NFbnRlcj17b25QcmVzc0VudGVyfVxuICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAvPlxuICAgIClcbiAgICB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5zaW11bGF0ZShcImtleWRvd25cIiwgeyBrZXk6IFwiZW50ZXJcIiwga2V5Q29kZTogMTMgfSlcbiAgICB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgd3JhcHBlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJibHVyXCIpXG4gICAgZXhwZWN0KG9uUHJlc3NFbnRlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpXG4gICAgZXhwZWN0KG9uS2V5RG93bikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpXG4gICAgZXhwZWN0KG9uQmx1cikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpXG4gICAgZXhwZWN0KG9uRm9jdXMpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKVxuICB9KVxuICBpdChcIumqjOivgSBDbGVhdmUuanNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudCg8SW5wdXRNb3VudGVyIGNsZWF2ZU9wdGlvbnM9e3sgdXBwZXJjYXNlOiB0cnVlIH19IC8+KVxuICAgIHdyYXBwZXIuc2V0U3RhdGUoeyB2YWx1ZTogXCJhYmNcIiB9KVxuICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiaW5wdXRcIikuZ2V0KDApLnByb3BzLnZhbHVlKS50b0JlKFwiQUJDXCIpXG4gIH0pXG5cbiAgaXQoXCJUZXh0YXJlYTog5b+r54Wn6aqM6K+BXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZSg8SW5wdXQuVGV4dGFyZWEgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG4gIGl0KFwiVGV4dGFyZWE6IOaYr+WQpuiDveato+ehrumqjOivgSBsaW1pdFwiLCAoKSA9PiB7XG4gICAgcmVuZGVyKDxJbnB1dC5UZXh0YXJlYSBsaW1pdD17MTB9IHJlc2l6ZT1cImJvdGhcIiAvPilcbiAgICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0VxdWFsKHRydWUpXG4gIH0pXG4gIGl0KFwiVGV4dGFyZWE6IOaYr+WQpuaUr+aMgSBsaW1pdCDlip/og71cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIwID0gbW91bnQoPFRleHRhcmVhTW91bnRlciBjb3VudEhhbnppIC8+KVxuICAgIGNvbnN0IHdyYXBwZXIxID0gbW91bnQoPFRleHRhcmVhTW91bnRlciBjb3VudEhhbnppPXtmYWxzZX0gLz4pXG4gICAgd3JhcHBlcjBcbiAgICAgIC5maW5kKFwidGV4dGFyZWFcIilcbiAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIxMTHkuK3mlodcIiB9IH0pXG4gICAgd3JhcHBlcjFcbiAgICAgIC5maW5kKFwidGV4dGFyZWFcIilcbiAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIxMTHkuK3mlodcIiB9IH0pXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCIuYWR1aS1pbnB1dC1saW1pdFwiKS50ZXh0KCkpLnRvRXF1YWwoXCI0LzEwXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIxLmZpbmQoXCIuYWR1aS1pbnB1dC1saW1pdFwiKS50ZXh0KCkpLnRvRXF1YWwoXCI1LzEwXCIpXG4gIH0pXG4gIGl0KFwiVGV4dGFyZWE6IOS6i+S7tumqjOivgVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25QcmVzc0VudGVyID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25LZXlEb3duID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25CbHVyID0gamVzdC5mbigpXG4gICAgY29uc3Qgb25Gb2N1cyA9IGplc3QuZm4oKVxuXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPElucHV0LlRleHRhcmVhXG4gICAgICAgIG9uUHJlc3NFbnRlcj17b25QcmVzc0VudGVyfVxuICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAvPlxuICAgIClcbiAgICB3cmFwcGVyLmZpbmQoXCJ0ZXh0YXJlYVwiKS5zaW11bGF0ZShcImtleWRvd25cIiwgeyBrZXk6IFwiZW50ZXJcIiwga2V5Q29kZTogMTMgfSlcbiAgICB3cmFwcGVyLmZpbmQoXCJ0ZXh0YXJlYVwiKS5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgZXhwZWN0KFxuICAgICAgd3JhcHBlclxuICAgICAgICAuZmluZChcIi5hZHVpLWlucHV0LXdyYXBwZXJcIilcbiAgICAgICAgLmF0KDApXG4gICAgICAgIC5wcm9wcygpXG4gICAgICAgIC5jbGFzc05hbWUuaW5jbHVkZXMoXCJhZHVpLWlucHV0LWZvY3VzZWRcIilcbiAgICApLnRvQmUodHJ1ZSlcbiAgICB3cmFwcGVyLmZpbmQoXCJ0ZXh0YXJlYVwiKS5zaW11bGF0ZShcImJsdXJcIilcbiAgICBleHBlY3QoXG4gICAgICB3cmFwcGVyXG4gICAgICAgIC5maW5kKFwiLmFkdWktaW5wdXQtd3JhcHBlclwiKVxuICAgICAgICAuYXQoMClcbiAgICAgICAgLnByb3BzKClcbiAgICAgICAgLmNsYXNzTmFtZS5pbmNsdWRlcyhcImFkdWktaW5wdXQtZm9jdXNlZFwiKVxuICAgICkudG9CZShmYWxzZSlcbiAgICBleHBlY3Qob25QcmVzc0VudGVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSlcbiAgICBleHBlY3Qob25LZXlEb3duKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSlcbiAgICBleHBlY3Qob25CbHVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSlcbiAgICBleHBlY3Qob25Gb2N1cykudG9IYXZlQmVl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