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>
244 lines (226 loc) • 28.1 kB
JavaScript
"use strict";
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); }
var React = _interopRequireWildcard(require("react"));
var _enzyme = require("enzyme");
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
var _sinon = _interopRequireDefault(require("sinon"));
var _2 = _interopRequireDefault(require(".."));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(function () {
return {
disconnect: jest.fn(),
observe: jest.fn(),
unobserve: jest.fn()
};
});
var dataSource = [{
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}];
describe("Table", function () {
beforeAll(function () {
Element.prototype.getBoundingClientRect = jest.fn(function () {
return {
width: 500,
height: 600,
top: 0,
left: 0,
bottom: 0,
right: 0,
x: 0,
y: 0,
toJSON: function toJSON() {}
};
});
});
it("headerAffixed 检测", function () {
var wrapper = (0, _enzyme.mount)(React.createElement(_2["default"], {
dataSource: dataSource,
headerAffixed: true
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: "100px",
fixed: "left"
}), React.createElement(_2["default"].Column, {
fixed: "right",
dataIndex: "two",
title: "\u7B2Cer\u9879",
width: 300
}), React.createElement(_2["default"].Column, {
dataIndex: "s",
title: "\u7B2Csi\u9879",
width: "10%",
align: "center",
render: function render() {
return "这些撒大声地";
}
}), React.createElement(_2["default"].Column, {
dataIndex: "three",
title: "\u7B2Csan\u9879"
}), React.createElement(_2["default"].Column, {
dataIndex: "four",
title: "\u7B2Csi\u9879",
width: 300,
align: "right"
})));
global.innerWidth = 500;
global.dispatchEvent(new Event("resize"));
global.dispatchEvent(new Event("scroll"));
wrapper.instance().handleMainTableScroll();
wrapper.instance().componentWillUnmount();
});
it("height 与 headerAffixed 不能同时使用 验证", function () {
var stub = _sinon["default"].stub(console, "error");
(0, _enzyme.mount)(React.createElement(_2["default"], {
dataSource: dataSource,
height: 500,
headerAffixed: true
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u534A\u89D2\u62EC\u53F7\u5916(\u534A\u89D2\u62EC\u53F7\u5185\u6D4B\u8BD5)",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: 100,
fixed: "left"
})));
expect(stub.calledOnce).toBe(true);
stub.restore();
});
it("height 检测", function () {
var wrapper = (0, _enzyme.mount)(React.createElement(_2["default"], {
dataSource: dataSource,
height: 200
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: 100,
fixed: "left"
}), React.createElement(_2["default"].Column, {
fixed: "right",
dataIndex: "two",
title: "\u7B2Cer\u9879",
width: 300
}), React.createElement(_2["default"].Column, {
dataIndex: "s",
title: "\u7B2Csi\u9879",
width: 300,
align: "center",
render: function render() {
return "这些撒大声地";
}
}), React.createElement(_2["default"].Column, {
dataIndex: "three",
title: "\u7B2Csan\u9879"
}), React.createElement(_2["default"].Column, {
dataIndex: "four",
title: "\u7B2Csi\u9879",
width: 300,
align: "right"
})));
global.innerWidth = 500;
global.innerHeight = 500;
global.dispatchEvent(new Event("resize"));
global.dispatchEvent(new Event("scroll"));
wrapper.instance().handleMainTableScroll();
});
it("Column width 在 fixed 时必须设置 验证", function () {
var stub = _sinon["default"].stub(console, "error");
(0, _enzyme.mount)(React.createElement(_2["default"], {
dataSource: dataSource
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: "left"
})));
expect(stub.calledOnce).toBe(true);
stub.restore();
});
it("loading 快照", function () {
var wrapper = _reactTestRenderer["default"].create(React.createElement(_2["default"], {
loading: true,
dataSource: dataSource
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: "left"
})));
expect(wrapper).toMatchSnapshot();
});
it("合并单元格快照", function () {
var wrapper = _reactTestRenderer["default"].create(React.createElement(_2["default"], {
dataSource: dataSource,
getCellProps: function getCellProps(_, __, rowIndex, colIndex) {
if (rowIndex === 0 && colIndex === 0) {
return {
rowSpan: 2,
colSpan: 2
};
}
if (rowIndex === 3 && colIndex === 2) {
return {
rowSpan: 2,
colSpan: 1
};
}
if (rowIndex === 3 && colIndex === 3) {
return {
rowSpan: 2,
colSpan: 1
};
}
if (rowIndex === 2 && colIndex === 0) {
return {
rowSpan: 1,
colSpan: 1
};
}
return {};
}
}, React.createElement(_2["default"].Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: true
}), React.createElement(_2["default"].Column, {
dataIndex: "two",
title: "\u7B2Cer\u9879",
fixed: true
}), React.createElement(_2["default"].Column, {
dataIndex: "three",
title: "\u7B2C3\u9879",
align: "center"
}), React.createElement(_2["default"].Column, {
dataIndex: "four",
title: "\u7B2C\u56DB\u9879",
align: "center",
fixed: "right"
})));
expect(wrapper).toMatchSnapshot();
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImplc3QiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiZGF0YVNvdXJjZSIsIm9uZSIsInR3byIsImZvdXIiLCJ0aHJlZSIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiRWxlbWVudCIsInByb3RvdHlwZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwieCIsInkiLCJ0b0pTT04iLCJpdCIsIndyYXBwZXIiLCJtb3VudCIsImdsb2JhbCIsImlubmVyV2lkdGgiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJpbnN0YW5jZSIsImhhbmRsZU1haW5UYWJsZVNjcm9sbCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwic3R1YiIsInNpbm9uIiwiY29uc29sZSIsImV4cGVjdCIsImNhbGxlZE9uY2UiLCJ0b0JlIiwicmVzdG9yZSIsImlubmVySGVpZ2h0IiwiVGVzdFJlbmRlcmVyIiwiY3JlYXRlIiwidG9NYXRjaFNuYXBzaG90IiwiXyIsIl9fIiwicm93SW5kZXgiLCJjb2xJbmRleCIsInJvd1NwYW4iLCJjb2xTcGFuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50cy90YWJsZS9fX3Rlc3RzX18vcHJvcHMudGVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gXCJlbnp5bWVcIlxuaW1wb3J0IFRlc3RSZW5kZXJlciBmcm9tIFwicmVhY3QtdGVzdC1yZW5kZXJlclwiXG5pbXBvcnQgc2lub24gZnJvbSBcInNpbm9uXCJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi5cIlxuXG53aW5kb3cuUmVzaXplT2JzZXJ2ZXIgPVxuICB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgfHxcbiAgamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICAgIGRpc2Nvbm5lY3Q6IGplc3QuZm4oKSxcbiAgICBvYnNlcnZlOiBqZXN0LmZuKCksXG4gICAgdW5vYnNlcnZlOiBqZXN0LmZuKCksXG4gIH0pKVxuXG5jb25zdCBkYXRhU291cmNlID0gW1xuICB7XG4gICAgb25lOiBcIumYv+iQqOW+t1wiLFxuICAgIHR3bzogXCLpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrdcIixcbiAgICBmb3VyOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIHRocmVlOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICB9LFxuICB7XG4gICAgb25lOiBcIumYv+iQqOW+t1wiLFxuICAgIHR3bzogXCLpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrdcIixcbiAgICBmb3VyOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIHRocmVlOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICB9LFxuICB7XG4gICAgb25lOiBcIumYv+iQqOW+t1wiLFxuICAgIHR3bzogXCLpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrdcIixcbiAgICBmb3VyOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIHRocmVlOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICB9LFxuICB7XG4gICAgb25lOiBcIumYv+iQqOW+t1wiLFxuICAgIHR3bzogXCLpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrdcIixcbiAgICBmb3VyOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIHRocmVlOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICB9LFxuICB7XG4gICAgb25lOiBcIumYv+iQqOW+t1wiLFxuICAgIHR3bzogXCLpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrfpmL/okKjlvrdcIixcbiAgICBmb3VyOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIHRocmVlOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICB9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlT2JqZWN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55XG59XG5cbmRlc2NyaWJlKFwiVGFibGVcIiwgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MDAwNjY2M1xuICAgICAqIOmAmui/hyBtb2NrIGBnZXRCb3VuZGluZ0NsaWVudFJlY3Rg77yM5LmL5ZCO6L+Q6KGM55qE5omA5pyJIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIOmDveS8mui/lOWbnui/meWQjOS4gOS4quWAvOOAglxuICAgICAqL1xuICAgIEVsZW1lbnQucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9IGplc3QuZm4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDUwMCxcbiAgICAgICAgaGVpZ2h0OiA2MDAsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICByaWdodDogMCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgdG9KU09OOiAoKSA9PiB7fSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGl0KFwiaGVhZGVyQWZmaXhlZCDmo4DmtYtcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZSBkYXRhU291cmNlPXtkYXRhU291cmNlfSBoZWFkZXJBZmZpeGVkPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwib25lXCJcbiAgICAgICAgICB0aXRsZT1cIuesrOS4gOmhuVwiXG4gICAgICAgICAgcG9wb3Zlcj1cIuihqOWktOaPkOekuuWGheWuuVwiXG4gICAgICAgICAgd2lkdGg9XCIxMDBweFwiXG4gICAgICAgICAgZml4ZWQ9XCJsZWZ0XCJcbiAgICAgICAgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGZpeGVkPVwicmlnaHRcIlxuICAgICAgICAgIGRhdGFJbmRleD1cInR3b1wiXG4gICAgICAgICAgdGl0bGU9XCLnrKxlcumhuVwiXG4gICAgICAgICAgd2lkdGg9ezMwMH1cbiAgICAgICAgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cInNcIlxuICAgICAgICAgIHRpdGxlPVwi56ysc2npoblcIlxuICAgICAgICAgIHdpZHRoPVwiMTAlXCJcbiAgICAgICAgICBhbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgcmVuZGVyPXsoKSA9PiBcIui/meS6m+aSkuWkp+WjsOWcsFwifVxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uIGRhdGFJbmRleD1cInRocmVlXCIgdGl0bGU9XCLnrKxzYW7poblcIiAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwiZm91clwiXG4gICAgICAgICAgdGl0bGU9XCLnrKxzaemhuVwiXG4gICAgICAgICAgd2lkdGg9ezMwMH1cbiAgICAgICAgICBhbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnbG9iYWwuaW5uZXJXaWR0aCA9IDUwMFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJyZXNpemVcIikpXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInNjcm9sbFwiKSlcbiAgICB3cmFwcGVyLmluc3RhbmNlKCkuaGFuZGxlTWFpblRhYmxlU2Nyb2xsKClcbiAgICB3cmFwcGVyLmluc3RhbmNlKCkuY29tcG9uZW50V2lsbFVubW91bnQoKVxuICB9KVxuXG4gIC8vIGl0KFwiaGVpZ2h0IHByb3Ag6aqM6K+BXCIsICgpID0+IHtcbiAgLy8gICBjb25zdCBzdHViID0gc2lub24uc3R1Yihjb25zb2xlLCAnZXJyb3InKVxuICAvLyAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgLy8gICAgIDxUYWJsZVxuICAvLyAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAvLyAgICAgICBoZWlnaHQ9XCI1MDBweFwiXG4gIC8vICAgICA+XG4gIC8vICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgLy8gICAgICAgICBkYXRhSW5kZXg9XCJvbmVcIlxuICAvLyAgICAgICAgIHRpdGxlPVwi56ys5LiA6aG5XCJcbiAgLy8gICAgICAgICBwb3BvdmVyPVwi6KGo5aS05o+Q56S65YaF5a65XCJcbiAgLy8gICAgICAgICB3aWR0aD17MTAwfVxuICAvLyAgICAgICAgIGZpeGVkPVwibGVmdFwiXG4gIC8vICAgICAgIC8+XG4gIC8vICAgICA8L1RhYmxlPlxuICAvLyAgIClcbiAgLy8gICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0JlKHRydWUpXG4gIC8vICAgc3R1Yi5yZXN0b3JlKClcbiAgLy8gfSlcblxuICBpdChcImhlaWdodCDkuI4gaGVhZGVyQWZmaXhlZCDkuI3og73lkIzml7bkvb/nlKgg6aqM6K+BXCIsICgpID0+IHtcbiAgICBjb25zdCBzdHViID0gc2lub24uc3R1Yihjb25zb2xlLCBcImVycm9yXCIpXG4gICAgbW91bnQoXG4gICAgICA8VGFibGUgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX0gaGVpZ2h0PXs1MDB9IGhlYWRlckFmZml4ZWQ+XG4gICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgICAgICAgICBkYXRhSW5kZXg9XCJvbmVcIlxuICAgICAgICAgIHRpdGxlPVwi5Y2K6KeS5ous5Y+35aSWKOWNiuinkuaLrOWPt+WGhea1i+ivlSlcIlxuICAgICAgICAgIHBvcG92ZXI9XCLooajlpLTmj5DnpLrlhoXlrrlcIlxuICAgICAgICAgIHdpZHRoPXsxMDB9XG4gICAgICAgICAgZml4ZWQ9XCJsZWZ0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdChzdHViLmNhbGxlZE9uY2UpLnRvQmUodHJ1ZSlcbiAgICBzdHViLnJlc3RvcmUoKVxuICB9KVxuXG4gIGl0KFwiaGVpZ2h0IOajgOa1i1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9IGhlaWdodD17MjAwfT5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cIm9uZVwiXG4gICAgICAgICAgdGl0bGU9XCLnrKzkuIDpoblcIlxuICAgICAgICAgIHBvcG92ZXI9XCLooajlpLTmj5DnpLrlhoXlrrlcIlxuICAgICAgICAgIHdpZHRoPXsxMDB9XG4gICAgICAgICAgZml4ZWQ9XCJsZWZ0XCJcbiAgICAgICAgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGZpeGVkPVwicmlnaHRcIlxuICAgICAgICAgIGRhdGFJbmRleD1cInR3b1wiXG4gICAgICAgICAgdGl0bGU9XCLnrKxlcumhuVwiXG4gICAgICAgICAgd2lkdGg9ezMwMH1cbiAgICAgICAgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cInNcIlxuICAgICAgICAgIHRpdGxlPVwi56ysc2npoblcIlxuICAgICAgICAgIHdpZHRoPXszMDB9XG4gICAgICAgICAgYWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgIHJlbmRlcj17KCkgPT4gXCLov5nkupvmkpLlpKflo7DlnLBcIn1cbiAgICAgICAgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtbiBkYXRhSW5kZXg9XCJ0aHJlZVwiIHRpdGxlPVwi56ysc2Fu6aG5XCIgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cImZvdXJcIlxuICAgICAgICAgIHRpdGxlPVwi56ysc2npoblcIlxuICAgICAgICAgIHdpZHRoPXszMDB9XG4gICAgICAgICAgYWxpZ249XCJyaWdodFwiXG4gICAgICAgIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2xvYmFsLmlubmVyV2lkdGggPSA1MDBcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2xvYmFsLmlubmVySGVpZ2h0ID0gNTAwXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlc2l6ZVwiKSlcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwic2Nyb2xsXCIpKVxuICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVNYWluVGFibGVTY3JvbGwoKVxuICB9KVxuXG4gIC8vIGl0KFwiQ29sdW1uIHdpZHRoIHByb3Ag6aqM6K+BXCIsICgpID0+IHtcbiAgLy8gICBjb25zdCBzdHViID0gc2lub24uc3R1Yihjb25zb2xlLCAnZXJyb3InKVxuICAvLyAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgLy8gICAgIDxUYWJsZVxuICAvLyAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAvLyAgICAgPlxuICAvLyAgICAgICA8VGFibGUuQ29sdW1uXG4gIC8vICAgICAgICAgZGF0YUluZGV4PVwib25lXCJcbiAgLy8gICAgICAgICB0aXRsZT1cIuesrOS4gOmhuVwiXG4gIC8vICAgICAgICAgd2lkdGg9e1tdfVxuICAvLyAgICAgICAvPlxuICAvLyAgICAgPC9UYWJsZT5cbiAgLy8gICApXG4gIC8vICAgZXhwZWN0KHN0dWIuY2FsbGVkT25jZSkudG9CZSh0cnVlKVxuICAvLyAgIHN0dWIucmVzdG9yZSgpXG4gIC8vIH0pXG5cbiAgaXQoXCJDb2x1bW4gd2lkdGgg5ZyoIGZpeGVkIOaXtuW/hemhu+iuvue9riDpqozor4FcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGNvbnNvbGUsIFwiZXJyb3JcIilcbiAgICBtb3VudChcbiAgICAgIDxUYWJsZSBkYXRhU291cmNlPXtkYXRhU291cmNlfT5cbiAgICAgICAgPFRhYmxlLkNvbHVtbiBkYXRhSW5kZXg9XCJvbmVcIiB0aXRsZT1cIuesrOS4gOmhuVwiIGZpeGVkPVwibGVmdFwiIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0JlKHRydWUpXG4gICAgc3R1Yi5yZXN0b3JlKClcbiAgfSlcblxuICBpdChcImxvYWRpbmcg5b+r54WnXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZShcbiAgICAgIDxUYWJsZSBsb2FkaW5nIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9PlxuICAgICAgICA8VGFibGUuQ29sdW1uIGRhdGFJbmRleD1cIm9uZVwiIHRpdGxlPVwi56ys5LiA6aG5XCIgZml4ZWQ9XCJsZWZ0XCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdCh3cmFwcGVyKS50b01hdGNoU25hcHNob3QoKVxuICB9KVxuXG4gIGl0KFwi5ZCI5bm25Y2V5YWD5qC85b+r54WnXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZShcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBnZXRDZWxsUHJvcHM9eyhfLCBfXywgcm93SW5kZXgsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwICYmIGNvbEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByb3dTcGFuOiAyLFxuICAgICAgICAgICAgICBjb2xTcGFuOiAyLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocm93SW5kZXggPT09IDMgJiYgY29sSW5kZXggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJvd1NwYW46IDIsXG4gICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0gMyAmJiBjb2xJbmRleCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcm93U3BhbjogMixcbiAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAyICYmIGNvbEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByb3dTcGFuOiAxLFxuICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFRhYmxlLkNvbHVtbiBkYXRhSW5kZXg9XCJvbmVcIiB0aXRsZT1cIuesrOS4gOmhuVwiIGZpeGVkIC8+XG4gICAgICAgIDxUYWJsZS5Db2x1bW4gZGF0YUluZGV4PVwidHdvXCIgdGl0bGU9XCLnrKxlcumhuVwiIGZpeGVkIC8+XG4gICAgICAgIDxUYWJsZS5Db2x1bW4gZGF0YUluZGV4PVwidGhyZWVcIiB0aXRsZT1cIuesrDPpoblcIiBhbGlnbj1cImNlbnRlclwiIC8+XG4gICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgICAgICAgICBkYXRhSW5kZXg9XCJmb3VyXCJcbiAgICAgICAgICB0aXRsZT1cIuesrOWbm+mhuVwiXG4gICAgICAgICAgYWxpZ249XCJjZW50ZXJcIlxuICAgICAgICAgIGZpeGVkPVwicmlnaHRcIlxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUFBLE1BQU0sQ0FBQ0MsY0FBUCxHQUNFRCxNQUFNLENBQUNDLGNBQVAsSUFDQUMsSUFBSSxDQUFDQyxFQUFMLEdBQVVDLGtCQUFWLENBQTZCO0VBQUEs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