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>
193 lines (171 loc) • 24.2 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
import React, { Component } from "react";
import { mount } from "enzyme";
import { act } from "react-dom/test-utils";
import keyCode from "rc-util/lib/KeyCode";
import ColorPicker from "..";
var ColorPickerMounter = function (_Component) {
_inherits(ColorPickerMounter, _Component);
var _super = _createSuper(ColorPickerMounter);
function ColorPickerMounter() {
var _this;
_classCallCheck(this, ColorPickerMounter);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
_this.state = {
value: "#07C160"
};
return _this;
}
_createClass(ColorPickerMounter, [{
key: "render",
value: function render() {
var _this2 = this;
var value = this.state.value;
return React.createElement(ColorPicker, _extends({
value: value,
onChange: function onChange(val) {
return _this2.setState({
value: val
});
}
}, this.props));
}
}]);
return ColorPickerMounter;
}(Component);
describe("ColorPicker", function () {
beforeAll(function () {
jest.useFakeTimers();
Element.prototype.getBoundingClientRect = jest.fn(function () {
return {
width: 160,
height: 90,
top: 0,
left: 0,
bottom: 0,
right: 0,
x: 0,
y: 0,
toJSON: function toJSON() {}
};
});
});
afterAll(function () {
jest.useRealTimers();
});
it("其他事件验证", function () {
var onFinishChange = jest.fn();
var wrapper = mount(React.createElement(ColorPicker, {
defaultValue: "#07C160",
onFinishChange: onFinishChange,
recentColors: ["#00BB9C"]
}));
var input = wrapper.find("input").at(0);
input.simulate("change", {
target: {
value: "11"
}
});
expect(wrapper.find("input").at(0).props().value).toBe("11");
input.simulate("blur");
expect(wrapper.find("input").at(0).props().value).toBe("07C160");
input.simulate("change", {
target: {
value: "00BB9C"
}
});
input.simulate("blur");
expect(onFinishChange).toHaveBeenCalledWith("#00BB9C");
wrapper.find("button").simulate("click");
wrapper.find(".adui-cp-recent i").at(0).simulate("click");
wrapper.find(".adui-cp-standard i").at(11).simulate("click");
wrapper.find("button").simulate("click");
jest.advanceTimersByTime(200);
expect(onFinishChange).toHaveBeenCalledWith("#5BDEC8");
wrapper.find("button").simulate("click");
jest.advanceTimersByTime(350);
var head0 = wrapper.find(".adui-cp-collapse-header").at(0);
var head1 = wrapper.find(".adui-cp-collapse-header").at(1);
var head2 = wrapper.find(".adui-cp-collapse-header").at(2);
expect(wrapper.find(".adui-cp-collapse-content")).toHaveLength(2);
head0.simulate("click");
head2.simulate("click");
head1.simulate("click");
head2.simulate("click");
wrapper.find("Slider").at(0).simulate("focus");
wrapper.find("Slider").at(0).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: keyCode.RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#5BDECA");
wrapper.find("Slider").at(1).simulate("focus");
wrapper.find("Slider").at(1).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: keyCode.RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#59DECA");
wrapper.find("Slider").at(2).simulate("focus");
wrapper.find("Slider").at(2).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: keyCode.RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#5AE0CC");
var map = {};
window.addEventListener = jest.fn(function (event, cb) {
map[event] = cb;
});
var classWrapper = mount(React.createElement(ColorPickerMounter, null));
classWrapper.find("button").simulate("click");
jest.advanceTimersByTime(10);
act(function () {
classWrapper.find(".adui-cp-collapse-header").at(1).simulate("click");
jest.runAllTimers();
classWrapper.update();
});
act(function () {
classWrapper.find(".adui-cp-palette").at(0).simulate("mouseDown");
map.mousemove({});
map.mousemove({
pageX: 10000,
pageY: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-s"]).toBe(100);
map.mousemove({
pageX: -10000,
pageY: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-s"]).toBe(0);
map.mousemove({
pageY: 10000,
pageX: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-b"]).toBe(0);
map.mousemove({
pageY: -10000,
pageX: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-b"]).toBe(100);
map.mouseup({});
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsIm1vdW50IiwiYWN0Iiwia2V5Q29kZSIsIkNvbG9yUGlja2VyIiwiQ29sb3JQaWNrZXJNb3VudGVyIiwic3RhdGUiLCJ2YWx1ZSIsInZhbCIsInNldFN0YXRlIiwicHJvcHMiLCJkZXNjcmliZSIsImJlZm9yZUFsbCIsImplc3QiLCJ1c2VGYWtlVGltZXJzIiwiRWxlbWVudCIsInByb3RvdHlwZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImZuIiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJ4IiwieSIsInRvSlNPTiIsImFmdGVyQWxsIiwidXNlUmVhbFRpbWVycyIsIml0Iiwib25GaW5pc2hDaGFuZ2UiLCJ3cmFwcGVyIiwiaW5wdXQiLCJmaW5kIiwiYXQiLCJzaW11bGF0ZSIsInRhcmdldCIsImV4cGVjdCIsInRvQmUiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImFkdmFuY2VUaW1lcnNCeVRpbWUiLCJoZWFkMCIsImhlYWQxIiwiaGVhZDIiLCJ0b0hhdmVMZW5ndGgiLCJSSUdIVCIsIm1hcCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsImNiIiwiY2xhc3NXcmFwcGVyIiwicnVuQWxsVGltZXJzIiwidXBkYXRlIiwibW91c2Vtb3ZlIiwicGFnZVgiLCJwYWdlWSIsIm1vdXNldXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yLXBpY2tlci9fX3Rlc3RzX18vZXZlbnRzLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IG1vdW50IH0gZnJvbSBcImVuenltZVwiXG5pbXBvcnQgeyBhY3QgfSBmcm9tIFwicmVhY3QtZG9tL3Rlc3QtdXRpbHNcIlxuaW1wb3J0IGtleUNvZGUgZnJvbSBcInJjLXV0aWwvbGliL0tleUNvZGVcIlxuaW1wb3J0IENvbG9yUGlja2VyIGZyb20gXCIuLlwiXG5cbmNsYXNzIENvbG9yUGlja2VyTW91bnRlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRlID0ge1xuICAgIHZhbHVlOiBcIiMwN0MxNjBcIixcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb2xvclBpY2tlclxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXsodmFsKSA9PiB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHZhbCB9KX1cbiAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxufVxuXG5kZXNjcmliZShcIkNvbG9yUGlja2VyXCIsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZUZha2VUaW1lcnMoKVxuXG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQwMDA2NjYzXG4gICAgICog6YCa6L+HIG1vY2sgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGDvvIzkuYvlkI7ov5DooYznmoTmiYDmnIkgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAg6YO95Lya6L+U5Zue6L+Z5ZCM5LiA5Liq5YC844CCXG4gICAgICovXG4gICAgRWxlbWVudC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gamVzdC5mbigoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMTYwLFxuICAgICAgICBoZWlnaHQ6IDkwLFxuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHRvSlNPTjogKCkgPT4ge30sXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgamVzdC51c2VSZWFsVGltZXJzKClcbiAgfSlcblxuICBpdChcIuWFtuS7luS6i+S7tumqjOivgVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25GaW5pc2hDaGFuZ2UgPSBqZXN0LmZuKClcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8Q29sb3JQaWNrZXJcbiAgICAgICAgZGVmYXVsdFZhbHVlPVwiIzA3QzE2MFwiXG4gICAgICAgIG9uRmluaXNoQ2hhbmdlPXtvbkZpbmlzaENoYW5nZX1cbiAgICAgICAgcmVjZW50Q29sb3JzPXtbXCIjMDBCQjlDXCJdfVxuICAgICAgLz5cbiAgICApXG4gICAgY29uc3QgaW5wdXQgPSB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKVxuXG4gICAgLy8g6aqM6K+BIGlucHV0IOS/ruaUueS4uumdnuazleWAvOWQju+8jOWcqCBibHVyIOaXtuS8mumHjee9rlxuICAgIGlucHV0LnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjExXCIgfSB9KVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKS5wcm9wcygpLnZhbHVlKS50b0JlKFwiMTFcIilcbiAgICBpbnB1dC5zaW11bGF0ZShcImJsdXJcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiaW5wdXRcIikuYXQoMCkucHJvcHMoKS52YWx1ZSkudG9CZShcIjA3QzE2MFwiKVxuXG4gICAgaW5wdXQuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMDBCQjlDXCIgfSB9KVxuICAgIGlucHV0LnNpbXVsYXRlKFwiYmx1clwiKVxuICAgIGV4cGVjdChvbkZpbmlzaENoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCIjMDBCQjlDXCIpXG5cbiAgICB3cmFwcGVyLmZpbmQoXCJidXR0b25cIikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWNwLXJlY2VudCBpXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jcC1zdGFuZGFyZCBpXCIpLmF0KDExKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgd3JhcHBlci5maW5kKFwiYnV0dG9uXCIpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAvLyDnrYnlvoUgMjAwbXNcbiAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMjAwKVxuICAgIGV4cGVjdChvbkZpbmlzaENoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCIjNUJERUM4XCIpXG5cbiAgICAvLyDmtYvor5UgQ29sbGFwc2VcbiAgICB3cmFwcGVyLmZpbmQoXCJidXR0b25cIikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIC8vIOetieW+hSAzNTBtc1xuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgzNTApXG4gICAgY29uc3QgaGVhZDAgPSB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jcC1jb2xsYXBzZS1oZWFkZXJcIikuYXQoMClcbiAgICBjb25zdCBoZWFkMSA9IHdyYXBwZXIuZmluZChcIi5hZHVpLWNwLWNvbGxhcHNlLWhlYWRlclwiKS5hdCgxKVxuICAgIGNvbnN0IGhlYWQyID0gd3JhcHBlci5maW5kKFwiLmFkdWktY3AtY29sbGFwc2UtaGVhZGVyXCIpLmF0KDIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIi5hZHVpLWNwLWNvbGxhcHNlLWNvbnRlbnRcIikpLnRvSGF2ZUxlbmd0aCgyKVxuICAgIGhlYWQwLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBoZWFkMi5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgaGVhZDEuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGhlYWQyLnNpbXVsYXRlKFwiY2xpY2tcIilcblxuICAgIHdyYXBwZXIuZmluZChcIlNsaWRlclwiKS5hdCgwKS5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgd3JhcHBlclxuICAgICAgLmZpbmQoXCJTbGlkZXJcIilcbiAgICAgIC5hdCgwKVxuICAgICAgLmZpbmQoXCIuYWR1aS1zbGlkZXItaGFuZGxlXCIpXG4gICAgICAuYXQoMClcbiAgICAgIC5zaW11bGF0ZShcImtleURvd25cIiwgeyBrZXlDb2RlOiBrZXlDb2RlLlJJR0hUIH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLXZhbHVlXCJdKS50b0JlKFwiIzVCREVDQVwiKVxuICAgIHdyYXBwZXIuZmluZChcIlNsaWRlclwiKS5hdCgxKS5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgd3JhcHBlclxuICAgICAgLmZpbmQoXCJTbGlkZXJcIilcbiAgICAgIC5hdCgxKVxuICAgICAgLmZpbmQoXCIuYWR1aS1zbGlkZXItaGFuZGxlXCIpXG4gICAgICAuYXQoMClcbiAgICAgIC5zaW11bGF0ZShcImtleURvd25cIiwgeyBrZXlDb2RlOiBrZXlDb2RlLlJJR0hUIH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLXZhbHVlXCJdKS50b0JlKFwiIzU5REVDQVwiKVxuICAgIHdyYXBwZXIuZmluZChcIlNsaWRlclwiKS5hdCgyKS5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgd3JhcHBlclxuICAgICAgLmZpbmQoXCJTbGlkZXJcIilcbiAgICAgIC5hdCgyKVxuICAgICAgLmZpbmQoXCIuYWR1aS1zbGlkZXItaGFuZGxlXCIpXG4gICAgICAuYXQoMClcbiAgICAgIC5zaW11bGF0ZShcImtleURvd25cIiwgeyBrZXlDb2RlOiBrZXlDb2RlLlJJR0hUIH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLXZhbHVlXCJdKS50b0JlKFwiIzVBRTBDQ1wiKVxuXG4gICAgY29uc3QgbWFwID0ge31cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPSBqZXN0LmZuKChldmVudCwgY2IpID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcFtldmVudF0gPSBjYlxuICAgIH0pXG5cbiAgICBjb25zdCBjbGFzc1dyYXBwZXIgPSBtb3VudCg8Q29sb3JQaWNrZXJNb3VudGVyIC8+KVxuXG4gICAgY2xhc3NXcmFwcGVyLmZpbmQoXCJidXR0b25cIikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgxMClcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICBjbGFzc1dyYXBwZXIuZmluZChcIi5hZHVpLWNwLWNvbGxhcHNlLWhlYWRlclwiKS5hdCgxKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICBjbGFzc1dyYXBwZXIudXBkYXRlKClcbiAgICB9KVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIGNsYXNzV3JhcHBlci5maW5kKFwiLmFkdWktY3AtcGFsZXR0ZVwiKS5hdCgwKS5zaW11bGF0ZShcIm1vdXNlRG93blwiKVxuXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBtYXAubW91c2Vtb3ZlKHt9KVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbWFwLm1vdXNlbW92ZSh7IHBhZ2VYOiAxMDAwMCwgcGFnZVk6IDAgfSlcblxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgY2xhc3NXcmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3QoY2xhc3NXcmFwcGVyLmZpbmQoXCIuYWR1aS1jcFwiKS5hdCgwKS5wcm9wcygpW1wiZGF0YS1zXCJdKS50b0JlKDEwMClcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcC5tb3VzZW1vdmUoeyBwYWdlWDogLTEwMDAwLCBwYWdlWTogMCB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgY2xhc3NXcmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3QoY2xhc3NXcmFwcGVyLmZpbmQoXCIuYWR1aS1jcFwiKS5hdCgwKS5wcm9wcygpW1wiZGF0YS1zXCJdKS50b0JlKDApXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBtYXAubW91c2Vtb3ZlKHsgcGFnZVk6IDEwMDAwLCBwYWdlWDogMCB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgY2xhc3NXcmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3QoY2xhc3NXcmFwcGVyLmZpbmQoXCIuYWR1aS1jcFwiKS5hdCgwKS5wcm9wcygpW1wiZGF0YS1iXCJdKS50b0JlKDApXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBtYXAubW91c2Vtb3ZlKHsgcGFnZVk6IC0xMDAwMCwgcGFnZVg6IDAgfSlcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIGNsYXNzV3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KGNsYXNzV3JhcHBlci5maW5kKFwiLmFkdWktY3BcIikuYXQoMCkucHJvcHMoKVtcImRhdGEtYlwiXSkudG9CZSgxMDApXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBtYXAubW91c2V1cCh7fSlcbiAgICB9KVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBT0EsS0FBUCxJQUFnQkMsU0FBaEIsUUFBaUMsT0FBakM7QUFDQSxTQUFTQyxLQUFULFFBQXNCLFFBQXRCO0FBQ0EsU0FBU0MsR0FBVCxRQUFvQixzQkFBcEI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLHFCQUFwQjtBQUNBLE9BQU9DLFdBQVAsTUFBd0IsSUFBeEI7O0lBRU1DLGtCOzs7Ozs7Ozs7Ozs7Ozs7VUFDSkMsSyxHQUFRO01BQ05DLEtBQUssRUFBRTtJQURELEM7Ozs7OztXQUlSLGtCQUFTO01BQUE7O01BQ1AsSUFBUUEsS0FBUixHQUFrQixLQUFLRCxLQUF2QixDQUFRQyxLQUFSO01BQ0EsT0FDRSxvQkFBQyxXQUFEO1FBQ0UsS0FBSyxFQUFF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