@pie-lib/graphing-solution-set 3.2.0-next.2 → 3.2.0-next.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -31
- package/LICENSE.md +5 -0
- package/lib/axis/arrow.js +1 -1
- package/lib/axis/axes.js +1 -1
- package/lib/axis/index.js +1 -1
- package/lib/bg.js +1 -1
- package/lib/container/actions.js +1 -1
- package/lib/container/index.js +1 -1
- package/lib/container/marks.js +1 -1
- package/lib/container/middleware.js +1 -1
- package/lib/container/reducer.js +1 -1
- package/lib/coordinates-label.js +1 -1
- package/lib/graph-with-controls.js +1 -1
- package/lib/graph.js +1 -1
- package/lib/grid-setup.js +1 -1
- package/lib/grid.js +1 -1
- package/lib/index.js +1 -1
- package/lib/labels.js +1 -1
- package/lib/mark-label.js +1 -1
- package/lib/toggle-bar.js +1 -1
- package/lib/tool-menu.js +1 -1
- package/lib/tools/index.js +1 -1
- package/lib/tools/line/component.js +1 -1
- package/lib/tools/line/index.js +1 -1
- package/lib/tools/polygon/component.js +1 -1
- package/lib/tools/polygon/index.js +1 -1
- package/lib/tools/polygon/line.js +1 -1
- package/lib/tools/polygon/polygon.js +1 -1
- package/lib/tools/shared/arrow-head.js +1 -1
- package/lib/tools/shared/line/index.js +1 -1
- package/lib/tools/shared/line/line-path.js +1 -1
- package/lib/tools/shared/line/with-root-edge.js +1 -1
- package/lib/tools/shared/point/arrow-point.js +1 -1
- package/lib/tools/shared/point/arrow.js +1 -1
- package/lib/tools/shared/point/base-point.js +1 -1
- package/lib/tools/shared/point/index.js +1 -1
- package/lib/tools/shared/styles.js +1 -1
- package/lib/tools/shared/types.js +1 -1
- package/lib/undo-redo.js +1 -1
- package/lib/use-debounce.js +1 -1
- package/lib/utils.js +1 -1
- package/package.json +4 -4
- package/lib/__tests__/bg.test.js +0 -282
- package/lib/__tests__/coordinates-label.test.js +0 -276
- package/lib/__tests__/graph-with-controls.test.js +0 -256
- package/lib/__tests__/graph.test.js +0 -113
- package/lib/__tests__/grid-setup.test.js +0 -729
- package/lib/__tests__/grid.test.js +0 -29
- package/lib/__tests__/labels.test.js +0 -45
- package/lib/__tests__/mark-label.test.js +0 -133
- package/lib/__tests__/toggle-bar.test.js +0 -146
- package/lib/__tests__/tool-menu.test.js +0 -540
- package/lib/__tests__/undo-redo.test.js +0 -31
- package/lib/__tests__/use-debounce.test.js +0 -24
- package/lib/__tests__/utils.js +0 -70
- package/lib/__tests__/utils.test.js +0 -123
- package/lib/axis/__tests__/arrow.test.js +0 -60
- package/lib/axis/__tests__/axes.test.js +0 -160
- package/lib/container/__tests__/actions.test.js +0 -108
- package/lib/container/__tests__/index.test.js +0 -346
- package/lib/container/__tests__/marks.test.js +0 -259
- package/lib/container/__tests__/middleware.test.js +0 -244
- package/lib/container/__tests__/reducer.test.js +0 -450
- package/lib/tools/line/__tests__/component.test.js +0 -45
- package/lib/tools/polygon/__tests__/component.test.js +0 -501
- package/lib/tools/polygon/__tests__/index.test.js +0 -92
- package/lib/tools/polygon/__tests__/line.test.js +0 -30
- package/lib/tools/polygon/__tests__/polygon.test.js +0 -61
- package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
- package/lib/tools/shared/line/__tests__/index.test.js +0 -725
- package/lib/tools/shared/line/__tests__/line-path.test.js +0 -64
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -618
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
- package/lib/tools/shared/point/__tests__/arrow.test.js +0 -619
- package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
5
|
-
var _actions = require("../actions");
|
|
6
|
-
describe('container actions', function () {
|
|
7
|
-
describe('addMark', function () {
|
|
8
|
-
it('creates ADD_MARK action', function () {
|
|
9
|
-
var action = (0, _actions.addMark)();
|
|
10
|
-
expect(action).toEqual({
|
|
11
|
-
type: 'ADD_MARK'
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
it('creates action without parameters', function () {
|
|
15
|
-
var action = (0, _actions.addMark)();
|
|
16
|
-
expect(action.type).toBe('ADD_MARK');
|
|
17
|
-
expect(Object.keys(action)).toEqual(['type']);
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
describe('changeMarks', function () {
|
|
21
|
-
it('creates CHANGE_MARKS action with marks', function () {
|
|
22
|
-
var marks = [{
|
|
23
|
-
id: 1,
|
|
24
|
-
type: 'point'
|
|
25
|
-
}];
|
|
26
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
27
|
-
expect(action).toEqual({
|
|
28
|
-
type: 'CHANGE_MARKS',
|
|
29
|
-
marks: marks
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
it('creates action with empty marks array', function () {
|
|
33
|
-
var marks = [];
|
|
34
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
35
|
-
expect(action).toEqual({
|
|
36
|
-
type: 'CHANGE_MARKS',
|
|
37
|
-
marks: []
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
it('creates action with multiple marks', function () {
|
|
41
|
-
var marks = [{
|
|
42
|
-
id: 1,
|
|
43
|
-
type: 'point',
|
|
44
|
-
x: 1,
|
|
45
|
-
y: 2
|
|
46
|
-
}, {
|
|
47
|
-
id: 2,
|
|
48
|
-
type: 'line',
|
|
49
|
-
from: {
|
|
50
|
-
x: 0,
|
|
51
|
-
y: 0
|
|
52
|
-
},
|
|
53
|
-
to: {
|
|
54
|
-
x: 5,
|
|
55
|
-
y: 5
|
|
56
|
-
}
|
|
57
|
-
}];
|
|
58
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
59
|
-
expect(action.marks).toEqual(marks);
|
|
60
|
-
expect(action.marks.length).toBe(2);
|
|
61
|
-
});
|
|
62
|
-
it('creates action with null marks', function () {
|
|
63
|
-
var marks = null;
|
|
64
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
65
|
-
expect(action).toEqual({
|
|
66
|
-
type: 'CHANGE_MARKS',
|
|
67
|
-
marks: null
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
it('creates action with undefined marks', function () {
|
|
71
|
-
var marks = undefined;
|
|
72
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
73
|
-
expect(action).toEqual({
|
|
74
|
-
type: 'CHANGE_MARKS',
|
|
75
|
-
marks: undefined
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it('preserves mark properties', function () {
|
|
79
|
-
var marks = [{
|
|
80
|
-
id: 1,
|
|
81
|
-
type: 'point',
|
|
82
|
-
x: 10,
|
|
83
|
-
y: 20,
|
|
84
|
-
label: 'A',
|
|
85
|
-
correctness: {
|
|
86
|
-
value: 'correct'
|
|
87
|
-
}
|
|
88
|
-
}];
|
|
89
|
-
var action = (0, _actions.changeMarks)(marks);
|
|
90
|
-
expect(action.marks[0]).toEqual(marks[0]);
|
|
91
|
-
expect(action.marks[0].correctness).toBeDefined();
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe('action types', function () {
|
|
95
|
-
it('has consistent action type strings', function () {
|
|
96
|
-
var addMarkAction = (0, _actions.addMark)();
|
|
97
|
-
var changeMarksAction = (0, _actions.changeMarks)([]);
|
|
98
|
-
expect((0, _typeof2["default"])(addMarkAction.type)).toBe('string');
|
|
99
|
-
expect((0, _typeof2["default"])(changeMarksAction.type)).toBe('string');
|
|
100
|
-
});
|
|
101
|
-
it('has unique action types', function () {
|
|
102
|
-
var addMarkAction = (0, _actions.addMark)();
|
|
103
|
-
var changeMarksAction = (0, _actions.changeMarks)([]);
|
|
104
|
-
expect(addMarkAction.type).not.toBe(changeMarksAction.type);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9ucyIsInJlcXVpcmUiLCJkZXNjcmliZSIsIml0IiwiYWN0aW9uIiwiYWRkTWFyayIsImV4cGVjdCIsInRvRXF1YWwiLCJ0eXBlIiwidG9CZSIsIk9iamVjdCIsImtleXMiLCJtYXJrcyIsImlkIiwiY2hhbmdlTWFya3MiLCJ4IiwieSIsImZyb20iLCJ0byIsImxlbmd0aCIsInVuZGVmaW5lZCIsImxhYmVsIiwiY29ycmVjdG5lc3MiLCJ2YWx1ZSIsInRvQmVEZWZpbmVkIiwiYWRkTWFya0FjdGlvbiIsImNoYW5nZU1hcmtzQWN0aW9uIiwiX3R5cGVvZjIiLCJub3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGFpbmVyL19fdGVzdHNfXy9hY3Rpb25zLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkTWFyaywgY2hhbmdlTWFya3MgfSBmcm9tICcuLi9hY3Rpb25zJztcblxuZGVzY3JpYmUoJ2NvbnRhaW5lciBhY3Rpb25zJywgKCkgPT4ge1xuICBkZXNjcmliZSgnYWRkTWFyaycsICgpID0+IHtcbiAgICBpdCgnY3JlYXRlcyBBRERfTUFSSyBhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBhZGRNYXJrKCk7XG4gICAgICBleHBlY3QoYWN0aW9uKS50b0VxdWFsKHtcbiAgICAgICAgdHlwZTogJ0FERF9NQVJLJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZXMgYWN0aW9uIHdpdGhvdXQgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGFkZE1hcmsoKTtcbiAgICAgIGV4cGVjdChhY3Rpb24udHlwZSkudG9CZSgnQUREX01BUksnKTtcbiAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhhY3Rpb24pKS50b0VxdWFsKFsndHlwZSddKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NoYW5nZU1hcmtzJywgKCkgPT4ge1xuICAgIGl0KCdjcmVhdGVzIENIQU5HRV9NQVJLUyBhY3Rpb24gd2l0aCBtYXJrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW3sgaWQ6IDEsIHR5cGU6ICdwb2ludCcgfV07XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaGFuZ2VNYXJrcyhtYXJrcyk7XG5cbiAgICAgIGV4cGVjdChhY3Rpb24pLnRvRXF1YWwoe1xuICAgICAgICB0eXBlOiAnQ0hBTkdFX01BUktTJyxcbiAgICAgICAgbWFya3MsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGVzIGFjdGlvbiB3aXRoIGVtcHR5IG1hcmtzIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3MgPSBbXTtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGNoYW5nZU1hcmtzKG1hcmtzKTtcblxuICAgICAgZXhwZWN0KGFjdGlvbikudG9FcXVhbCh7XG4gICAgICAgIHR5cGU6ICdDSEFOR0VfTUFSS1MnLFxuICAgICAgICBtYXJrczogW10sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGVzIGFjdGlvbiB3aXRoIG11bHRpcGxlIG1hcmtzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3MgPSBbXG4gICAgICAgIHsgaWQ6IDEsIHR5cGU6ICdwb2ludCcsIHg6IDEsIHk6IDIgfSxcbiAgICAgICAgeyBpZDogMiwgdHlwZTogJ2xpbmUnLCBmcm9tOiB7IHg6IDAsIHk6IDAgfSwgdG86IHsgeDogNSwgeTogNSB9IH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgYWN0aW9uID0gY2hhbmdlTWFya3MobWFya3MpO1xuXG4gICAgICBleHBlY3QoYWN0aW9uLm1hcmtzKS50b0VxdWFsKG1hcmtzKTtcbiAgICAgIGV4cGVjdChhY3Rpb24ubWFya3MubGVuZ3RoKS50b0JlKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZXMgYWN0aW9uIHdpdGggbnVsbCBtYXJrcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gbnVsbDtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGNoYW5nZU1hcmtzKG1hcmtzKTtcblxuICAgICAgZXhwZWN0KGFjdGlvbikudG9FcXVhbCh7XG4gICAgICAgIHR5cGU6ICdDSEFOR0VfTUFSS1MnLFxuICAgICAgICBtYXJrczogbnVsbCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZXMgYWN0aW9uIHdpdGggdW5kZWZpbmVkIG1hcmtzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3MgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaGFuZ2VNYXJrcyhtYXJrcyk7XG5cbiAgICAgIGV4cGVjdChhY3Rpb24pLnRvRXF1YWwoe1xuICAgICAgICB0eXBlOiAnQ0hBTkdFX01BUktTJyxcbiAgICAgICAgbWFya3M6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZXNlcnZlcyBtYXJrIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIHR5cGU6ICdwb2ludCcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgeTogMjAsXG4gICAgICAgICAgbGFiZWw6ICdBJyxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgYWN0aW9uID0gY2hhbmdlTWFya3MobWFya3MpO1xuXG4gICAgICBleHBlY3QoYWN0aW9uLm1hcmtzWzBdKS50b0VxdWFsKG1hcmtzWzBdKTtcbiAgICAgIGV4cGVjdChhY3Rpb24ubWFya3NbMF0uY29ycmVjdG5lc3MpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY3Rpb24gdHlwZXMnLCAoKSA9PiB7XG4gICAgaXQoJ2hhcyBjb25zaXN0ZW50IGFjdGlvbiB0eXBlIHN0cmluZ3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRNYXJrQWN0aW9uID0gYWRkTWFyaygpO1xuICAgICAgY29uc3QgY2hhbmdlTWFya3NBY3Rpb24gPSBjaGFuZ2VNYXJrcyhbXSk7XG5cbiAgICAgIGV4cGVjdCh0eXBlb2YgYWRkTWFya0FjdGlvbi50eXBlKS50b0JlKCdzdHJpbmcnKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgY2hhbmdlTWFya3NBY3Rpb24udHlwZSkudG9CZSgnc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIHVuaXF1ZSBhY3Rpb24gdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRNYXJrQWN0aW9uID0gYWRkTWFyaygpO1xuICAgICAgY29uc3QgY2hhbmdlTWFya3NBY3Rpb24gPSBjaGFuZ2VNYXJrcyhbXSk7XG5cbiAgICAgIGV4cGVjdChhZGRNYXJrQWN0aW9uLnR5cGUpLm5vdC50b0JlKGNoYW5nZU1hcmtzQWN0aW9uLnR5cGUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0VBQ2xDQSxRQUFRLENBQUMsU0FBUyxFQUFFLFlBQU07SUFDeEJDLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxZQUFNO01BQ2xDLElBQU1DLE1BQU0sR0FBRyxJQUFBQyxnQkFBTyxFQUFDLENBQUM7TUFDeEJDLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDLENBQUNHLE9BQU8sQ0FBQztRQUNyQkMsSUFBSSxFQUFFO01BQ1IsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUZMLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxZQUFNO01BQzVDLElBQU1DLE1BQU0sR0FBRyxJQUFBQyxnQkFBTyxFQUFDLENBQUM7TUFDeEJDLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDSSxJQUFJLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQztNQUNwQ0gsTUFBTSxDQUFDSSxNQUFN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
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
6
|
-
var _react = _interopRequireDefault(require("react"));
|
|
7
|
-
var _testUtils = require("@pie-lib/test-utils");
|
|
8
|
-
var _index = _interopRequireWildcard(require("../index"));
|
|
9
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
10
|
-
jest.mock('../../graph-with-controls', function () {
|
|
11
|
-
return function GraphWithControls(_ref) {
|
|
12
|
-
var marks = _ref.marks,
|
|
13
|
-
onChangeMarks = _ref.onChangeMarks,
|
|
14
|
-
onUndo = _ref.onUndo,
|
|
15
|
-
onRedo = _ref.onRedo,
|
|
16
|
-
onReset = _ref.onReset,
|
|
17
|
-
disabled = _ref.disabled;
|
|
18
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
19
|
-
"data-testid": "graph-with-controls"
|
|
20
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
21
|
-
"data-testid": "marks-count"
|
|
22
|
-
}, (marks === null || marks === void 0 ? void 0 : marks.length) || 0), disabled && /*#__PURE__*/_react["default"].createElement("div", {
|
|
23
|
-
"data-testid": "disabled-indicator"
|
|
24
|
-
}, "Disabled"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
25
|
-
"data-testid": "change-marks",
|
|
26
|
-
onClick: function onClick() {
|
|
27
|
-
return onChangeMarks && onChangeMarks([{
|
|
28
|
-
id: 1
|
|
29
|
-
}]);
|
|
30
|
-
}
|
|
31
|
-
}, "Change"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
32
|
-
"data-testid": "undo",
|
|
33
|
-
onClick: onUndo
|
|
34
|
-
}, "Undo"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
35
|
-
"data-testid": "redo",
|
|
36
|
-
onClick: onRedo
|
|
37
|
-
}, "Redo"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
38
|
-
"data-testid": "reset",
|
|
39
|
-
onClick: onReset
|
|
40
|
-
}, "Reset"));
|
|
41
|
-
};
|
|
42
|
-
});
|
|
43
|
-
jest.mock('@pie-lib/drag', function () {
|
|
44
|
-
return {
|
|
45
|
-
DragProvider: function DragProvider(_ref2) {
|
|
46
|
-
var children = _ref2.children;
|
|
47
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
48
|
-
"data-testid": "drag-provider"
|
|
49
|
-
}, children);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
});
|
|
53
|
-
describe('Container Root Component', function () {
|
|
54
|
-
var defaultProps = {
|
|
55
|
-
marks: [],
|
|
56
|
-
onChangeMarks: jest.fn()
|
|
57
|
-
};
|
|
58
|
-
var renderComponent = function renderComponent() {
|
|
59
|
-
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
60
|
-
return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], (0, _extends2["default"])({}, defaultProps, props)));
|
|
61
|
-
};
|
|
62
|
-
describe('rendering', function () {
|
|
63
|
-
it('renders without crashing', function () {
|
|
64
|
-
var _renderComponent = renderComponent(),
|
|
65
|
-
container = _renderComponent.container;
|
|
66
|
-
expect(container).toBeInTheDocument();
|
|
67
|
-
});
|
|
68
|
-
it('renders GraphWithControls', function () {
|
|
69
|
-
var _renderComponent2 = renderComponent(),
|
|
70
|
-
getByTestId = _renderComponent2.getByTestId;
|
|
71
|
-
expect(getByTestId('graph-with-controls')).toBeInTheDocument();
|
|
72
|
-
});
|
|
73
|
-
it('renders with Provider when no correctness set', function () {
|
|
74
|
-
var _renderComponent3 = renderComponent({
|
|
75
|
-
marks: [{
|
|
76
|
-
id: 1,
|
|
77
|
-
type: 'point'
|
|
78
|
-
}]
|
|
79
|
-
}),
|
|
80
|
-
container = _renderComponent3.container;
|
|
81
|
-
expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
|
|
82
|
-
});
|
|
83
|
-
it('renders directly when correctness is set', function () {
|
|
84
|
-
var marks = [{
|
|
85
|
-
id: 1,
|
|
86
|
-
type: 'point',
|
|
87
|
-
correctness: {
|
|
88
|
-
value: 'correct'
|
|
89
|
-
}
|
|
90
|
-
}];
|
|
91
|
-
var _renderComponent4 = renderComponent({
|
|
92
|
-
marks: marks
|
|
93
|
-
}),
|
|
94
|
-
getByTestId = _renderComponent4.getByTestId;
|
|
95
|
-
expect(getByTestId('graph-with-controls')).toBeInTheDocument();
|
|
96
|
-
expect(getByTestId('disabled-indicator')).toBeInTheDocument();
|
|
97
|
-
});
|
|
98
|
-
it('passes marks to GraphWithControls', function () {
|
|
99
|
-
var marks = [{
|
|
100
|
-
id: 1
|
|
101
|
-
}, {
|
|
102
|
-
id: 2
|
|
103
|
-
}];
|
|
104
|
-
var _renderComponent5 = renderComponent({
|
|
105
|
-
marks: marks
|
|
106
|
-
}),
|
|
107
|
-
getByTestId = _renderComponent5.getByTestId;
|
|
108
|
-
expect(getByTestId('marks-count')).toHaveTextContent('2');
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
describe('componentDidUpdate', function () {
|
|
112
|
-
it('updates store when marks prop changes', function () {
|
|
113
|
-
var onChangeMarks = jest.fn();
|
|
114
|
-
var _render = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
115
|
-
marks: [],
|
|
116
|
-
onChangeMarks: onChangeMarks
|
|
117
|
-
})),
|
|
118
|
-
rerender = _render.rerender;
|
|
119
|
-
var newMarks = [{
|
|
120
|
-
id: 1,
|
|
121
|
-
type: 'point'
|
|
122
|
-
}];
|
|
123
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
124
|
-
marks: newMarks,
|
|
125
|
-
onChangeMarks: onChangeMarks
|
|
126
|
-
}));
|
|
127
|
-
expect(onChangeMarks).not.toHaveBeenCalled();
|
|
128
|
-
});
|
|
129
|
-
it('does not update when marks are equal', function () {
|
|
130
|
-
var marks = [{
|
|
131
|
-
id: 1,
|
|
132
|
-
type: 'point'
|
|
133
|
-
}];
|
|
134
|
-
var onChangeMarks = jest.fn();
|
|
135
|
-
var _render2 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
136
|
-
marks: marks,
|
|
137
|
-
onChangeMarks: onChangeMarks
|
|
138
|
-
})),
|
|
139
|
-
rerender = _render2.rerender;
|
|
140
|
-
onChangeMarks.mockClear();
|
|
141
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
142
|
-
marks: marks,
|
|
143
|
-
onChangeMarks: onChangeMarks
|
|
144
|
-
}));
|
|
145
|
-
expect(onChangeMarks).not.toHaveBeenCalled();
|
|
146
|
-
});
|
|
147
|
-
it('handles marks changing from empty to non-empty', function () {
|
|
148
|
-
var onChangeMarks = jest.fn();
|
|
149
|
-
var _render3 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
150
|
-
marks: [],
|
|
151
|
-
onChangeMarks: onChangeMarks
|
|
152
|
-
})),
|
|
153
|
-
rerender = _render3.rerender;
|
|
154
|
-
var newMarks = [{
|
|
155
|
-
id: 1
|
|
156
|
-
}];
|
|
157
|
-
expect(function () {
|
|
158
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
159
|
-
marks: newMarks,
|
|
160
|
-
onChangeMarks: onChangeMarks
|
|
161
|
-
}));
|
|
162
|
-
}).not.toThrow();
|
|
163
|
-
});
|
|
164
|
-
it('handles marks changing from non-empty to empty', function () {
|
|
165
|
-
var onChangeMarks = jest.fn();
|
|
166
|
-
var _render4 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
167
|
-
marks: [{
|
|
168
|
-
id: 1
|
|
169
|
-
}],
|
|
170
|
-
onChangeMarks: onChangeMarks
|
|
171
|
-
})),
|
|
172
|
-
rerender = _render4.rerender;
|
|
173
|
-
expect(function () {
|
|
174
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
175
|
-
marks: [],
|
|
176
|
-
onChangeMarks: onChangeMarks
|
|
177
|
-
}));
|
|
178
|
-
}).not.toThrow();
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
describe('correctness handling', function () {
|
|
182
|
-
it('disables when any mark has correctness', function () {
|
|
183
|
-
var marks = [{
|
|
184
|
-
id: 1,
|
|
185
|
-
type: 'point'
|
|
186
|
-
}, {
|
|
187
|
-
id: 2,
|
|
188
|
-
type: 'point',
|
|
189
|
-
correctness: {
|
|
190
|
-
value: 'correct'
|
|
191
|
-
}
|
|
192
|
-
}];
|
|
193
|
-
var _renderComponent6 = renderComponent({
|
|
194
|
-
marks: marks
|
|
195
|
-
}),
|
|
196
|
-
getByTestId = _renderComponent6.getByTestId;
|
|
197
|
-
expect(getByTestId('disabled-indicator')).toBeInTheDocument();
|
|
198
|
-
});
|
|
199
|
-
it('renders without Provider when correctness is set', function () {
|
|
200
|
-
var marks = [{
|
|
201
|
-
id: 1,
|
|
202
|
-
correctness: {
|
|
203
|
-
value: 'correct'
|
|
204
|
-
}
|
|
205
|
-
}];
|
|
206
|
-
var _renderComponent7 = renderComponent({
|
|
207
|
-
marks: marks
|
|
208
|
-
}),
|
|
209
|
-
container = _renderComponent7.container;
|
|
210
|
-
expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
|
|
211
|
-
});
|
|
212
|
-
it('does not disable when no correctness is set', function () {
|
|
213
|
-
var marks = [{
|
|
214
|
-
id: 1,
|
|
215
|
-
type: 'point'
|
|
216
|
-
}, {
|
|
217
|
-
id: 2,
|
|
218
|
-
type: 'line'
|
|
219
|
-
}];
|
|
220
|
-
var _renderComponent8 = renderComponent({
|
|
221
|
-
marks: marks
|
|
222
|
-
}),
|
|
223
|
-
queryByTestId = _renderComponent8.queryByTestId;
|
|
224
|
-
expect(queryByTestId('disabled-indicator')).not.toBeInTheDocument();
|
|
225
|
-
});
|
|
226
|
-
it('handles correctness with different values', function () {
|
|
227
|
-
var marks = [{
|
|
228
|
-
id: 1,
|
|
229
|
-
correctness: {
|
|
230
|
-
value: 'incorrect'
|
|
231
|
-
}
|
|
232
|
-
}];
|
|
233
|
-
var _renderComponent9 = renderComponent({
|
|
234
|
-
marks: marks
|
|
235
|
-
}),
|
|
236
|
-
getByTestId = _renderComponent9.getByTestId;
|
|
237
|
-
expect(getByTestId('disabled-indicator')).toBeInTheDocument();
|
|
238
|
-
});
|
|
239
|
-
it('handles empty correctness object', function () {
|
|
240
|
-
var marks = [{
|
|
241
|
-
id: 1,
|
|
242
|
-
correctness: {}
|
|
243
|
-
}];
|
|
244
|
-
var _renderComponent0 = renderComponent({
|
|
245
|
-
marks: marks
|
|
246
|
-
}),
|
|
247
|
-
getByTestId = _renderComponent0.getByTestId;
|
|
248
|
-
expect(getByTestId('disabled-indicator')).toBeInTheDocument();
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
describe('props forwarding', function () {
|
|
252
|
-
it('forwards additional props to GraphWithControls', function () {
|
|
253
|
-
var _renderComponent1 = renderComponent({
|
|
254
|
-
className: 'custom-class',
|
|
255
|
-
size: {
|
|
256
|
-
width: 500,
|
|
257
|
-
height: 500
|
|
258
|
-
}
|
|
259
|
-
}),
|
|
260
|
-
container = _renderComponent1.container;
|
|
261
|
-
expect(container.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
|
|
262
|
-
});
|
|
263
|
-
it('does not forward onChangeMarks and marks to GraphWithControls', function () {
|
|
264
|
-
var _renderComponent10 = renderComponent({
|
|
265
|
-
marks: [{
|
|
266
|
-
id: 1
|
|
267
|
-
}],
|
|
268
|
-
onChangeMarks: jest.fn(),
|
|
269
|
-
otherProp: 'test'
|
|
270
|
-
}),
|
|
271
|
-
getByTestId = _renderComponent10.getByTestId;
|
|
272
|
-
expect(getByTestId('graph-with-controls')).toBeInTheDocument();
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
describe('edge cases', function () {
|
|
276
|
-
it('handles empty marks array', function () {
|
|
277
|
-
var _renderComponent11 = renderComponent({
|
|
278
|
-
marks: []
|
|
279
|
-
}),
|
|
280
|
-
container = _renderComponent11.container;
|
|
281
|
-
expect(container).toBeInTheDocument();
|
|
282
|
-
});
|
|
283
|
-
it('handles marks with complex structure', function () {
|
|
284
|
-
var marks = [{
|
|
285
|
-
id: 1,
|
|
286
|
-
type: 'line',
|
|
287
|
-
from: {
|
|
288
|
-
x: 0,
|
|
289
|
-
y: 0
|
|
290
|
-
},
|
|
291
|
-
to: {
|
|
292
|
-
x: 10,
|
|
293
|
-
y: 10
|
|
294
|
-
},
|
|
295
|
-
label: 'Line A',
|
|
296
|
-
correctness: {
|
|
297
|
-
value: 'correct',
|
|
298
|
-
label: 'Correct!'
|
|
299
|
-
}
|
|
300
|
-
}];
|
|
301
|
-
var _renderComponent12 = renderComponent({
|
|
302
|
-
marks: marks
|
|
303
|
-
}),
|
|
304
|
-
getByTestId = _renderComponent12.getByTestId;
|
|
305
|
-
expect(getByTestId('graph-with-controls')).toBeInTheDocument();
|
|
306
|
-
});
|
|
307
|
-
it('handles switching between correctness states', function () {
|
|
308
|
-
var _render5 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
309
|
-
marks: [{
|
|
310
|
-
id: 1
|
|
311
|
-
}],
|
|
312
|
-
onChangeMarks: jest.fn()
|
|
313
|
-
})),
|
|
314
|
-
rerender = _render5.rerender;
|
|
315
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
316
|
-
marks: [{
|
|
317
|
-
id: 1,
|
|
318
|
-
correctness: {
|
|
319
|
-
value: 'correct'
|
|
320
|
-
}
|
|
321
|
-
}],
|
|
322
|
-
onChangeMarks: jest.fn()
|
|
323
|
-
}));
|
|
324
|
-
rerender(/*#__PURE__*/_react["default"].createElement(_index["default"], {
|
|
325
|
-
marks: [{
|
|
326
|
-
id: 1
|
|
327
|
-
}],
|
|
328
|
-
onChangeMarks: jest.fn()
|
|
329
|
-
}));
|
|
330
|
-
expect(document.querySelector('[data-testid="graph-with-controls"]')).toBeInTheDocument();
|
|
331
|
-
});
|
|
332
|
-
});
|
|
333
|
-
});
|
|
334
|
-
describe('GraphContainer (connected component)', function () {
|
|
335
|
-
it('is a connected component', function () {
|
|
336
|
-
expect(_index.GraphContainer).toBeDefined();
|
|
337
|
-
expect(_index.GraphContainer.displayName).toContain('Connect');
|
|
338
|
-
});
|
|
339
|
-
it('maps state to props', function () {
|
|
340
|
-
expect(_index.GraphContainer).toBeDefined();
|
|
341
|
-
});
|
|
342
|
-
it('maps dispatch to props', function () {
|
|
343
|
-
expect(_index.GraphContainer).toBeDefined();
|
|
344
|
-
});
|
|
345
|
-
});
|
|
346
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90ZXN0VXRpbHMiLCJfaW5kZXgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiamVzdCIsIm1vY2siLCJHcmFwaFdpdGhDb250cm9scyIsIl9yZWYiLCJtYXJrcyIsIm9uQ2hhbmdlTWFya3MiLCJvblVuZG8iLCJvblJlZG8iLCJvblJlc2V0IiwiZGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwibGVuZ3RoIiwib25DbGljayIsImlkIiwiRHJhZ1Byb3ZpZGVyIiwiX3JlZjIiLCJjaGlsZHJlbiIsImRlc2NyaWJlIiwiZGVmYXVsdFByb3BzIiwiZm4iLCJyZW5kZXJDb21wb25lbnQiLCJwcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInJlbmRlciIsIl9leHRlbmRzMiIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsInRvQmVJblRoZURvY3VtZW50IiwiX3JlbmRlckNvbXBvbmVudDIiLCJnZXRCeVRlc3RJZCIsIl9yZW5kZXJDb21wb25lbnQzIiwidHlwZSIsInF1ZXJ5U2VsZWN0b3IiLCJjb3JyZWN0bmVzcyIsInZhbHVlIiwiX3JlbmRlckNvbXBvbmVudDQiLCJfcmVuZGVyQ29tcG9uZW50NSIsInRvSGF2ZVRleHRDb250ZW50IiwiX3JlbmRlciIsInJlcmVuZGVyIiwibmV3TWFya3MiLCJub3QiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwiX3JlbmRlcjIiLCJtb2NrQ2xlYXIiLCJfcmVuZGVyMyIsInRvVGhyb3ciLCJfcmVuZGVyNCIsIl9yZW5kZXJDb21wb25lbnQ2IiwiX3JlbmRlckNvbXBvbmVudDciLCJfcmVuZGVyQ29tcG9uZW50OCIsInF1ZXJ5QnlUZXN0SWQiLCJfcmVuZGVyQ29tcG9uZW50OSIsIl9yZW5kZXJDb21wb25lbnQwIiwiX3JlbmRlckNvbXBvbmVudDEiLCJjbGFzc05hbWUiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJfcmVuZGVyQ29tcG9uZW50MTAiLCJvdGhlclByb3AiLCJfcmVuZGVyQ29tcG9uZW50MTEiLCJmcm9tIiwieCIsInkiLCJ0byIsImxhYmVsIiwiX3JlbmRlckNvbXBvbmVudDEyIiwiX3JlbmRlcjUiLCJkb2N1bWVudCIsIkdyYXBoQ29udGFpbmVyIiwidG9CZURlZmluZWQiLCJkaXNwbGF5TmFtZSIsInRvQ29udGFpbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250YWluZXIvX190ZXN0c19fL2luZGV4LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAcGllLWxpYi90ZXN0LXV0aWxzJztcbmltcG9ydCBSb290LCB7IEdyYXBoQ29udGFpbmVyIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5qZXN0Lm1vY2soJy4uLy4uL2dyYXBoLXdpdGgtY29udHJvbHMnLCAoKSA9PiB7XG4gIHJldHVybiBmdW5jdGlvbiBHcmFwaFdpdGhDb250cm9scyh7IG1hcmtzLCBvbkNoYW5nZU1hcmtzLCBvblVuZG8sIG9uUmVkbywgb25SZXNldCwgZGlzYWJsZWQgfSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiZ3JhcGgtd2l0aC1jb250cm9sc1wiPlxuICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwibWFya3MtY291bnRcIj57bWFya3M/Lmxlbmd0aCB8fCAwfTwvZGl2PlxuICAgICAgICB7ZGlzYWJsZWQgJiYgPGRpdiBkYXRhLXRlc3RpZD1cImRpc2FibGVkLWluZGljYXRvclwiPkRpc2FibGVkPC9kaXY+fVxuICAgICAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwiY2hhbmdlLW1hcmtzXCIgb25DbGljaz17KCkgPT4gb25DaGFuZ2VNYXJrcyAmJiBvbkNoYW5nZU1hcmtzKFt7IGlkOiAxIH1dKX0+XG4gICAgICAgICAgQ2hhbmdlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGRhdGEtdGVzdGlkPVwidW5kb1wiIG9uQ2xpY2s9e29uVW5kb30+XG4gICAgICAgICAgVW5kb1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBkYXRhLXRlc3RpZD1cInJlZG9cIiBvbkNsaWNrPXtvblJlZG99PlxuICAgICAgICAgIFJlZG9cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gZGF0YS10ZXN0aWQ9XCJyZXNldFwiIG9uQ2xpY2s9e29uUmVzZXR9PlxuICAgICAgICAgIFJlc2V0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcbn0pO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2RyYWcnLCAoKSA9PiAoe1xuICBEcmFnUHJvdmlkZXI6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLXByb3ZpZGVyXCI+e2NoaWxkcmVufTwvZGl2Pixcbn0pKTtcblxuZGVzY3JpYmUoJ0NvbnRhaW5lciBSb290IENvbXBvbmVudCcsICgpID0+IHtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgIG1hcmtzOiBbXSxcbiAgICBvbkNoYW5nZU1hcmtzOiBqZXN0LmZuKCksXG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ29tcG9uZW50ID0gKHByb3BzID0ge30pID0+IHtcbiAgICByZXR1cm4gcmVuZGVyKDxSb290IHsuLi5kZWZhdWx0UHJvcHN9IHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBHcmFwaFdpdGhDb250cm9scycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuICAgICAgZXhwZWN0KGdldEJ5VGVzdElkKCdncmFwaC13aXRoLWNvbnRyb2xzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIFByb3ZpZGVyIHdoZW4gbm8gY29ycmVjdG5lc3Mgc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7IG1hcmtzOiBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XSB9KTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPVwiZ3JhcGgtd2l0aC1jb250cm9sc1wiXScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgZGlyZWN0bHkgd2hlbiBjb3JyZWN0bmVzcyBpcyBzZXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrcyA9IFt7IGlkOiAxLCB0eXBlOiAncG9pbnQnLCBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnIH0gfV07XG4gICAgICBjb25zdCB7IGdldEJ5VGVzdElkIH0gPSByZW5kZXJDb21wb25lbnQoeyBtYXJrcyB9KTtcblxuICAgICAgZXhwZWN0KGdldEJ5VGVzdElkKCdncmFwaC13aXRoLWNvbnRyb2xzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ2Rpc2FibGVkLWluZGljYXRvcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyBtYXJrcyB0byBHcmFwaFdpdGhDb250cm9scycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW3sgaWQ6IDEgfSwgeyBpZDogMiB9XTtcbiAgICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlckNvbXBvbmVudCh7IG1hcmtzIH0pO1xuICAgICAgZXhwZWN0KGdldEJ5VGVzdElkKCdtYXJrcy1jb3VudCcpKS50b0hhdmVUZXh0Q29udGVudCgnMicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29tcG9uZW50RGlkVXBkYXRlJywgKCkgPT4ge1xuICAgIGl0KCd1cGRhdGVzIHN0b3JlIHdoZW4gbWFya3MgcHJvcCBjaGFuZ2VzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2VNYXJrcyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcig8Um9vdCBtYXJrcz17W119IG9uQ2hhbmdlTWFya3M9e29uQ2hhbmdlTWFya3N9IC8+KTtcblxuICAgICAgY29uc3QgbmV3TWFya3MgPSBbeyBpZDogMSwgdHlwZTogJ3BvaW50JyB9XTtcbiAgICAgIHJlcmVuZGVyKDxSb290IG1hcmtzPXtuZXdNYXJrc30gb25DaGFuZ2VNYXJrcz17b25DaGFuZ2VNYXJrc30gLz4pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2VNYXJrcykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB1cGRhdGUgd2hlbiBtYXJrcyBhcmUgZXF1YWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrcyA9IFt7IGlkOiAxLCB0eXBlOiAncG9pbnQnIH1dO1xuICAgICAgY29uc3Qgb25DaGFuZ2VNYXJrcyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHsgcmVyZW5kZXIgfSA9IHJlbmRlcig8Um9vdCBtYXJrcz17bWFya3N9IG9uQ2hhbmdlTWFya3M9e29uQ2hhbmdlTWFya3N9IC8+KTtcblxuICAgICAgb25DaGFuZ2VNYXJrcy5tb2NrQ2xlYXIoKTtcblxuICAgICAgcmVyZW5kZXIoPFJvb3QgbWFya3M9e21hcmtzfSBvbkNoYW5nZU1hcmtzPXtvbkNoYW5nZU1hcmtzfSAvPik7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZU1hcmtzKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbWFya3MgY2hhbmdpbmcgZnJvbSBlbXB0eSB0byBub24tZW1wdHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBvbkNoYW5nZU1hcmtzID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgeyByZXJlbmRlciB9ID0gcmVuZGVyKDxSb290IG1hcmtzPXtbXX0gb25DaGFuZ2VNYXJrcz17b25DaGFuZ2VNYXJrc30gLz4pO1xuXG4gICAgICBjb25zdCBuZXdNYXJrcyA9IFt7IGlkOiAxIH1dO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICByZXJlbmRlcig8Um9vdCBtYXJrcz17bmV3TWFya3N9IG9uQ2hhbmdlTWFya3M9e29uQ2hhbmdlTWFya3N9IC8+KTtcbiAgICAgIH0pLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBtYXJrcyBjaGFuZ2luZyBmcm9tIG5vbi1lbXB0eSB0byBlbXB0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlTWFya3MgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoPFJvb3QgbWFya3M9e1t7IGlkOiAxIH1dfSBvbkNoYW5nZU1hcmtzPXtvbkNoYW5nZU1hcmtzfSAvPik7XG5cbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIHJlcmVuZGVyKDxSb290IG1hcmtzPXtbXX0gb25DaGFuZ2VNYXJrcz17b25DaGFuZ2VNYXJrc30gLz4pO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3RuZXNzIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgIGl0KCdkaXNhYmxlcyB3aGVuIGFueSBtYXJrIGhhcyBjb3JyZWN0bmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW1xuICAgICAgICB7IGlkOiAxLCB0eXBlOiAncG9pbnQnIH0sXG4gICAgICAgIHsgaWQ6IDIsIHR5cGU6ICdwb2ludCcsIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcgfSB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlckNvbXBvbmVudCh7IG1hcmtzIH0pO1xuXG4gICAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ2Rpc2FibGVkLWluZGljYXRvcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBQcm92aWRlciB3aGVuIGNvcnJlY3RuZXNzIGlzIHNldCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW3sgaWQ6IDEsIGNvcnJlY3RuZXNzOiB7IHZhbHVlOiAnY29ycmVjdCcgfSB9XTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBtYXJrcyB9KTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbZGF0YS10ZXN0aWQ9XCJncmFwaC13aXRoLWNvbnRyb2xzXCJdJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgZGlzYWJsZSB3aGVuIG5vIGNvcnJlY3RuZXNzIGlzIHNldCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW1xuICAgICAgICB7IGlkOiAxLCB0eXBlOiAncG9pbnQnIH0sXG4gICAgICAgIHsgaWQ6IDIsIHR5cGU6ICdsaW5lJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHsgcXVlcnlCeVRlc3RJZCB9ID0gcmVuZGVyQ29tcG9uZW50KHsgbWFya3MgfSk7XG5cbiAgICAgIGV4cGVjdChxdWVyeUJ5VGVzdElkKCdkaXNhYmxlZC1pbmRpY2F0b3InKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBjb3JyZWN0bmVzcyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJrcyA9IFt7IGlkOiAxLCBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2luY29ycmVjdCcgfSB9XTtcbiAgICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlckNvbXBvbmVudCh7IG1hcmtzIH0pO1xuXG4gICAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ2Rpc2FibGVkLWluZGljYXRvcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgZW1wdHkgY29ycmVjdG5lc3Mgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFya3MgPSBbeyBpZDogMSwgY29ycmVjdG5lc3M6IHt9IH1dO1xuICAgICAgY29uc3QgeyBnZXRCeVRlc3RJZCB9ID0gcmVuZGVyQ29tcG9uZW50KHsgbWFya3MgfSk7XG5cbiAgICAgIGV4cGVjdChnZXRCeVRlc3RJZCgnZGlzYWJsZWQtaW5kaWNhdG9yJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9wcyBmb3J3YXJkaW5nJywgKCkgPT4ge1xuICAgIGl0KCdmb3J3YXJkcyBhZGRpdGlvbmFsIHByb3BzIHRvIEdyYXBoV2l0aENvbnRyb2xzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCh7XG4gICAgICAgIGNsYXNzTmFtZTogJ2N1c3RvbS1jbGFzcycsXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDUwMCwgaGVpZ2h0OiA1MDAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRlc3RpZD1cImdyYXBoLXdpdGgtY29udHJvbHNcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBmb3J3YXJkIG9uQ2hhbmdlTWFya3MgYW5kIG1hcmtzIHRvIEdyYXBoV2l0aENvbnRyb2xzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBnZXRCeVRlc3RJZCB9ID0gcmVuZGVyQ29tcG9uZW50KHtcbiAgICAgICAgbWFya3M6IFt7IGlkOiAxIH1dLFxuICAgICAgICBvbkNoYW5nZU1hcmtzOiBqZXN0LmZuKCksXG4gICAgICAgIG90aGVyUHJvcDogJ3Rlc3QnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChnZXRCeVRlc3RJZCgnZ3JhcGgtd2l0aC1jb250cm9scycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWRnZSBjYXNlcycsICgpID0+IHtcbiAgICBpdCgnaGFuZGxlcyBlbXB0eSBtYXJrcyBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBtYXJrczogW10gfSk7XG4gICAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbWFya3Mgd2l0aCBjb21wbGV4IHN0cnVjdHVyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgICAgIGZyb206IHsgeDogMCwgeTogMCB9LFxuICAgICAgICAgIHRvOiB7IHg6IDEwLCB5OiAxMCB9LFxuICAgICAgICAgIGxhYmVsOiAnTGluZSBBJyxcbiAgICAgICAgICBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnLCBsYWJlbDogJ0NvcnJlY3QhJyB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHsgZ2V0QnlUZXN0SWQgfSA9IHJlbmRlckNvbXBvbmVudCh7IG1hcmtzIH0pO1xuICAgICAgZXhwZWN0KGdldEJ5VGVzdElkKCdncmFwaC13aXRoLWNvbnRyb2xzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBzd2l0Y2hpbmcgYmV0d2VlbiBjb3JyZWN0bmVzcyBzdGF0ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoPFJvb3QgbWFya3M9e1t7IGlkOiAxIH1dfSBvbkNoYW5nZU1hcmtzPXtqZXN0LmZuKCl9IC8+KTtcblxuICAgICAgcmVyZW5kZXIoPFJvb3QgbWFya3M9e1t7IGlkOiAxLCBjb3JyZWN0bmVzczogeyB2YWx1ZTogJ2NvcnJlY3QnIH0gfV19IG9uQ2hhbmdlTWFya3M9e2plc3QuZm4oKX0gLz4pO1xuXG4gICAgICByZXJlbmRlcig8Um9vdCBtYXJrcz17W3sgaWQ6IDEgfV19IG9uQ2hhbmdlTWFya3M9e2plc3QuZm4oKX0gLz4pO1xuXG4gICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPVwiZ3JhcGgtd2l0aC1jb250cm9sc1wiXScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnR3JhcGhDb250YWluZXIgKGNvbm5lY3RlZCBjb21wb25lbnQpJywgKCkgPT4ge1xuICBpdCgnaXMgYSBjb25uZWN0ZWQgY29tcG9uZW50JywgKCkgPT4ge1xuICAgIGV4cGVjdChHcmFwaENvbnRhaW5lcikudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoR3JhcGhDb250YWluZXIuZGlzcGxheU5hbWUpLnRvQ29udGFpbignQ29ubmVjdCcpO1xuICB9KTtcblxuICBpdCgnbWFwcyBzdGF0ZSB0byBwcm9wcycsICgpID0+IHtcbiAgICBleHBlY3QoR3JhcGhDb250YWluZXIpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIGRpc3BhdGNoIHRvIHByb3BzJywgKCkgPT4ge1xuICAgIGV4cGVjdChHcmFwaENvbnRhaW5lcikudG9CZURlZmluZWQoKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHVCQUFBLENBQUFILE9BQUE7QUFBZ0QsU0FBQUcsd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLHdCQUFBQyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxjQUFBTSxFQUFBLElBQUFkLENBQUEsZ0JBQUFjLEVBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxJQUFBRCxDQUFBLEdBQUFXLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFuQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxDQUFB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
|