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 |
2×
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×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
1×
5×
1×
1×
5×
1×
1×
5×
1×
5×
| 'use strict';
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _sinon = require('sinon');
var _sinon2 = _interopRequireDefault(_sinon);
var _chai = require('chai');
var _Utils = require('../Utils');
var _ShallowTraversal = require('../ShallowTraversal');
describe('ShallowTraversal', function () {
describe('splitSelector', function () {
var fn = _Utils.splitSelector;
it('splits multiple class names', function () {
(0, _chai.expect)(fn('.foo.bar')).to.eql(['.foo', '.bar']);
(0, _chai.expect)(fn('.foo.bar.baz')).to.eql(['.foo', '.bar', '.baz']);
});
it('splits tag names and class names', function () {
(0, _chai.expect)(fn('input.bar')).to.eql(['input', '.bar']);
(0, _chai.expect)(fn('div.bar.baz')).to.eql(['div', '.bar', '.baz']);
(0, _chai.expect)(fn('Foo.bar')).to.eql(['Foo', '.bar']);
});
});
describe('hasClassName', function () {
it('should work for standalone classNames', function () {
var node = _react2['default'].createElement('div', { className: 'foo' });
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'foo')).to.be['true'];
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'bar')).to.be['false'];
});
it('should work for multiple classNames', function () {
var node = _react2['default'].createElement('div', { className: 'foo bar baz' });
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'foo')).to.be['true'];
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'bar')).to.be['true'];
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'baz')).to.be['true'];
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'bax')).to.be['false'];
});
it('should also allow hyphens', function () {
var node = _react2['default'].createElement('div', { className: 'foo-bar' });
(0, _chai.expect)((0, _ShallowTraversal.hasClassName)(node, 'foo-bar')).to.be['true'];
});
});
describe('treeForEach', function () {
it('should be called once for a leaf node', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement('div', null);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.calledOnce).to.be['true'];
});
it('should handle a single child', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement('div', null)
);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.callCount).to.equal(2);
});
it('should handle several children', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement('div', null),
_react2['default'].createElement('div', null)
);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.callCount).to.equal(3);
});
it('should handle multiple hierarchies', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement(
'div',
null,
_react2['default'].createElement('div', null),
_react2['default'].createElement('div', null)
)
);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.callCount).to.equal(4);
});
it('should not get trapped from empty strings', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement(
'p',
null,
""
)
);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.callCount).to.equal(3);
});
it('should pass in the node', function () {
var spy = _sinon2['default'].spy();
var node = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement('button', null),
_react2['default'].createElement(
'nav',
null,
_react2['default'].createElement('input', null)
)
);
(0, _ShallowTraversal.treeForEach)(node, spy);
(0, _chai.expect)(spy.callCount).to.equal(4);
(0, _chai.expect)(spy.args[0][0].type).to.equal('div');
(0, _chai.expect)(spy.args[1][0].type).to.equal('button');
(0, _chai.expect)(spy.args[2][0].type).to.equal('nav');
(0, _chai.expect)(spy.args[3][0].type).to.equal('input');
});
});
describe('treeFilter', function () {
var tree = _react2['default'].createElement(
'div',
null,
_react2['default'].createElement('button', null),
_react2['default'].createElement('button', null),
_react2['default'].createElement(
'nav',
null,
_react2['default'].createElement('input', null)
)
);
it('should return an empty array for falsey test', function () {
(0, _chai.expect)((0, _ShallowTraversal.treeFilter)(tree, function () {
return false;
}).length).to.equal(0);
});
it('should return the full array for truthy test', function () {
(0, _chai.expect)((0, _ShallowTraversal.treeFilter)(tree, function () {
return true;
}).length).to.equal(5);
});
it('should filter for truthiness', function () {
(0, _chai.expect)((0, _ShallowTraversal.treeFilter)(tree, function (node) {
return node.type === 'nav';
}).length).to.equal(1);
(0, _chai.expect)((0, _ShallowTraversal.treeFilter)(tree, function (node) {
return node.type === 'button';
}).length).to.equal(2);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9sZWxhbmRfcmljaGFyZHNvbi9jb2RlL3JlYWdlbnQvc3JjL19fdGVzdHNfXy9TaGFsbG93VHJhdmVyc2FsLXNwZWMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O3FCQUFrQixPQUFPOzs7O3FCQUNQLE9BQU87Ozs7b0JBQ0YsTUFBTTs7cUJBR3RCLFVBQVU7O2dDQUtWLHFCQUFxQjs7QUFFNUIsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFlBQU07O0FBRWpDLFVBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBTTtBQUM5QixRQUFNLEVBQUUsdUJBQWdCLENBQUM7QUFDekIsTUFBRSxDQUFDLDZCQUE2QixFQUFFLFlBQU07QUFDdEMsd0JBQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHdCQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDN0QsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQyxrQ0FBa0MsRUFBRSxZQUFNO0FBQzNDLHdCQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRCx3QkFBTyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFELHdCQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUMvQyxDQUFDLENBQUM7R0FDSixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFNOztBQUU3QixNQUFFLENBQUMsdUNBQXVDLEVBQUUsWUFBTTtBQUNoRCxVQUFNLElBQUksR0FBSSwwQ0FBSyxTQUFTLEVBQUMsS0FBSyxHQUFFLEFBQUMsQ0FBQztBQUN0Qyx3QkFBTyxvQ0FBYSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFLLENBQUM7QUFDN0Msd0JBQU8sb0NBQWEsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBTSxDQUFDO0tBQy9DLENBQUMsQ0FBQzs7QUFFSCxNQUFFLENBQUMscUNBQXFDLEVBQUUsWUFBTTtBQUM5QyxVQUFNLElBQUksR0FBSSwwQ0FBSyxTQUFTLEVBQUMsYUFBYSxHQUFFLEFBQUMsQ0FBQztBQUM5Qyx3QkFBTyxvQ0FBYSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFLLENBQUM7QUFDN0Msd0JBQU8sb0NBQWEsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBSyxDQUFDO0FBQzdDLHdCQUFPLG9DQUFhLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQUssQ0FBQztBQUM3Qyx3QkFBTyxvQ0FBYSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFNLENBQUM7S0FDL0MsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQywyQkFBMkIsRUFBRSxZQUFNO0FBQ3BDLFVBQU0sSUFBSSxHQUFJLDBDQUFLLFNBQVMsRUFBQyxTQUFTLEdBQUUsQUFBQyxDQUFDO0FBQzFDLHdCQUFPLG9DQUFhLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQUssQ0FBQztLQUNsRCxDQUFDLENBQUM7R0FFSixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFNOztBQUU1QixNQUFFLENBQUMsdUNBQXVDLEVBQUUsWUFBTTtBQUNoRCxVQUFNLEdBQUcsR0FBRyxtQkFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4QixVQUFNLElBQUksR0FBSSw2Q0FBTyxBQUFDLENBQUM7QUFDdkIseUNBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFLLENBQUM7S0FDbkMsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQyw4QkFBOEIsRUFBRSxZQUFNO0FBQ3ZDLFVBQU0sR0FBRyxHQUFHLG1CQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFVBQU0sSUFBSSxHQUNSOzs7UUFDRSw2Q0FBTztPQUNILEFBQ1AsQ0FBQztBQUNGLHlDQUFZLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2Qix3QkFBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQyxDQUFDLENBQUM7O0FBRUgsTUFBRSxDQUFDLGdDQUFnQyxFQUFFLFlBQU07QUFDekMsVUFBTSxHQUFHLEdBQUcsbUJBQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsVUFBTSxJQUFJLEdBQ1I7OztRQUNFLDZDQUFPO1FBQ1AsNkNBQU87T0FDSCxBQUNQLENBQUM7QUFDRix5Q0FBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsd0JBQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkMsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0FBQzdDLFVBQU0sR0FBRyxHQUFHLG1CQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFVBQU0sSUFBSSxHQUNSOzs7UUFDRTs7O1VBQ0UsNkNBQU87VUFDUCw2Q0FBTztTQUNIO09BQ0YsQUFDUCxDQUFDO0FBQ0YseUNBQVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25DLENBQUMsQ0FBQzs7QUFFSCxNQUFFLENBQUMsMkNBQTJDLEVBQUUsWUFBTTtBQUNwRCxVQUFNLEdBQUcsR0FBRyxtQkFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4QixVQUFNLElBQUksR0FDUjs7O1FBQ0U7OztVQUFJLEVBQUU7U0FBSztPQUNQLEFBQ1AsQ0FBQztBQUNGLHlDQUFZLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2Qix3QkFBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQyxDQUFDLENBQUM7O0FBRUgsTUFBRSxDQUFDLHlCQUF5QixFQUFFLFlBQU07QUFDbEMsVUFBTSxHQUFHLEdBQUcsbUJBQU0sR0FBRyxFQUFFLENBQUM7QUFDeEIsVUFBTSxJQUFJLEdBQ1I7OztRQUNFLGdEQUFVO1FBQ1Y7OztVQUNFLCtDQUFTO1NBQ0w7T0FDRixBQUNQLENBQUM7QUFDRix5Q0FBWSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsd0JBQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsd0JBQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLHdCQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQyx3QkFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsd0JBQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9DLENBQUMsQ0FBQztHQUVKLENBQUMsQ0FBQzs7QUFFSCxVQUFRLENBQUMsWUFBWSxFQUFFLFlBQU07QUFDM0IsUUFBTSxJQUFJLEdBQ1I7OztNQUNFLGdEQUFVO01BQ1YsZ0RBQVU7TUFDVjs7O1FBQ0UsK0NBQVM7T0FDTDtLQUNGLEFBQ1AsQ0FBQzs7QUFFRixNQUFFLENBQUMsOENBQThDLEVBQUUsWUFBTTtBQUN2RCx3QkFBTyxrQ0FBVyxJQUFJLEVBQUU7ZUFBTSxLQUFLO09BQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUQsQ0FBQyxDQUFDOztBQUVILE1BQUUsQ0FBQyw4Q0FBOEMsRUFBRSxZQUFNO0FBQ3ZELHdCQUFPLGtDQUFXLElBQUksRUFBRTtlQUFNLElBQUk7T0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RCxDQUFDLENBQUM7O0FBRUgsTUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsd0JBQU8sa0NBQVcsSUFBSSxFQUFFLFVBQUEsSUFBSTtlQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSztPQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLHdCQUFPLGtDQUFXLElBQUksRUFBRSxVQUFBLElBQUk7ZUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7T0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3RSxDQUFDLENBQUM7R0FFSixDQUFDLENBQUM7Q0FFSixDQUFDLENBQUMiLCJmaWxlIjoiL1VzZXJzL2xlbGFuZF9yaWNoYXJkc29uL2NvZGUvcmVhZ2VudC9zcmMvX190ZXN0c19fL1NoYWxsb3dUcmF2ZXJzYWwtc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge1xuICBzcGxpdFNlbGVjdG9yLFxufSBmcm9tICcuLi9VdGlscyc7XG5pbXBvcnQge1xuICBoYXNDbGFzc05hbWUsXG4gIHRyZWVGb3JFYWNoLFxuICB0cmVlRmlsdGVyLFxufSBmcm9tICcuLi9TaGFsbG93VHJhdmVyc2FsJztcblxuZGVzY3JpYmUoJ1NoYWxsb3dUcmF2ZXJzYWwnLCAoKSA9PiB7XG5cbiAgZGVzY3JpYmUoJ3NwbGl0U2VsZWN0b3InLCAoKSA9PiB7XG4gICAgY29uc3QgZm4gPSBzcGxpdFNlbGVjdG9yO1xuICAgIGl0KCdzcGxpdHMgbXVsdGlwbGUgY2xhc3MgbmFtZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZm4oJy5mb28uYmFyJykpLnRvLmVxbChbJy5mb28nLCAnLmJhciddKTtcbiAgICAgIGV4cGVjdChmbignLmZvby5iYXIuYmF6JykpLnRvLmVxbChbJy5mb28nLCAnLmJhcicsICcuYmF6J10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NwbGl0cyB0YWcgbmFtZXMgYW5kIGNsYXNzIG5hbWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZuKCdpbnB1dC5iYXInKSkudG8uZXFsKFsnaW5wdXQnLCAnLmJhciddKTtcbiAgICAgIGV4cGVjdChmbignZGl2LmJhci5iYXonKSkudG8uZXFsKFsnZGl2JywgJy5iYXInLCAnLmJheiddKTtcbiAgICAgIGV4cGVjdChmbignRm9vLmJhcicpKS50by5lcWwoWydGb28nLCAnLmJhciddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2hhc0NsYXNzTmFtZScsICgpID0+IHtcblxuICAgIGl0KCdzaG91bGQgd29yayBmb3Igc3RhbmRhbG9uZSBjbGFzc05hbWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9ICg8ZGl2IGNsYXNzTmFtZT1cImZvb1wiLz4pO1xuICAgICAgZXhwZWN0KGhhc0NsYXNzTmFtZShub2RlLCAnZm9vJykpLnRvLmJlLnRydWU7XG4gICAgICBleHBlY3QoaGFzQ2xhc3NOYW1lKG5vZGUsICdiYXInKSkudG8uYmUuZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgZm9yIG11bHRpcGxlIGNsYXNzTmFtZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gKDxkaXYgY2xhc3NOYW1lPVwiZm9vIGJhciBiYXpcIi8+KTtcbiAgICAgIGV4cGVjdChoYXNDbGFzc05hbWUobm9kZSwgJ2ZvbycpKS50by5iZS50cnVlO1xuICAgICAgZXhwZWN0KGhhc0NsYXNzTmFtZShub2RlLCAnYmFyJykpLnRvLmJlLnRydWU7XG4gICAgICBleHBlY3QoaGFzQ2xhc3NOYW1lKG5vZGUsICdiYXonKSkudG8uYmUudHJ1ZTtcbiAgICAgIGV4cGVjdChoYXNDbGFzc05hbWUobm9kZSwgJ2JheCcpKS50by5iZS5mYWxzZTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxzbyBhbGxvdyBoeXBoZW5zJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9ICg8ZGl2IGNsYXNzTmFtZT1cImZvby1iYXJcIi8+KTtcbiAgICAgIGV4cGVjdChoYXNDbGFzc05hbWUobm9kZSwgJ2Zvby1iYXInKSkudG8uYmUudHJ1ZTtcbiAgICB9KTtcblxuICB9KTtcblxuICBkZXNjcmliZSgndHJlZUZvckVhY2gnLCAoKSA9PiB7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGZvciBhIGxlYWYgbm9kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweSgpO1xuICAgICAgY29uc3Qgbm9kZSA9ICg8ZGl2IC8+KTtcbiAgICAgIHRyZWVGb3JFYWNoKG5vZGUsIHNweSk7XG4gICAgICBleHBlY3Qoc3B5LmNhbGxlZE9uY2UpLnRvLmJlLnRydWU7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhIHNpbmdsZSBjaGlsZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweSgpO1xuICAgICAgY29uc3Qgbm9kZSA9IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICAgIHRyZWVGb3JFYWNoKG5vZGUsIHNweSk7XG4gICAgICBleHBlY3Qoc3B5LmNhbGxDb3VudCkudG8uZXF1YWwoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZXZlcmFsIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KCk7XG4gICAgICBjb25zdCBub2RlID0gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICA8ZGl2IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICAgIHRyZWVGb3JFYWNoKG5vZGUsIHNweSk7XG4gICAgICBleHBlY3Qoc3B5LmNhbGxDb3VudCkudG8uZXF1YWwoMyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBoaWVyYXJjaGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweSgpO1xuICAgICAgY29uc3Qgbm9kZSA9IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiAvPlxuICAgICAgICAgICAgPGRpdiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgICB0cmVlRm9yRWFjaChub2RlLCBzcHkpO1xuICAgICAgZXhwZWN0KHNweS5jYWxsQ291bnQpLnRvLmVxdWFsKDQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgZ2V0IHRyYXBwZWQgZnJvbSBlbXB0eSBzdHJpbmdzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3B5ID0gc2lub24uc3B5KCk7XG4gICAgICBjb25zdCBub2RlID0gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPntcIlwifTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgICAgdHJlZUZvckVhY2gobm9kZSwgc3B5KTtcbiAgICAgIGV4cGVjdChzcHkuY2FsbENvdW50KS50by5lcXVhbCgzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBpbiB0aGUgbm9kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweSgpO1xuICAgICAgY29uc3Qgbm9kZSA9IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIC8+XG4gICAgICAgICAgPG5hdj5cbiAgICAgICAgICAgIDxpbnB1dCAvPlxuICAgICAgICAgIDwvbmF2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgICB0cmVlRm9yRWFjaChub2RlLCBzcHkpO1xuICAgICAgZXhwZWN0KHNweS5jYWxsQ291bnQpLnRvLmVxdWFsKDQpO1xuICAgICAgZXhwZWN0KHNweS5hcmdzWzBdWzBdLnR5cGUpLnRvLmVxdWFsKCdkaXYnKTtcbiAgICAgIGV4cGVjdChzcHkuYXJnc1sxXVswXS50eXBlKS50by5lcXVhbCgnYnV0dG9uJyk7XG4gICAgICBleHBlY3Qoc3B5LmFyZ3NbMl1bMF0udHlwZSkudG8uZXF1YWwoJ25hdicpO1xuICAgICAgZXhwZWN0KHNweS5hcmdzWzNdWzBdLnR5cGUpLnRvLmVxdWFsKCdpbnB1dCcpO1xuICAgIH0pO1xuXG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cmVlRmlsdGVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHRyZWUgPSAoXG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIC8+XG4gICAgICAgIDxidXR0b24gLz5cbiAgICAgICAgPG5hdj5cbiAgICAgICAgICA8aW5wdXQgLz5cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgZm9yIGZhbHNleSB0ZXN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHRyZWVGaWx0ZXIodHJlZSwgKCkgPT4gZmFsc2UpLmxlbmd0aCkudG8uZXF1YWwoMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZnVsbCBhcnJheSBmb3IgdHJ1dGh5IHRlc3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodHJlZUZpbHRlcih0cmVlLCAoKSA9PiB0cnVlKS5sZW5ndGgpLnRvLmVxdWFsKDUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaWx0ZXIgZm9yIHRydXRoaW5lc3MnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodHJlZUZpbHRlcih0cmVlLCBub2RlID0+IG5vZGUudHlwZSA9PT0gJ25hdicpLmxlbmd0aCkudG8uZXF1YWwoMSk7XG4gICAgICBleHBlY3QodHJlZUZpbHRlcih0cmVlLCBub2RlID0+IG5vZGUudHlwZSA9PT0gJ2J1dHRvbicpLmxlbmd0aCkudG8uZXF1YWwoMik7XG4gICAgfSk7XG5cbiAgfSk7XG5cbn0pO1xuIl19 |