@pie-lib/editable-html-tip-tap 2.1.11 → 2.2.0-beta.1
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 +0 -84
- package/lib/__tests__/EditableHtml.test.js +831 -0
- package/lib/__tests__/EditableHtml.test.js.map +1 -0
- package/lib/__tests__/constants.test.js +21 -0
- package/lib/__tests__/constants.test.js.map +1 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js.map +1 -0
- package/lib/__tests__/extensions.test.js +209 -0
- package/lib/__tests__/extensions.test.js.map +1 -0
- package/lib/__tests__/index.test.js +250 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/size-utils.test.js.map +1 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/__tests__/theme.test.js.map +1 -0
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/AltDialog.test.js.map +1 -0
- package/lib/components/__tests__/CharacterPicker.test.js +455 -0
- package/lib/components/__tests__/CharacterPicker.test.js.map +1 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/CssIcon.test.js.map +1 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
- package/lib/components/__tests__/DragInTheBlank.test.js.map +1 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +1 -0
- package/lib/components/__tests__/ImageToolbar.test.js +185 -0
- package/lib/components/__tests__/ImageToolbar.test.js.map +1 -0
- package/lib/components/__tests__/InlineDropdown.test.js +839 -0
- package/lib/components/__tests__/InlineDropdown.test.js.map +1 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
- package/lib/components/__tests__/InsertImageHandler.test.js.map +1 -0
- package/lib/components/__tests__/MediaDialog.test.js +433 -0
- package/lib/components/__tests__/MediaDialog.test.js.map +1 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaToolbar.test.js.map +1 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MediaWrapper.test.js.map +1 -0
- package/lib/components/__tests__/MenuBar.test.js +502 -0
- package/lib/components/__tests__/MenuBar.test.js.map +1 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/RespArea.test.js.map +1 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TableIcons.test.js.map +1 -0
- package/lib/components/__tests__/TextAlign.test.js +209 -0
- package/lib/components/__tests__/TextAlign.test.js.map +1 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/TiptapContainer.test.js.map +1 -0
- package/lib/components/__tests__/characterUtils.test.js +178 -0
- package/lib/components/__tests__/characterUtils.test.js.map +1 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/choice.test.js.map +1 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/custom-popper.test.js.map +1 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/done-button.test.js.map +1 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +1 -0
- package/lib/components/respArea/MathTemplated.js +2 -2
- package/lib/components/respArea/MathTemplated.js.map +1 -1
- package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
- package/lib/components/respArea/__tests__/MathTemplated.test.js.map +1 -0
- package/lib/extensions/__tests__/css.test.js +214 -0
- package/lib/extensions/__tests__/css.test.js.map +1 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +1 -0
- package/lib/extensions/__tests__/divNode.test.js +108 -0
- package/lib/extensions/__tests__/divNode.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
- package/lib/extensions/__tests__/extended-list-item.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table.test.js +200 -0
- package/lib/extensions/__tests__/extended-table.test.js.map +1 -0
- package/lib/extensions/__tests__/image-component.test.js +432 -0
- package/lib/extensions/__tests__/image-component.test.js.map +1 -0
- package/lib/extensions/__tests__/image.test.js +313 -0
- package/lib/extensions/__tests__/image.test.js.map +1 -0
- package/lib/extensions/__tests__/math.test.js +1399 -0
- package/lib/extensions/__tests__/math.test.js.map +1 -0
- package/lib/extensions/__tests__/media-node-view.test.js +307 -0
- package/lib/extensions/__tests__/media-node-view.test.js.map +1 -0
- package/lib/extensions/__tests__/media.test.js +292 -0
- package/lib/extensions/__tests__/media.test.js.map +1 -0
- package/lib/extensions/__tests__/responseArea.test.js +736 -0
- package/lib/extensions/__tests__/responseArea.test.js.map +1 -0
- package/lib/utils/__tests__/helper.test.js +107 -0
- package/lib/utils/__tests__/helper.test.js.map +1 -0
- package/lib/utils/__tests__/toolbar.test.js +38 -0
- package/lib/utils/__tests__/toolbar.test.js.map +1 -0
- package/package.json +7 -7
- package/src/components/respArea/MathTemplated.jsx +1 -1
- package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
7
|
+
var _extendedTable = _interopRequireWildcard(require("../extended-table"));
|
|
8
|
+
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); }
|
|
9
|
+
var mockTableViewState = {
|
|
10
|
+
updateReturns: true
|
|
11
|
+
};
|
|
12
|
+
jest.mock('@tiptap/extension-table', function () {
|
|
13
|
+
return {
|
|
14
|
+
Table: {
|
|
15
|
+
extend: jest.fn(function (config) {
|
|
16
|
+
return config;
|
|
17
|
+
})
|
|
18
|
+
},
|
|
19
|
+
TableView: /*#__PURE__*/function () {
|
|
20
|
+
function TableView() {
|
|
21
|
+
(0, _classCallCheck2["default"])(this, TableView);
|
|
22
|
+
this.table = {
|
|
23
|
+
style: {
|
|
24
|
+
setProperty: jest.fn()
|
|
25
|
+
},
|
|
26
|
+
setAttribute: jest.fn()
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return (0, _createClass2["default"])(TableView, [{
|
|
30
|
+
key: "update",
|
|
31
|
+
value: function update() {
|
|
32
|
+
return mockTableViewState.updateReturns;
|
|
33
|
+
}
|
|
34
|
+
}]);
|
|
35
|
+
}()
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
describe('ExtendedTable', function () {
|
|
39
|
+
beforeEach(function () {
|
|
40
|
+
mockTableViewState.updateReturns = true;
|
|
41
|
+
});
|
|
42
|
+
describe('applyPresentationToTableElement', function () {
|
|
43
|
+
it('sets default border and theme styles', function () {
|
|
44
|
+
var table = document.createElement('table');
|
|
45
|
+
var setProperty = jest.spyOn(table.style, 'setProperty');
|
|
46
|
+
(0, _extendedTable.applyPresentationToTableElement)(table, {});
|
|
47
|
+
expect(table.getAttribute('border')).toBe('1');
|
|
48
|
+
expect(setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
|
|
49
|
+
expect(setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
|
|
50
|
+
setProperty.mockRestore();
|
|
51
|
+
});
|
|
52
|
+
it('uses explicit border from attrs', function () {
|
|
53
|
+
var table = document.createElement('table');
|
|
54
|
+
(0, _extendedTable.applyPresentationToTableElement)(table, {
|
|
55
|
+
border: '0'
|
|
56
|
+
});
|
|
57
|
+
expect(table.getAttribute('border')).toBe('0');
|
|
58
|
+
});
|
|
59
|
+
it('treats empty border as default', function () {
|
|
60
|
+
var table = document.createElement('table');
|
|
61
|
+
(0, _extendedTable.applyPresentationToTableElement)(table, {
|
|
62
|
+
border: ''
|
|
63
|
+
});
|
|
64
|
+
expect(table.getAttribute('border')).toBe('1');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('ExtendedTableView', function () {
|
|
68
|
+
it('applies presentation after construction', function () {
|
|
69
|
+
var node = {
|
|
70
|
+
attrs: {
|
|
71
|
+
border: '2'
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var view = new _extendedTable.ExtendedTableView(node, 25);
|
|
75
|
+
expect(view.table.setAttribute).toHaveBeenCalledWith('border', '2');
|
|
76
|
+
expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
|
|
77
|
+
expect(view.table.style.setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
|
|
78
|
+
});
|
|
79
|
+
it('reapplies presentation when super.update returns true', function () {
|
|
80
|
+
var view = new _extendedTable.ExtendedTableView({
|
|
81
|
+
attrs: {
|
|
82
|
+
border: '1'
|
|
83
|
+
}
|
|
84
|
+
}, 25);
|
|
85
|
+
view.table.setAttribute.mockClear();
|
|
86
|
+
view.table.style.setProperty.mockClear();
|
|
87
|
+
view.update({
|
|
88
|
+
attrs: {
|
|
89
|
+
border: '0'
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
expect(view.table.setAttribute).toHaveBeenCalledWith('border', '0');
|
|
93
|
+
expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
|
|
94
|
+
expect(view.table.style.setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
|
|
95
|
+
});
|
|
96
|
+
it('does not reapply presentation when super.update returns false', function () {
|
|
97
|
+
mockTableViewState.updateReturns = false;
|
|
98
|
+
var view = new _extendedTable.ExtendedTableView({
|
|
99
|
+
attrs: {
|
|
100
|
+
border: '1'
|
|
101
|
+
}
|
|
102
|
+
}, 25);
|
|
103
|
+
view.table.setAttribute.mockClear();
|
|
104
|
+
view.table.style.setProperty.mockClear();
|
|
105
|
+
var ok = view.update({
|
|
106
|
+
attrs: {
|
|
107
|
+
border: '0'
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
expect(ok).toBe(false);
|
|
111
|
+
expect(view.table.setAttribute).not.toHaveBeenCalled();
|
|
112
|
+
expect(view.table.style.setProperty).not.toHaveBeenCalled();
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('addOptions', function () {
|
|
116
|
+
it('enables resizable table view with zero handle width for colgroup sync', function () {
|
|
117
|
+
var options = _extendedTable["default"].addOptions();
|
|
118
|
+
expect(options.resizable).toBe(true);
|
|
119
|
+
expect(options.handleWidth).toBe(0);
|
|
120
|
+
expect(options.View).toBe(_extendedTable.ExtendedTableView);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('addAttributes', function () {
|
|
124
|
+
it('returns border attribute with default value', function () {
|
|
125
|
+
var attributes = _extendedTable["default"].addAttributes();
|
|
126
|
+
expect(attributes).toHaveProperty('border');
|
|
127
|
+
expect(attributes.border).toEqual({
|
|
128
|
+
"default": '1'
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('renderHTML', function () {
|
|
133
|
+
it('renders table with default border', function () {
|
|
134
|
+
var props = {
|
|
135
|
+
HTMLAttributes: {}
|
|
136
|
+
};
|
|
137
|
+
var mockParent = jest.fn(function () {
|
|
138
|
+
return ['table', {
|
|
139
|
+
style: ''
|
|
140
|
+
}];
|
|
141
|
+
});
|
|
142
|
+
var context = {
|
|
143
|
+
parent: mockParent
|
|
144
|
+
};
|
|
145
|
+
var result = _extendedTable["default"].renderHTML.call(context, props);
|
|
146
|
+
expect(mockParent).toHaveBeenCalledWith(props);
|
|
147
|
+
expect(result[0]).toBe('table');
|
|
148
|
+
expect(result[1]).toHaveProperty('style');
|
|
149
|
+
});
|
|
150
|
+
it('renders table with custom border', function () {
|
|
151
|
+
var props = {
|
|
152
|
+
HTMLAttributes: {
|
|
153
|
+
border: '2'
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var mockParent = jest.fn(function () {
|
|
157
|
+
return ['table', {
|
|
158
|
+
style: ''
|
|
159
|
+
}];
|
|
160
|
+
});
|
|
161
|
+
var context = {
|
|
162
|
+
parent: mockParent
|
|
163
|
+
};
|
|
164
|
+
var result = _extendedTable["default"].renderHTML.call(context, props);
|
|
165
|
+
expect(result[1].border).toBe('2');
|
|
166
|
+
});
|
|
167
|
+
it('handles styles ending with semicolon', function () {
|
|
168
|
+
var props = {
|
|
169
|
+
HTMLAttributes: {}
|
|
170
|
+
};
|
|
171
|
+
var mockParent = jest.fn(function () {
|
|
172
|
+
return ['table', {
|
|
173
|
+
style: 'padding: 5px;'
|
|
174
|
+
}];
|
|
175
|
+
});
|
|
176
|
+
var context = {
|
|
177
|
+
parent: mockParent
|
|
178
|
+
};
|
|
179
|
+
var result = _extendedTable["default"].renderHTML.call(context, props);
|
|
180
|
+
expect(result[1].style).toContain('padding: 5px;');
|
|
181
|
+
});
|
|
182
|
+
it('includes CSS custom properties', function () {
|
|
183
|
+
var props = {
|
|
184
|
+
HTMLAttributes: {}
|
|
185
|
+
};
|
|
186
|
+
var mockParent = jest.fn(function () {
|
|
187
|
+
return ['table', {
|
|
188
|
+
style: ''
|
|
189
|
+
}];
|
|
190
|
+
});
|
|
191
|
+
var context = {
|
|
192
|
+
parent: mockParent
|
|
193
|
+
};
|
|
194
|
+
var result = _extendedTable["default"].renderHTML.call(context, props);
|
|
195
|
+
expect(result[1].style).toContain('color: var(--pie-text, black)');
|
|
196
|
+
expect(result[1].style).toContain('background-color: var(--pie-background, rgba(255, 255, 255))');
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=extended-table.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extended-table.test.js","names":["_extendedTable","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","mockTableViewState","updateReturns","jest","mock","Table","extend","fn","config","TableView","_classCallCheck2","table","style","setProperty","setAttribute","_createClass2","key","value","update","describe","beforeEach","it","document","createElement","spyOn","applyPresentationToTableElement","expect","getAttribute","toBe","toHaveBeenCalledWith","mockRestore","border","node","attrs","view","ExtendedTableView","mockClear","ok","not","toHaveBeenCalled","options","ExtendedTable","addOptions","resizable","handleWidth","View","attributes","addAttributes","toHaveProperty","toEqual","props","HTMLAttributes","mockParent","context","parent","result","renderHTML","toContain"],"sources":["../../../src/extensions/__tests__/extended-table.test.js"],"sourcesContent":["import ExtendedTable, { applyPresentationToTableElement, ExtendedTableView } from '../extended-table';\n\nconst mockTableViewState = { updateReturns: true };\n\njest.mock('@tiptap/extension-table', () => ({\n Table: {\n extend: jest.fn((config) => config),\n },\n TableView: class TableView {\n constructor() {\n this.table = {\n style: { setProperty: jest.fn() },\n setAttribute: jest.fn(),\n };\n }\n\n update() {\n return mockTableViewState.updateReturns;\n }\n },\n}));\n\ndescribe('ExtendedTable', () => {\n beforeEach(() => {\n mockTableViewState.updateReturns = true;\n });\n\n describe('applyPresentationToTableElement', () => {\n it('sets default border and theme styles', () => {\n const table = document.createElement('table');\n const setProperty = jest.spyOn(table.style, 'setProperty');\n\n applyPresentationToTableElement(table, {});\n\n expect(table.getAttribute('border')).toBe('1');\n expect(setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');\n expect(setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');\n setProperty.mockRestore();\n });\n\n it('uses explicit border from attrs', () => {\n const table = document.createElement('table');\n applyPresentationToTableElement(table, { border: '0' });\n\n expect(table.getAttribute('border')).toBe('0');\n });\n\n it('treats empty border as default', () => {\n const table = document.createElement('table');\n applyPresentationToTableElement(table, { border: '' });\n\n expect(table.getAttribute('border')).toBe('1');\n });\n });\n\n describe('ExtendedTableView', () => {\n it('applies presentation after construction', () => {\n const node = { attrs: { border: '2' } };\n const view = new ExtendedTableView(node, 25);\n\n expect(view.table.setAttribute).toHaveBeenCalledWith('border', '2');\n expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');\n expect(view.table.style.setProperty).toHaveBeenCalledWith(\n 'background-color',\n 'var(--pie-background, rgba(255, 255, 255))',\n );\n });\n\n it('reapplies presentation when super.update returns true', () => {\n const view = new ExtendedTableView({ attrs: { border: '1' } }, 25);\n view.table.setAttribute.mockClear();\n view.table.style.setProperty.mockClear();\n\n view.update({ attrs: { border: '0' } });\n\n expect(view.table.setAttribute).toHaveBeenCalledWith('border', '0');\n expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');\n expect(view.table.style.setProperty).toHaveBeenCalledWith(\n 'background-color',\n 'var(--pie-background, rgba(255, 255, 255))',\n );\n });\n\n it('does not reapply presentation when super.update returns false', () => {\n mockTableViewState.updateReturns = false;\n const view = new ExtendedTableView({ attrs: { border: '1' } }, 25);\n view.table.setAttribute.mockClear();\n view.table.style.setProperty.mockClear();\n\n const ok = view.update({ attrs: { border: '0' } });\n\n expect(ok).toBe(false);\n expect(view.table.setAttribute).not.toHaveBeenCalled();\n expect(view.table.style.setProperty).not.toHaveBeenCalled();\n });\n });\n\n describe('addOptions', () => {\n it('enables resizable table view with zero handle width for colgroup sync', () => {\n const options = ExtendedTable.addOptions();\n expect(options.resizable).toBe(true);\n expect(options.handleWidth).toBe(0);\n expect(options.View).toBe(ExtendedTableView);\n });\n });\n\n describe('addAttributes', () => {\n it('returns border attribute with default value', () => {\n const attributes = ExtendedTable.addAttributes();\n expect(attributes).toHaveProperty('border');\n expect(attributes.border).toEqual({ default: '1' });\n });\n });\n\n describe('renderHTML', () => {\n it('renders table with default border', () => {\n const props = {\n HTMLAttributes: {},\n };\n\n const mockParent = jest.fn(() => ['table', { style: '' }]);\n\n const context = {\n parent: mockParent,\n };\n\n const result = ExtendedTable.renderHTML.call(context, props);\n\n expect(mockParent).toHaveBeenCalledWith(props);\n expect(result[0]).toBe('table');\n expect(result[1]).toHaveProperty('style');\n });\n\n it('renders table with custom border', () => {\n const props = {\n HTMLAttributes: { border: '2' },\n };\n\n const mockParent = jest.fn(() => ['table', { style: '' }]);\n\n const context = {\n parent: mockParent,\n };\n\n const result = ExtendedTable.renderHTML.call(context, props);\n\n expect(result[1].border).toBe('2');\n });\n\n it('handles styles ending with semicolon', () => {\n const props = {\n HTMLAttributes: {},\n };\n\n const mockParent = jest.fn(() => ['table', { style: 'padding: 5px;' }]);\n\n const context = {\n parent: mockParent,\n };\n\n const result = ExtendedTable.renderHTML.call(context, props);\n\n expect(result[1].style).toContain('padding: 5px;');\n });\n\n it('includes CSS custom properties', () => {\n const props = {\n HTMLAttributes: {},\n };\n\n const mockParent = jest.fn(() => ['table', { style: '' }]);\n\n const context = {\n parent: mockParent,\n };\n\n const result = ExtendedTable.renderHTML.call(context, props);\n\n expect(result[1].style).toContain('color: var(--pie-text, black)');\n expect(result[1].style).toContain('background-color: var(--pie-background, rgba(255, 255, 255))');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
7
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _react2 = require("@testing-library/react");
|
|
10
|
+
var _imageComponent = _interopRequireDefault(require("../image-component"));
|
|
11
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
12
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
+
jest.mock('@tiptap/react', function () {
|
|
14
|
+
return {
|
|
15
|
+
NodeViewWrapper: function NodeViewWrapper(_ref) {
|
|
16
|
+
var children = _ref.children;
|
|
17
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
18
|
+
"data-testid": "node-view-wrapper"
|
|
19
|
+
}, children);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
jest.mock('../../components/image/InsertImageHandler', function () {
|
|
24
|
+
return {
|
|
25
|
+
__esModule: true,
|
|
26
|
+
"default": jest.fn()
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
jest.mock('../../components/image/ImageToolbar', function () {
|
|
30
|
+
return {
|
|
31
|
+
__esModule: true,
|
|
32
|
+
"default": function _default(_ref2) {
|
|
33
|
+
var onChange = _ref2.onChange,
|
|
34
|
+
alignment = _ref2.alignment,
|
|
35
|
+
alt = _ref2.alt;
|
|
36
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
37
|
+
"data-testid": "image-toolbar"
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
39
|
+
onClick: function onClick() {
|
|
40
|
+
return onChange({
|
|
41
|
+
alignment: 'center'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}, "Center"), /*#__PURE__*/_react["default"].createElement("span", null, alignment), /*#__PURE__*/_react["default"].createElement("span", null, alt));
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
jest.mock('../custom-toolbar-wrapper', function () {
|
|
49
|
+
return {
|
|
50
|
+
__esModule: true,
|
|
51
|
+
"default": function _default(_ref3) {
|
|
52
|
+
var children = _ref3.children,
|
|
53
|
+
onDone = _ref3.onDone;
|
|
54
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
55
|
+
"data-testid": "custom-toolbar-wrapper"
|
|
56
|
+
}, children, /*#__PURE__*/_react["default"].createElement("button", {
|
|
57
|
+
onClick: onDone,
|
|
58
|
+
"data-testid": "done-button"
|
|
59
|
+
}, "Done"));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
describe('ImageComponent', function () {
|
|
64
|
+
var MOCK_NODE_POS = 7;
|
|
65
|
+
var createMockEditor = function createMockEditor() {
|
|
66
|
+
var selection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
|
67
|
+
from: 0,
|
|
68
|
+
to: 1
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
_tiptapContainerEl: document.body,
|
|
72
|
+
isEditable: true,
|
|
73
|
+
commands: {
|
|
74
|
+
updateAttributes: jest.fn(),
|
|
75
|
+
focus: jest.fn()
|
|
76
|
+
},
|
|
77
|
+
state: {
|
|
78
|
+
selection: selection,
|
|
79
|
+
doc: {
|
|
80
|
+
descendants: jest.fn(),
|
|
81
|
+
nodeAt: jest.fn()
|
|
82
|
+
},
|
|
83
|
+
tr: {
|
|
84
|
+
setNodeMarkup: jest.fn().mockReturnThis(),
|
|
85
|
+
"delete": jest.fn().mockReturnThis()
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
view: {
|
|
89
|
+
dispatch: jest.fn()
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
var mockEditor = createMockEditor();
|
|
94
|
+
var mockNode = {
|
|
95
|
+
type: {
|
|
96
|
+
name: 'imageUploadNode'
|
|
97
|
+
},
|
|
98
|
+
attrs: {
|
|
99
|
+
nodeKey: 'test-key-123',
|
|
100
|
+
src: 'test.jpg',
|
|
101
|
+
width: 100,
|
|
102
|
+
height: 100,
|
|
103
|
+
loaded: true,
|
|
104
|
+
percent: 100,
|
|
105
|
+
alt: 'Test image',
|
|
106
|
+
alignment: 'left',
|
|
107
|
+
deleteStatus: null
|
|
108
|
+
},
|
|
109
|
+
nodeSize: 1
|
|
110
|
+
};
|
|
111
|
+
var mockOptions = {
|
|
112
|
+
imageHandling: {
|
|
113
|
+
insertImageRequested: jest.fn(),
|
|
114
|
+
onDone: jest.fn(),
|
|
115
|
+
onDelete: jest.fn()
|
|
116
|
+
},
|
|
117
|
+
disableImageAlignmentButtons: false
|
|
118
|
+
};
|
|
119
|
+
var defaultProps = {
|
|
120
|
+
node: mockNode,
|
|
121
|
+
editor: mockEditor,
|
|
122
|
+
selected: false,
|
|
123
|
+
options: mockOptions,
|
|
124
|
+
attributes: {},
|
|
125
|
+
onFocus: jest.fn(),
|
|
126
|
+
getPos: jest.fn(function () {
|
|
127
|
+
return MOCK_NODE_POS;
|
|
128
|
+
})
|
|
129
|
+
};
|
|
130
|
+
beforeEach(function () {
|
|
131
|
+
jest.clearAllMocks();
|
|
132
|
+
mockEditor = createMockEditor();
|
|
133
|
+
defaultProps.editor = mockEditor;
|
|
134
|
+
defaultProps.getPos = jest.fn(function () {
|
|
135
|
+
return MOCK_NODE_POS;
|
|
136
|
+
});
|
|
137
|
+
mockEditor.state.doc.descendants.mockImplementation(function (cb) {
|
|
138
|
+
return cb(mockNode, 0);
|
|
139
|
+
});
|
|
140
|
+
mockEditor.state.doc.nodeAt.mockReturnValue(mockNode);
|
|
141
|
+
});
|
|
142
|
+
it('renders without crashing', function () {
|
|
143
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
144
|
+
getByTestId = _render.getByTestId;
|
|
145
|
+
expect(getByTestId('node-view-wrapper')).toBeInTheDocument();
|
|
146
|
+
});
|
|
147
|
+
it('renders image with correct src', function () {
|
|
148
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
149
|
+
container = _render2.container;
|
|
150
|
+
var img = container.querySelector('img');
|
|
151
|
+
expect(img).toBeInTheDocument();
|
|
152
|
+
expect(img.src).toContain('test.jpg');
|
|
153
|
+
});
|
|
154
|
+
it('renders image with correct dimensions', function () {
|
|
155
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
156
|
+
container = _render3.container;
|
|
157
|
+
var img = container.querySelector('img');
|
|
158
|
+
expect(img.style.width).toBe('100px');
|
|
159
|
+
expect(img.style.height).toBe('100px');
|
|
160
|
+
});
|
|
161
|
+
it('renders image with alt text', function () {
|
|
162
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
163
|
+
container = _render4.container;
|
|
164
|
+
var img = container.querySelector('img');
|
|
165
|
+
expect(img.alt).toBe('Test image');
|
|
166
|
+
});
|
|
167
|
+
it('does not show toolbar when not selected', function () {
|
|
168
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
169
|
+
selected: false
|
|
170
|
+
}))),
|
|
171
|
+
queryByTestId = _render5.queryByTestId;
|
|
172
|
+
expect(queryByTestId('image-toolbar')).not.toBeInTheDocument();
|
|
173
|
+
});
|
|
174
|
+
it('shows toolbar when selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
175
|
+
var _render6, getByTestId;
|
|
176
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
177
|
+
while (1) switch (_context.prev = _context.next) {
|
|
178
|
+
case 0:
|
|
179
|
+
_render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
180
|
+
selected: true
|
|
181
|
+
}))), getByTestId = _render6.getByTestId;
|
|
182
|
+
_context.next = 1;
|
|
183
|
+
return (0, _react2.waitFor)(function () {
|
|
184
|
+
expect(getByTestId('image-toolbar')).toBeInTheDocument();
|
|
185
|
+
});
|
|
186
|
+
case 1:
|
|
187
|
+
case "end":
|
|
188
|
+
return _context.stop();
|
|
189
|
+
}
|
|
190
|
+
}, _callee);
|
|
191
|
+
})));
|
|
192
|
+
it('applies loading opacity when image not loaded', function () {
|
|
193
|
+
var notLoadedNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
194
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
195
|
+
loaded: false
|
|
196
|
+
})
|
|
197
|
+
});
|
|
198
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
199
|
+
node: notLoadedNode
|
|
200
|
+
}))),
|
|
201
|
+
container = _render7.container;
|
|
202
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
203
|
+
expect(root).toHaveStyle({
|
|
204
|
+
opacity: 0.3
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
it('applies pending delete opacity', function () {
|
|
208
|
+
var pendingDeleteNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
209
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
210
|
+
deleteStatus: 'pending'
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
214
|
+
node: pendingDeleteNode
|
|
215
|
+
}))),
|
|
216
|
+
container = _render8.container;
|
|
217
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
218
|
+
expect(root).toHaveStyle({
|
|
219
|
+
opacity: 0.3
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
it('aligns image to left by default', function () {
|
|
223
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], defaultProps)),
|
|
224
|
+
container = _render9.container;
|
|
225
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
226
|
+
expect(root).toHaveStyle({
|
|
227
|
+
justifyContent: 'flex-start'
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
it('aligns image to center', function () {
|
|
231
|
+
var centerNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
232
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
233
|
+
alignment: 'center'
|
|
234
|
+
})
|
|
235
|
+
});
|
|
236
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
237
|
+
node: centerNode
|
|
238
|
+
}))),
|
|
239
|
+
container = _render0.container;
|
|
240
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
241
|
+
expect(root).toHaveStyle({
|
|
242
|
+
justifyContent: 'center'
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
it('aligns image to right', function () {
|
|
246
|
+
var rightNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
247
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
248
|
+
alignment: 'right'
|
|
249
|
+
})
|
|
250
|
+
});
|
|
251
|
+
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
252
|
+
node: rightNode
|
|
253
|
+
}))),
|
|
254
|
+
container = _render1.container;
|
|
255
|
+
var root = container.querySelector('[data-testid="node-view-wrapper"] > div');
|
|
256
|
+
expect(root).toHaveStyle({
|
|
257
|
+
justifyContent: 'flex-end'
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
it('does not call insertImageRequested when image already has src', function () {
|
|
261
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
262
|
+
selected: true
|
|
263
|
+
})));
|
|
264
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
265
|
+
});
|
|
266
|
+
it('does not call insertImageRequested for empty placeholder on mount when not selected', function () {
|
|
267
|
+
var placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
268
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
269
|
+
src: null,
|
|
270
|
+
loaded: false,
|
|
271
|
+
percent: null
|
|
272
|
+
})
|
|
273
|
+
});
|
|
274
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
275
|
+
node: placeholderNode,
|
|
276
|
+
selected: false
|
|
277
|
+
})));
|
|
278
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
279
|
+
});
|
|
280
|
+
it('calls insertImageRequested with editor and [node, pos] when empty placeholder is solely selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
281
|
+
var placeholderNode;
|
|
282
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
283
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
284
|
+
case 0:
|
|
285
|
+
placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
286
|
+
nodeSize: 1,
|
|
287
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
288
|
+
src: null,
|
|
289
|
+
loaded: false,
|
|
290
|
+
percent: null
|
|
291
|
+
})
|
|
292
|
+
});
|
|
293
|
+
mockEditor = createMockEditor({
|
|
294
|
+
from: 0,
|
|
295
|
+
to: 1
|
|
296
|
+
});
|
|
297
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
298
|
+
editor: mockEditor,
|
|
299
|
+
node: placeholderNode,
|
|
300
|
+
selected: true
|
|
301
|
+
})));
|
|
302
|
+
_context2.next = 1;
|
|
303
|
+
return (0, _react2.waitFor)(function () {
|
|
304
|
+
expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalled();
|
|
305
|
+
});
|
|
306
|
+
case 1:
|
|
307
|
+
expect(mockOptions.imageHandling.insertImageRequested).toHaveBeenCalledWith(mockEditor, [placeholderNode, MOCK_NODE_POS], expect.any(Function));
|
|
308
|
+
expect(defaultProps.getPos).toHaveBeenCalled();
|
|
309
|
+
case 2:
|
|
310
|
+
case "end":
|
|
311
|
+
return _context2.stop();
|
|
312
|
+
}
|
|
313
|
+
}, _callee2);
|
|
314
|
+
})));
|
|
315
|
+
it('does not call insertImageRequested when selection spans beyond the image node', function () {
|
|
316
|
+
var placeholderNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
317
|
+
nodeSize: 1,
|
|
318
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
319
|
+
src: null,
|
|
320
|
+
loaded: false,
|
|
321
|
+
percent: null
|
|
322
|
+
})
|
|
323
|
+
});
|
|
324
|
+
mockEditor = createMockEditor({
|
|
325
|
+
from: 0,
|
|
326
|
+
to: 5
|
|
327
|
+
});
|
|
328
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
329
|
+
editor: mockEditor,
|
|
330
|
+
node: placeholderNode,
|
|
331
|
+
selected: true
|
|
332
|
+
})));
|
|
333
|
+
expect(mockOptions.imageHandling.insertImageRequested).not.toHaveBeenCalled();
|
|
334
|
+
});
|
|
335
|
+
it('updates attributes through toolbar onChange', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
336
|
+
var _render10, getByTestId;
|
|
337
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
338
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
339
|
+
case 0:
|
|
340
|
+
_render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
341
|
+
selected: true
|
|
342
|
+
}))), getByTestId = _render10.getByTestId;
|
|
343
|
+
_context3.next = 1;
|
|
344
|
+
return (0, _react2.waitFor)(function () {
|
|
345
|
+
var centerButton = getByTestId('image-toolbar').querySelector('button');
|
|
346
|
+
_react2.fireEvent.click(centerButton);
|
|
347
|
+
});
|
|
348
|
+
case 1:
|
|
349
|
+
expect(mockEditor.state.tr.setNodeMarkup).toHaveBeenCalledWith(0, undefined, expect.objectContaining({
|
|
350
|
+
alignment: 'center'
|
|
351
|
+
}));
|
|
352
|
+
expect(mockEditor.view.dispatch).toHaveBeenCalled();
|
|
353
|
+
case 2:
|
|
354
|
+
case "end":
|
|
355
|
+
return _context3.stop();
|
|
356
|
+
}
|
|
357
|
+
}, _callee3);
|
|
358
|
+
})));
|
|
359
|
+
it('toolbar is shown when selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
360
|
+
var _render11, container, queryByTestId;
|
|
361
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
362
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
363
|
+
case 0:
|
|
364
|
+
_render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
365
|
+
selected: true
|
|
366
|
+
}))), container = _render11.container, queryByTestId = _render11.queryByTestId; // Wait for toolbar to potentially appear
|
|
367
|
+
_context4.next = 1;
|
|
368
|
+
return (0, _react2.waitFor)(function () {
|
|
369
|
+
// The toolbar might not be visible due to mocking but check if custom-toolbar-wrapper shows up
|
|
370
|
+
var toolbar = container.querySelector('[data-testid="custom-toolbar-wrapper"]');
|
|
371
|
+
// In a real test environment, the toolbar would be visible
|
|
372
|
+
// For now, just verify the component renders without errors when selected
|
|
373
|
+
expect(container).toBeInTheDocument();
|
|
374
|
+
});
|
|
375
|
+
case 1:
|
|
376
|
+
case "end":
|
|
377
|
+
return _context4.stop();
|
|
378
|
+
}
|
|
379
|
+
}, _callee4);
|
|
380
|
+
})));
|
|
381
|
+
it('respects maxImageWidth prop', function () {
|
|
382
|
+
var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
383
|
+
maxImageWidth: 500
|
|
384
|
+
});
|
|
385
|
+
var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], props)),
|
|
386
|
+
container = _render12.container;
|
|
387
|
+
expect(container).toBeInTheDocument();
|
|
388
|
+
});
|
|
389
|
+
it('respects maxImageHeight prop', function () {
|
|
390
|
+
var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
391
|
+
maxImageHeight: 800
|
|
392
|
+
});
|
|
393
|
+
var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], props)),
|
|
394
|
+
container = _render13.container;
|
|
395
|
+
expect(container).toBeInTheDocument();
|
|
396
|
+
});
|
|
397
|
+
it('handles missing alt attribute', function () {
|
|
398
|
+
var noAltNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
399
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
400
|
+
alt: undefined
|
|
401
|
+
})
|
|
402
|
+
});
|
|
403
|
+
var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
404
|
+
node: noAltNode
|
|
405
|
+
}))),
|
|
406
|
+
container = _render14.container;
|
|
407
|
+
var img = container.querySelector('img');
|
|
408
|
+
expect(img).toBeInTheDocument();
|
|
409
|
+
});
|
|
410
|
+
it('passes editor to imageHandling onDone when Done is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
411
|
+
var _render15, getByTestId;
|
|
412
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
413
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
414
|
+
case 0:
|
|
415
|
+
_render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageComponent["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
416
|
+
selected: true
|
|
417
|
+
}))), getByTestId = _render15.getByTestId;
|
|
418
|
+
_context5.next = 1;
|
|
419
|
+
return (0, _react2.waitFor)(function () {
|
|
420
|
+
expect(getByTestId('done-button')).toBeInTheDocument();
|
|
421
|
+
});
|
|
422
|
+
case 1:
|
|
423
|
+
_react2.fireEvent.click(getByTestId('done-button'));
|
|
424
|
+
expect(mockOptions.imageHandling.onDone).toHaveBeenCalledWith(mockEditor);
|
|
425
|
+
case 2:
|
|
426
|
+
case "end":
|
|
427
|
+
return _context5.stop();
|
|
428
|
+
}
|
|
429
|
+
}, _callee5);
|
|
430
|
+
})));
|
|
431
|
+
});
|
|
432
|
+
//# sourceMappingURL=image-component.test.js.map
|