| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217 |
2
16
2
3
24
1
1
1
1
1
1
1
1
1
1
8
8
8
1
1
6
1
1
1
8
8
8
8
8
1
1
6
1
1
1
8
8
8
8
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
| "use strict";
var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
var _get = function get(object, property, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); Iif (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else Eif ("value" in desc && desc.writable) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
var _prototypeProperties = function (child, staticProps, instanceProps) { Iif (staticProps) Object.defineProperties(child, staticProps); Eif (instanceProps) Object.defineProperties(child.prototype, instanceProps); };
var _inherits = function (subClass, superClass) { Iif (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); Eif (superClass) subClass.__proto__ = superClass; };
var _classCallCheck = function (instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
var _Flux = require("../../Flux");
var Flummox = _Flux.Flummox;
var Store = _Flux.Store;
var Actions = _Flux.Actions;
var React = _interopRequire(require("react/addons"));
var TestUtils = React.addons.TestUtils;
var FluxComponent = _interopRequire(require("../FluxComponent"));
describe("FluxComponent", function () {
var TestActions = (function (Actions) {
function TestActions() {
_classCallCheck(this, TestActions);
Eif (Actions != null) {
Actions.apply(this, arguments);
}
}
_inherits(TestActions, Actions);
_prototypeProperties(TestActions, null, {
getSomething: {
value: function getSomething(something) {
return something;
},
writable: true,
configurable: true
}
});
return TestActions;
})(Actions);
var TestStore = (function (Store) {
function TestStore(flux) {
_classCallCheck(this, TestStore);
_get(Object.getPrototypeOf(TestStore.prototype), "constructor", this).call(this);
var testActions = flux.getActions("test");
this.register(testActions.getSomething, this.handleGetSomething);
this.state = {
something: null
};
}
_inherits(TestStore, Store);
_prototypeProperties(TestStore, null, {
handleGetSomething: {
value: function handleGetSomething(something) {
this.setState({ something: something });
},
writable: true,
configurable: true
}
});
return TestStore;
})(Store);
var Flux = (function (Flummox) {
function Flux() {
_classCallCheck(this, Flux);
_get(Object.getPrototypeOf(Flux.prototype), "constructor", this).call(this);
this.createActions("test", TestActions);
this.createStore("test", TestStore, this);
}
_inherits(Flux, Flummox);
return Flux;
})(Flummox);
it("gets Flux property from either props or context", function () {
var flux = new Flux();
var contextComponent = undefined,
propsComponent = undefined;
React.withContext({ flux: flux }, function () {
contextComponent = TestUtils.renderIntoDocument(React.createElement(FluxComponent, null));
});
propsComponent = TestUtils.renderIntoDocument(React.createElement(FluxComponent, { flux: flux }));
expect(contextComponent.flux).to.be.an["instanceof"](Flummox);
expect(propsComponent.flux).to.be.an["instanceof"](Flummox);
});
it("passes connectToStore prop to FluxMixin's connectToStores()", function () {
var flux = new Flux();
var actions = flux.getActions("test");
var component = TestUtils.renderIntoDocument(React.createElement(FluxComponent, { flux: flux, connectToStores: "test" }));
actions.getSomething("something good");
expect(component.state.something).to.deep.equal("something good");
actions.getSomething("something else");
expect(component.state.something).to.deep.equal("something else");
});
it("injects children with flux prop", function () {
var flux = new Flux();
var actions = flux.getActions("test");
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux },
React.createElement("div", null)
));
var div = TestUtils.findRenderedDOMComponentWithTag(tree, "div");
expect(div.props.flux).to.equal(flux);
});
it("injects children with props corresponding to component state", function () {
var flux = new Flux();
var actions = flux.getActions("test");
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux, connectToStores: "test" },
React.createElement("div", null)
));
var div = TestUtils.findRenderedDOMComponentWithTag(tree, "div");
actions.getSomething("something good");
expect(div.props.something).to.equal("something good");
actions.getSomething("something else");
expect(div.props.something).to.equal("something else");
});
it("injects children with any extra props", function () {
var flux = new Flux();
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux, extraProp: "hello" },
React.createElement("div", null)
));
var div = TestUtils.findRenderedDOMComponentWithTag(tree, "div");
expect(div.props.extraProp).to.equal("hello");
expect(Object.keys(div.props)).to.deep.equal(["flux", "extraProp"]);
});
it("wraps multiple children in span tag", function () {
var flux = new Flux();
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux },
React.createElement("div", null),
React.createElement("div", null)
));
var wrapper = TestUtils.findRenderedDOMComponentWithTag(tree, "span");
var divs = TestUtils.scryRenderedDOMComponentsWithTag(tree, "div");
expect(divs.length).to.equal(2);
});
it("does not wrap single child in span tag", function () {
var flux = new Flux();
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux },
React.createElement("div", null)
));
expect(TestUtils.findRenderedDOMComponentWithTag.bind(TestUtils, tree, "span")).to["throw"]("Did not find exactly one match for tag:span");
});
it("allows for nested FluxComponents", function () {
var flux = new Flux();
var actions = flux.getActions("test");
var tree = TestUtils.renderIntoDocument(React.createElement(
FluxComponent,
{ flux: flux, connectToStores: "test" },
React.createElement(
FluxComponent,
null,
React.createElement("div", null)
)
));
var div = TestUtils.findRenderedDOMComponentWithTag(tree, "div");
actions.getSomething("something good");
expect(div.props.something).to.equal("something good");
actions.getSomething("something else");
expect(div.props.something).to.equal("something else");
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGRvbnMvX190ZXN0c19fL0ZsdXhDb21wb25lbnQtdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7b0JBQXdDLFlBQVk7O0lBQTNDLE9BQU8sU0FBUCxPQUFPO0lBQUUsS0FBSyxTQUFMLEtBQUs7SUFBRSxPQUFPLFNBQVAsT0FBTztJQUV6QixLQUFLLDJCQUFNLGNBQWM7O0lBQzFCLFNBQVMsR0FBSyxLQUFLLENBQUMsTUFBTSxDQUExQixTQUFTO0lBRVIsYUFBYSwyQkFBTSxrQkFBa0I7O0FBRTVDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBTTtNQUV4QixXQUFXLGNBQVMsT0FBTzthQUEzQixXQUFXOzRCQUFYLFdBQVc7O1VBQVMsT0FBTztBQUFQLGVBQU87Ozs7Y0FBM0IsV0FBVyxFQUFTLE9BQU87O3lCQUEzQixXQUFXO0FBQ2Ysa0JBQVk7ZUFBQSxzQkFBQyxTQUFTLEVBQUU7QUFDdEIsaUJBQU8sU0FBUyxDQUFDO1NBQ2xCOzs7Ozs7V0FIRyxXQUFXO0tBQVMsT0FBTzs7TUFNM0IsU0FBUyxjQUFTLEtBQUs7QUFDaEIsYUFEUCxTQUFTLENBQ0QsSUFBSTs0QkFEWixTQUFTOztBQUVYLGlDQUZFLFNBQVMsNkNBRUg7O0FBRVIsVUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxVQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7O0FBRWpFLFVBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxpQkFBUyxFQUFFLElBQUk7T0FDaEIsQ0FBQztLQUNIOztjQVZHLFNBQVMsRUFBUyxLQUFLOzt5QkFBdkIsU0FBUztBQVliLHdCQUFrQjtlQUFBLDRCQUFDLFNBQVMsRUFBRTtBQUM1QixjQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFULFNBQVMsRUFBRSxDQUFDLENBQUM7U0FD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QUMsQ0FBQztHQUMzRCxDQUFDLENBQUM7O0FBRUgsSUFBRSxDQUFDLGtDQUFrQyxFQUFFLFlBQU07QUFDM0MsUUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN0QixRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUV0QyxRQUFJLElBQUksR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQ3JDO0FBQUMsbUJBQWE7UUFBQyxJQUFJLEVBQUUsSUFBSSxBQUFDLEVBQUMsZUFBZSxFQUFDLE1BQU07TUFDL0M7QUFBQyxxQkFBYTs7UUFDWixnQ0FBTztPQUNPO0tBQ0YsQ0FDakIsQ0FBQzs7QUFFRixRQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsK0JBQStCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVqRSxXQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdkMsVUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3ZELFdBQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN2QyxVQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7R0FDeEQsQ0FBQyxDQUFDO0NBRUosQ0FBQyxDQUFDIiwiZmlsZSI6InNyYy9hZGRvbnMvX190ZXN0c19fL0ZsdXhDb21wb25lbnQtdGVzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZsdW1tb3gsIFN0b3JlLCBBY3Rpb25zIH0gZnJvbSAnLi4vLi4vRmx1eCc7XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdC9hZGRvbnMnO1xubGV0IHsgVGVzdFV0aWxzIH0gPSBSZWFjdC5hZGRvbnM7XG5cbmltcG9ydCBGbHV4Q29tcG9uZW50IGZyb20gJy4uL0ZsdXhDb21wb25lbnQnO1xuXG5kZXNjcmliZSgnRmx1eENvbXBvbmVudCcsICgpID0+IHtcblxuICBjbGFzcyBUZXN0QWN0aW9ucyBleHRlbmRzIEFjdGlvbnMge1xuICAgIGdldFNvbWV0aGluZyhzb21ldGhpbmcpIHtcbiAgICAgIHJldHVybiBzb21ldGhpbmc7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgVGVzdFN0b3JlIGV4dGVuZHMgU3RvcmUge1xuICAgIGNvbnN0cnVjdG9yKGZsdXgpIHtcbiAgICAgIHN1cGVyKCk7XG5cbiAgICAgIGxldCB0ZXN0QWN0aW9ucyA9IGZsdXguZ2V0QWN0aW9ucygndGVzdCcpO1xuICAgICAgdGhpcy5yZWdpc3Rlcih0ZXN0QWN0aW9ucy5nZXRTb21ldGhpbmcsIHRoaXMuaGFuZGxlR2V0U29tZXRoaW5nKTtcblxuICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgc29tZXRoaW5nOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGhhbmRsZUdldFNvbWV0aGluZyhzb21ldGhpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb21ldGhpbmcgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgRmx1eCBleHRlbmRzIEZsdW1tb3gge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoKTtcblxuICAgICAgdGhpcy5jcmVhdGVBY3Rpb25zKCd0ZXN0JywgVGVzdEFjdGlvbnMpO1xuICAgICAgdGhpcy5jcmVhdGVTdG9yZSgndGVzdCcsIFRlc3RTdG9yZSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgaXQoJ2dldHMgRmx1eCBwcm9wZXJ0eSBmcm9tIGVpdGhlciBwcm9wcyBvciBjb250ZXh0JywgKCkgPT4ge1xuICAgIGxldCBmbHV4ID0gbmV3IEZsdXgoKTtcbiAgICBsZXQgY29udGV4dENvbXBvbmVudCwgcHJvcHNDb21wb25lbnQ7XG5cbiAgICBSZWFjdC53aXRoQ29udGV4dCh7IGZsdXggfSwgKCkgPT4ge1xuICAgICAgY29udGV4dENvbXBvbmVudCA9IFRlc3RVdGlscy5yZW5kZXJJbnRvRG9jdW1lbnQoPEZsdXhDb21wb25lbnQgLz4pO1xuICAgIH0pO1xuXG4gICAgcHJvcHNDb21wb25lbnQgPSBUZXN0VXRpbHMucmVuZGVySW50b0RvY3VtZW50KFxuICAgICAgPEZsdXhDb21wb25lbnQgZmx1eD17Zmx1eH0gLz5cbiAgICApO1xuXG4gICAgZXhwZWN0KGNvbnRleHRDb21wb25lbnQuZmx1eCkudG8uYmUuYW4uaW5zdGFuY2VvZihGbHVtbW94KTtcbiAgICBleHBlY3QocHJvcHNDb21wb25lbnQuZmx1eCkudG8uYmUuYW4uaW5zdGFuY2VvZihGbHVtbW94KTtcbiAgfSk7XG5cbiAgaXQoJ3Bhc3NlcyBjb25uZWN0VG9TdG9yZSBwcm9wIHRvIEZsdXhNaXhpblxcJ3MgY29ubmVjdFRvU3RvcmVzKCknLCAoKSA9PiB7XG4gICAgbGV0IGZsdXggPSBuZXcgRmx1eCgpO1xuICAgIGxldCBhY3Rpb25zID0gZmx1eC5nZXRBY3Rpb25zKCd0ZXN0Jyk7XG5cbiAgICBsZXQgY29tcG9uZW50ID0gVGVzdFV0aWxzLnJlbmRlckludG9Eb2N1bWVudChcbiAgICAgIDxGbHV4Q29tcG9uZW50IGZsdXg9e2ZsdXh9IGNvbm5lY3RUb1N0b3Jlcz1cInRlc3RcIiAvPlxuICAgICk7XG5cbiAgICBhY3Rpb25zLmdldFNvbWV0aGluZygnc29tZXRoaW5nIGdvb2QnKTtcbiAgICBleHBlY3QoY29tcG9uZW50LnN0YXRlLnNvbWV0aGluZykudG8uZGVlcC5lcXVhbCgnc29tZXRoaW5nIGdvb2QnKTtcbiAgICBhY3Rpb25zLmdldFNvbWV0aGluZygnc29tZXRoaW5nIGVsc2UnKTtcbiAgICBleHBlY3QoY29tcG9uZW50LnN0YXRlLnNvbWV0aGluZykudG8uZGVlcC5lcXVhbCgnc29tZXRoaW5nIGVsc2UnKTtcbiAgfSk7XG5cbiAgaXQoJ2luamVjdHMgY2hpbGRyZW4gd2l0aCBmbHV4IHByb3AnLCAoKSA9PiB7XG4gICAgbGV0IGZsdXggPSBuZXcgRmx1eCgpO1xuICAgIGxldCBhY3Rpb25zID0gZmx1eC5nZXRBY3Rpb25zKCd0ZXN0Jyk7XG5cbiAgICBsZXQgdHJlZSA9IFRlc3RVdGlscy5yZW5kZXJJbnRvRG9jdW1lbnQoXG4gICAgICA8Rmx1eENvbXBvbmVudCBmbHV4PXtmbHV4fT5cbiAgICAgICAgPGRpdiAvPlxuICAgICAgPC9GbHV4Q29tcG9uZW50PlxuICAgICk7XG5cbiAgICBsZXQgZGl2ID0gVGVzdFV0aWxzLmZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWcodHJlZSwgJ2RpdicpO1xuXG4gICAgZXhwZWN0KGRpdi5wcm9wcy5mbHV4KS50by5lcXVhbChmbHV4KTtcbiAgfSk7XG5cbiAgaXQoJ2luamVjdHMgY2hpbGRyZW4gd2l0aCBwcm9wcyBjb3JyZXNwb25kaW5nIHRvIGNvbXBvbmVudCBzdGF0ZScsICgpID0+IHtcbiAgICBsZXQgZmx1eCA9IG5ldyBGbHV4KCk7XG4gICAgbGV0IGFjdGlvbnMgPSBmbHV4LmdldEFjdGlvbnMoJ3Rlc3QnKTtcblxuICAgIGxldCB0cmVlID0gVGVzdFV0aWxzLnJlbmRlckludG9Eb2N1bWVudChcbiAgICAgIDxGbHV4Q29tcG9uZW50IGZsdXg9e2ZsdXh9IGNvbm5lY3RUb1N0b3Jlcz1cInRlc3RcIj5cbiAgICAgICAgPGRpdiAvPlxuICAgICAgPC9GbHV4Q29tcG9uZW50PlxuICAgICk7XG5cbiAgICBsZXQgZGl2ID0gVGVzdFV0aWxzLmZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWcodHJlZSwgJ2RpdicpO1xuXG4gICAgYWN0aW9ucy5nZXRTb21ldGhpbmcoJ3NvbWV0aGluZyBnb29kJyk7XG4gICAgZXhwZWN0KGRpdi5wcm9wcy5zb21ldGhpbmcpLnRvLmVxdWFsKCdzb21ldGhpbmcgZ29vZCcpO1xuICAgIGFjdGlvbnMuZ2V0U29tZXRoaW5nKCdzb21ldGhpbmcgZWxzZScpO1xuICAgIGV4cGVjdChkaXYucHJvcHMuc29tZXRoaW5nKS50by5lcXVhbCgnc29tZXRoaW5nIGVsc2UnKTtcbiAgfSk7XG5cbiAgaXQoJ2luamVjdHMgY2hpbGRyZW4gd2l0aCBhbnkgZXh0cmEgcHJvcHMnLCAoKSA9PiB7XG4gICAgbGV0IGZsdXggPSBuZXcgRmx1eCgpO1xuXG4gICAgbGV0IHRyZWUgPSBUZXN0VXRpbHMucmVuZGVySW50b0RvY3VtZW50KFxuICAgICAgPEZsdXhDb21wb25lbnQgZmx1eD17Zmx1eH0gZXh0cmFQcm9wPVwiaGVsbG9cIj5cbiAgICAgICAgPGRpdiAvPlxuICAgICAgPC9GbHV4Q29tcG9uZW50PlxuICAgICk7XG5cbiAgICBsZXQgZGl2ID0gVGVzdFV0aWxzLmZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWcodHJlZSwgJ2RpdicpO1xuXG4gICAgZXhwZWN0KGRpdi5wcm9wcy5leHRyYVByb3ApLnRvLmVxdWFsKCdoZWxsbycpO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhkaXYucHJvcHMpKS50by5kZWVwLmVxdWFsKFsnZmx1eCcsICdleHRyYVByb3AnXSk7XG4gIH0pO1xuXG4gIGl0KCd3cmFwcyBtdWx0aXBsZSBjaGlsZHJlbiBpbiBzcGFuIHRhZycsICgpID0+IHtcbiAgICBsZXQgZmx1eCA9IG5ldyBGbHV4KCk7XG5cbiAgICBsZXQgdHJlZSA9IFRlc3RVdGlscy5yZW5kZXJJbnRvRG9jdW1lbnQoXG4gICAgICA8Rmx1eENvbXBvbmVudCBmbHV4PXtmbHV4fT5cbiAgICAgICAgPGRpdiAvPlxuICAgICAgICA8ZGl2IC8+XG4gICAgICA8L0ZsdXhDb21wb25lbnQ+XG4gICAgKTtcblxuICAgIGxldCB3cmFwcGVyID0gVGVzdFV0aWxzLmZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWcodHJlZSwgJ3NwYW4nKTtcbiAgICBsZXQgZGl2cyA9IFRlc3RVdGlscy5zY3J5UmVuZGVyZWRET01Db21wb25lbnRzV2l0aFRhZyh0cmVlLCAnZGl2Jyk7XG5cbiAgICBleHBlY3QoZGl2cy5sZW5ndGgpLnRvLmVxdWFsKDIpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3Qgd3JhcCBzaW5nbGUgY2hpbGQgaW4gc3BhbiB0YWcnLCAoKSA9PiB7XG4gICAgbGV0IGZsdXggPSBuZXcgRmx1eCgpO1xuXG4gICAgbGV0IHRyZWUgPSBUZXN0VXRpbHMucmVuZGVySW50b0RvY3VtZW50KFxuICAgICAgPEZsdXhDb21wb25lbnQgZmx1eD17Zmx1eH0+XG4gICAgICAgIDxkaXYgLz5cbiAgICAgIDwvRmx1eENvbXBvbmVudD5cbiAgICApO1xuXG4gICAgZXhwZWN0KFxuICAgICAgVGVzdFV0aWxzLmZpbmRSZW5kZXJlZERPTUNvbXBvbmVudFdpdGhUYWcuYmluZChUZXN0VXRpbHMsIHRyZWUsICdzcGFuJylcbiAgICApLnRvLnRocm93KCdEaWQgbm90IGZpbmQgZXhhY3RseSBvbmUgbWF0Y2ggZm9yIHRhZzpzcGFuJyk7XG4gIH0pO1xuXG4gIGl0KCdhbGxvd3MgZm9yIG5lc3RlZCBGbHV4Q29tcG9uZW50cycsICgpID0+IHtcbiAgICBsZXQgZmx1eCA9IG5ldyBGbHV4KCk7XG4gICAgbGV0IGFjdGlvbnMgPSBmbHV4LmdldEFjdGlvbnMoJ3Rlc3QnKTtcblxuICAgIGxldCB0cmVlID0gVGVzdFV0aWxzLnJlbmRlckludG9Eb2N1bWVudChcbiAgICAgIDxGbHV4Q29tcG9uZW50IGZsdXg9e2ZsdXh9IGNvbm5lY3RUb1N0b3Jlcz1cInRlc3RcIj5cbiAgICAgICAgPEZsdXhDb21wb25lbnQ+XG4gICAgICAgICAgPGRpdiAvPlxuICAgICAgICA8L0ZsdXhDb21wb25lbnQ+XG4gICAgICA8L0ZsdXhDb21wb25lbnQ+XG4gICAgKTtcblxuICAgIGxldCBkaXYgPSBUZXN0VXRpbHMuZmluZFJlbmRlcmVkRE9NQ29tcG9uZW50V2l0aFRhZyh0cmVlLCAnZGl2Jyk7XG5cbiAgICBhY3Rpb25zLmdldFNvbWV0aGluZygnc29tZXRoaW5nIGdvb2QnKTtcbiAgICBleHBlY3QoZGl2LnByb3BzLnNvbWV0aGluZykudG8uZXF1YWwoJ3NvbWV0aGluZyBnb29kJyk7XG4gICAgYWN0aW9ucy5nZXRTb21ldGhpbmcoJ3NvbWV0aGluZyBlbHNlJyk7XG4gICAgZXhwZWN0KGRpdi5wcm9wcy5zb21ldGhpbmcpLnRvLmVxdWFsKCdzb21ldGhpbmcgZWxzZScpO1xuICB9KTtcblxufSk7XG4iXX0= |