@pie-lib/editable-html 13.0.7 → 13.1.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 -22
- package/lib/__tests__/editor-utils.test.js +164 -0
- package/lib/__tests__/editor-utils.test.js.map +1 -0
- package/lib/__tests__/serialization.test.js +241 -0
- package/lib/__tests__/serialization.test.js.map +1 -0
- package/lib/__tests__/utils.js +79 -0
- package/lib/__tests__/utils.js.map +1 -0
- package/lib/plugins/image/__tests__/component.test.js +96 -0
- package/lib/plugins/image/__tests__/component.test.js.map +1 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +131 -0
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js.map +1 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js +21 -0
- package/lib/plugins/image/__tests__/image-toolbar.test.js.map +1 -0
- package/lib/plugins/image/__tests__/index.test.js +86 -0
- package/lib/plugins/image/__tests__/index.test.js.map +1 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +112 -0
- package/lib/plugins/image/__tests__/insert-image-handler.test.js.map +1 -0
- package/lib/plugins/image/__tests__/mock-change.js +22 -0
- package/lib/plugins/image/__tests__/mock-change.js.map +1 -0
- package/lib/plugins/list/__tests__/index.test.js +63 -0
- package/lib/plugins/list/__tests__/index.test.js.map +1 -0
- package/lib/plugins/math/__tests__/index.test.js +284 -0
- package/lib/plugins/math/__tests__/index.test.js.map +1 -0
- package/lib/plugins/media/__tests__/index.test.js +69 -0
- package/lib/plugins/media/__tests__/index.test.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +93 -0
- package/lib/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js.map +1 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -0
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/math-templated/index.js +2 -2
- package/lib/plugins/respArea/math-templated/index.js.map +1 -1
- package/lib/plugins/table/__tests__/index.test.js +416 -0
- package/lib/plugins/table/__tests__/index.test.js.map +1 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js +81 -0
- package/lib/plugins/table/__tests__/table-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +153 -0
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +47 -0
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +112 -0
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +118 -0
- package/lib/plugins/toolbar/__tests__/toolbar.test.js.map +1 -0
- package/lib/shared/alert-dialog.js +68 -0
- package/package.json +7 -7
- package/src/__tests__/utils.js +1 -1
- package/src/plugins/respArea/drag-in-the-blank/__tests__/choice.test.js +71 -0
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +3 -0
- package/src/plugins/respArea/math-templated/index.jsx +1 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
|
7
|
+
var _react2 = require("@testing-library/react");
|
|
8
|
+
var _slate = require("slate");
|
|
9
|
+
var _component = require("../component");
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
describe('Image Component', function () {
|
|
13
|
+
var createImageNode = function createImageNode() {
|
|
14
|
+
var dataProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
15
|
+
return _slate.Block.fromJSON({
|
|
16
|
+
type: 'image',
|
|
17
|
+
data: _slate.Data.create(_objectSpread({
|
|
18
|
+
width: 50,
|
|
19
|
+
height: 50,
|
|
20
|
+
src: 'test-image.jpg'
|
|
21
|
+
}, dataProps))
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
var createMockEditor = function createMockEditor() {
|
|
25
|
+
return {
|
|
26
|
+
value: {},
|
|
27
|
+
change: jest.fn()
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
var defaultClasses = {
|
|
31
|
+
active: 'active',
|
|
32
|
+
loading: 'loading',
|
|
33
|
+
pendingDelete: 'pendingDelete'
|
|
34
|
+
};
|
|
35
|
+
var defaultProps = {
|
|
36
|
+
node: createImageNode(),
|
|
37
|
+
editor: createMockEditor(),
|
|
38
|
+
classes: defaultClasses,
|
|
39
|
+
onDelete: jest.fn()
|
|
40
|
+
};
|
|
41
|
+
it('renders correctly with default props', function () {
|
|
42
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, defaultProps)),
|
|
43
|
+
container = _render.container;
|
|
44
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
it('renders image with correct dimensions', function () {
|
|
47
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, defaultProps)),
|
|
48
|
+
container = _render2.container;
|
|
49
|
+
var img = container.querySelector('img');
|
|
50
|
+
expect(img).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
it('renders with custom width and height', function () {
|
|
53
|
+
var node = createImageNode({
|
|
54
|
+
width: 100,
|
|
55
|
+
height: 200
|
|
56
|
+
});
|
|
57
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, (0, _extends2["default"])({}, defaultProps, {
|
|
58
|
+
node: node
|
|
59
|
+
}))),
|
|
60
|
+
container = _render3.container;
|
|
61
|
+
var img = container.querySelector('img');
|
|
62
|
+
expect(img).toBeInTheDocument();
|
|
63
|
+
});
|
|
64
|
+
it('renders with loading class when loading', function () {
|
|
65
|
+
var node = createImageNode({
|
|
66
|
+
loading: true
|
|
67
|
+
});
|
|
68
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, (0, _extends2["default"])({}, defaultProps, {
|
|
69
|
+
node: node
|
|
70
|
+
}))),
|
|
71
|
+
container = _render4.container;
|
|
72
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
73
|
+
});
|
|
74
|
+
it('renders with active class when active', function () {
|
|
75
|
+
var node = createImageNode({
|
|
76
|
+
active: true
|
|
77
|
+
});
|
|
78
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, (0, _extends2["default"])({}, defaultProps, {
|
|
79
|
+
node: node
|
|
80
|
+
}))),
|
|
81
|
+
container = _render5.container;
|
|
82
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
83
|
+
});
|
|
84
|
+
it('handles image with source', function () {
|
|
85
|
+
var node = createImageNode({
|
|
86
|
+
src: 'test-image.jpg'
|
|
87
|
+
});
|
|
88
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_component.Component, (0, _extends2["default"])({}, defaultProps, {
|
|
89
|
+
node: node
|
|
90
|
+
}))),
|
|
91
|
+
container = _render6.container;
|
|
92
|
+
var img = container.querySelector('img');
|
|
93
|
+
expect(img).toHaveAttribute('src', 'test-image.jpg');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=component.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.test.js","names":["_react","_interopRequireDefault","require","_react2","_slate","_component","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","describe","createImageNode","dataProps","undefined","Block","fromJSON","type","data","Data","create","width","height","src","createMockEditor","value","change","jest","fn","defaultClasses","active","loading","pendingDelete","defaultProps","node","editor","classes","onDelete","it","_render","render","createElement","Component","container","expect","firstChild","toBeInTheDocument","_render2","img","querySelector","_render3","_extends2","_render4","_render5","_render6","toHaveAttribute"],"sources":["../../../../src/plugins/image/__tests__/component.test.jsx"],"sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport { Block, Data } from 'slate';\nimport { Component } from '../component';\n\ndescribe('Image Component', () => {\n const createImageNode = (dataProps = {}) => {\n return Block.fromJSON({\n type: 'image',\n data: Data.create({\n width: 50,\n height: 50,\n src: 'test-image.jpg',\n ...dataProps,\n }),\n });\n };\n\n const createMockEditor = () => ({\n value: {},\n change: jest.fn(),\n });\n\n const defaultClasses = {\n active: 'active',\n loading: 'loading',\n pendingDelete: 'pendingDelete',\n };\n\n const defaultProps = {\n node: createImageNode(),\n editor: createMockEditor(),\n classes: defaultClasses,\n onDelete: jest.fn(),\n };\n\n it('renders correctly with default props', () => {\n const { container } = render(<Component {...defaultProps} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders image with correct dimensions', () => {\n const { container } = render(<Component {...defaultProps} />);\n const img = container.querySelector('img');\n expect(img).toBeInTheDocument();\n });\n\n it('renders with custom width and height', () => {\n const node = createImageNode({ width: 100, height: 200 });\n const { container } = render(<Component {...defaultProps} node={node} />);\n const img = container.querySelector('img');\n expect(img).toBeInTheDocument();\n });\n\n it('renders with loading class when loading', () => {\n const node = createImageNode({ loading: true });\n const { container } = render(<Component {...defaultProps} node={node} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('renders with active class when active', () => {\n const node = createImageNode({ active: true });\n const { container } = render(<Component {...defaultProps} node={node} />);\n expect(container.firstChild).toBeInTheDocument();\n });\n\n it('handles image with source', () => {\n const node = createImageNode({ src: 'test-image.jpg' });\n const { container } = render(<Component {...defaultProps} node={node} />);\n const img = container.querySelector('img');\n expect(img).toHaveAttribute('src', 'test-image.jpg');\n });\n});\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAAyC,SAAAI,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAEzCoB,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EAChC,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAA,EAAuB;IAAA,IAAnBC,SAAS,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAU,SAAA,GAAAV,SAAA,MAAG,CAAC,CAAC;IACrC,OAAOW,YAAK,CAACC,QAAQ,CAAC;MACpBC,IAAI,EAAE,OAAO;MACbC,IAAI,EAAEC,WAAI,CAACC,MAAM,CAAAjB,aAAA;QACfkB,KAAK,EAAE,EAAE;QACTC,MAAM,EAAE,EAAE;QACVC,GAAG,EAAE;MAAgB,GAClBV,SAAS,CACb;IACH,CAAC,CAAC;EACJ,CAAC;EAED,IAAMW,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAA;IAAA,OAAU;MAC9BC,KAAK,EAAE,CAAC,CAAC;MACTC,MAAM,EAAEC,IAAI,CAACC,EAAE,CAAC;IAClB,CAAC;EAAA,CAAC;EAEF,IAAMC,cAAc,GAAG;IACrBC,MAAM,EAAE,QAAQ;IAChBC,OAAO,EAAE,SAAS;IAClBC,aAAa,EAAE;EACjB,CAAC;EAED,IAAMC,YAAY,GAAG;IACnBC,IAAI,EAAEtB,eAAe,CAAC,CAAC;IACvBuB,MAAM,EAAEX,gBAAgB,CAAC,CAAC;IAC1BY,OAAO,EAAEP,cAAc;IACvBQ,QAAQ,EAAEV,IAAI,CAACC,EAAE,CAAC;EACpB,CAAC;EAEDU,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC/C,IAAAC,OAAA,GAAsB,IAAAC,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,EAAKT,YAAe,CAAC,CAAC;MAArDU,SAAS,GAAAJ,OAAA,CAATI,SAAS;IACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;EAClD,CAAC,CAAC;EAEFR,EAAE,CAAC,uCAAuC,EAAE,YAAM;IAChD,IAAAS,QAAA,GAAsB,IAAAP,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,EAAKT,YAAe,CAAC,CAAC;MAArDU,SAAS,GAAAI,QAAA,CAATJ,SAAS;IACjB,IAAMK,GAAG,GAAGL,SAAS,CAACM,aAAa,CAAC,KAAK,CAAC;IAC1CL,MAAM,CAACI,GAAG,CAAC,CAACF,iBAAiB,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFR,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC/C,IAAMJ,IAAI,GAAGtB,eAAe,CAAC;MAAES,KAAK,EAAE,GAAG;MAAEC,MAAM,EAAE;IAAI,CAAC,CAAC;IACzD,IAAA4B,QAAA,GAAsB,IAAAV,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,MAAAS,SAAA,iBAAKlB,YAAY;QAAEC,IAAI,EAAEA;MAAK,EAAE,CAAC,CAAC;MAAjES,SAAS,GAAAO,QAAA,CAATP,SAAS;IACjB,IAAMK,GAAG,GAAGL,SAAS,CAACM,aAAa,CAAC,KAAK,CAAC;IAC1CL,MAAM,CAACI,GAAG,CAAC,CAACF,iBAAiB,CAAC,CAAC;EACjC,CAAC,CAAC;EAEFR,EAAE,CAAC,yCAAyC,EAAE,YAAM;IAClD,IAAMJ,IAAI,GAAGtB,eAAe,CAAC;MAAEmB,OAAO,EAAE;IAAK,CAAC,CAAC;IAC/C,IAAAqB,QAAA,GAAsB,IAAAZ,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,MAAAS,SAAA,iBAAKlB,YAAY;QAAEC,IAAI,EAAEA;MAAK,EAAE,CAAC,CAAC;MAAjES,SAAS,GAAAS,QAAA,CAATT,SAAS;IACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;EAClD,CAAC,CAAC;EAEFR,EAAE,CAAC,uCAAuC,EAAE,YAAM;IAChD,IAAMJ,IAAI,GAAGtB,eAAe,CAAC;MAAEkB,MAAM,EAAE;IAAK,CAAC,CAAC;IAC9C,IAAAuB,QAAA,GAAsB,IAAAb,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,MAAAS,SAAA,iBAAKlB,YAAY;QAAEC,IAAI,EAAEA;MAAK,EAAE,CAAC,CAAC;MAAjES,SAAS,GAAAU,QAAA,CAATV,SAAS;IACjBC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;EAClD,CAAC,CAAC;EAEFR,EAAE,CAAC,2BAA2B,EAAE,YAAM;IACpC,IAAMJ,IAAI,GAAGtB,eAAe,CAAC;MAAEW,GAAG,EAAE;IAAiB,CAAC,CAAC;IACvD,IAAA+B,QAAA,GAAsB,IAAAd,cAAM,eAACxD,MAAA,YAAAyD,aAAA,CAACpD,UAAA,CAAAqD,SAAS,MAAAS,SAAA,iBAAKlB,YAAY;QAAEC,IAAI,EAAEA;MAAK,EAAE,CAAC,CAAC;MAAjES,SAAS,GAAAW,QAAA,CAATX,SAAS;IACjB,IAAMK,GAAG,GAAGL,SAAS,CAACM,aAAa,CAAC,KAAK,CAAC;IAC1CL,MAAM,CAACI,GAAG,CAAC,CAACO,eAAe,CAAC,KAAK,EAAE,gBAAgB,CAAC;EACtD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
|
+
var _react = require("@testing-library/react");
|
|
8
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
9
|
+
var _imageToolbar = require("../image-toolbar");
|
|
10
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
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
|
+
// Mock the alt-dialog component to avoid complex modal rendering in tests
|
|
14
|
+
jest.mock('../alt-dialog', function () {
|
|
15
|
+
return function AltDialog(_ref) {
|
|
16
|
+
var alt = _ref.alt,
|
|
17
|
+
onDone = _ref.onDone;
|
|
18
|
+
return /*#__PURE__*/_react2["default"].createElement("div", {
|
|
19
|
+
"data-testid": "alt-dialog"
|
|
20
|
+
}, /*#__PURE__*/_react2["default"].createElement("input", {
|
|
21
|
+
"data-testid": "alt-input",
|
|
22
|
+
defaultValue: alt,
|
|
23
|
+
onChange: function onChange(e) {
|
|
24
|
+
return onDone(e.target.value);
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
describe('ImageToolbar', function () {
|
|
30
|
+
var onChange;
|
|
31
|
+
beforeEach(function () {
|
|
32
|
+
onChange = jest.fn();
|
|
33
|
+
});
|
|
34
|
+
var renderComponent = function renderComponent() {
|
|
35
|
+
var extras = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
36
|
+
var props = _objectSpread({
|
|
37
|
+
onChange: onChange,
|
|
38
|
+
imageLoaded: true
|
|
39
|
+
}, extras);
|
|
40
|
+
return (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_imageToolbar.ImageToolbar, props));
|
|
41
|
+
};
|
|
42
|
+
describe('rendering', function () {
|
|
43
|
+
it('renders alignment buttons', function () {
|
|
44
|
+
renderComponent();
|
|
45
|
+
expect(_react.screen.getByText('left')).toBeInTheDocument();
|
|
46
|
+
expect(_react.screen.getByText('center')).toBeInTheDocument();
|
|
47
|
+
expect(_react.screen.getByText('right')).toBeInTheDocument();
|
|
48
|
+
});
|
|
49
|
+
it('renders alt text button', function () {
|
|
50
|
+
renderComponent();
|
|
51
|
+
expect(_react.screen.getByText('Alt text')).toBeInTheDocument();
|
|
52
|
+
});
|
|
53
|
+
it('does not render alignment buttons when disabled', function () {
|
|
54
|
+
renderComponent({
|
|
55
|
+
disableImageAlignmentButtons: true
|
|
56
|
+
});
|
|
57
|
+
expect(_react.screen.queryByText('left')).not.toBeInTheDocument();
|
|
58
|
+
expect(_react.screen.queryByText('center')).not.toBeInTheDocument();
|
|
59
|
+
expect(_react.screen.queryByText('right')).not.toBeInTheDocument();
|
|
60
|
+
});
|
|
61
|
+
it('shows active state for selected alignment', function () {
|
|
62
|
+
var _renderComponent = renderComponent({
|
|
63
|
+
alignment: 'center'
|
|
64
|
+
}),
|
|
65
|
+
container = _renderComponent.container;
|
|
66
|
+
// The MarkButton component uses aria-pressed for active state
|
|
67
|
+
var centerButton = _react.screen.getByText('center').closest('button');
|
|
68
|
+
expect(centerButton).toHaveAttribute('aria-pressed', 'true');
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('user interactions', function () {
|
|
72
|
+
it('calls onChange with alignment when left is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
73
|
+
var user;
|
|
74
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
75
|
+
while (1) switch (_context.prev = _context.next) {
|
|
76
|
+
case 0:
|
|
77
|
+
user = _userEvent["default"].setup();
|
|
78
|
+
renderComponent();
|
|
79
|
+
_context.next = 1;
|
|
80
|
+
return user.click(_react.screen.getByText('left'));
|
|
81
|
+
case 1:
|
|
82
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
83
|
+
alignment: 'left'
|
|
84
|
+
});
|
|
85
|
+
case 2:
|
|
86
|
+
case "end":
|
|
87
|
+
return _context.stop();
|
|
88
|
+
}
|
|
89
|
+
}, _callee);
|
|
90
|
+
})));
|
|
91
|
+
it('calls onChange with alignment when center is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
92
|
+
var user;
|
|
93
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
94
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
95
|
+
case 0:
|
|
96
|
+
user = _userEvent["default"].setup();
|
|
97
|
+
renderComponent();
|
|
98
|
+
_context2.next = 1;
|
|
99
|
+
return user.click(_react.screen.getByText('center'));
|
|
100
|
+
case 1:
|
|
101
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
102
|
+
alignment: 'center'
|
|
103
|
+
});
|
|
104
|
+
case 2:
|
|
105
|
+
case "end":
|
|
106
|
+
return _context2.stop();
|
|
107
|
+
}
|
|
108
|
+
}, _callee2);
|
|
109
|
+
})));
|
|
110
|
+
it('calls onChange with alignment when right is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
111
|
+
var user;
|
|
112
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
113
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
114
|
+
case 0:
|
|
115
|
+
user = _userEvent["default"].setup();
|
|
116
|
+
renderComponent();
|
|
117
|
+
_context3.next = 1;
|
|
118
|
+
return user.click(_react.screen.getByText('right'));
|
|
119
|
+
case 1:
|
|
120
|
+
expect(onChange).toHaveBeenCalledWith({
|
|
121
|
+
alignment: 'right'
|
|
122
|
+
});
|
|
123
|
+
case 2:
|
|
124
|
+
case "end":
|
|
125
|
+
return _context3.stop();
|
|
126
|
+
}
|
|
127
|
+
}, _callee3);
|
|
128
|
+
})));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=image-toolbar-logic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-toolbar-logic.test.js","names":["_react","require","_userEvent","_interopRequireDefault","_imageToolbar","_react2","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","AltDialog","_ref","alt","onDone","createElement","defaultValue","onChange","target","value","describe","beforeEach","fn","renderComponent","extras","undefined","props","imageLoaded","render","ImageToolbar","it","expect","screen","getByText","toBeInTheDocument","disableImageAlignmentButtons","queryByText","not","_renderComponent","alignment","container","centerButton","closest","toHaveAttribute","_asyncToGenerator2","_regenerator","mark","_callee","user","wrap","_context","prev","next","userEvent","setup","click","toHaveBeenCalledWith","stop","_callee2","_context2","_callee3","_context3"],"sources":["../../../../src/plugins/image/__tests__/image-toolbar-logic.test.jsx"],"sourcesContent":["import { render, screen } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { ImageToolbar } from '../image-toolbar';\nimport React from 'react';\n\n// Mock the alt-dialog component to avoid complex modal rendering in tests\njest.mock('../alt-dialog', () => {\n return function AltDialog({ alt, onDone }) {\n return (\n <div data-testid=\"alt-dialog\">\n <input data-testid=\"alt-input\" defaultValue={alt} onChange={(e) => onDone(e.target.value)} />\n </div>\n );\n };\n});\n\ndescribe('ImageToolbar', () => {\n let onChange;\n\n beforeEach(() => {\n onChange = jest.fn();\n });\n\n const renderComponent = (extras = {}) => {\n const props = {\n onChange,\n imageLoaded: true,\n ...extras,\n };\n\n return render(<ImageToolbar {...props} />);\n };\n\n describe('rendering', () => {\n it('renders alignment buttons', () => {\n renderComponent();\n expect(screen.getByText('left')).toBeInTheDocument();\n expect(screen.getByText('center')).toBeInTheDocument();\n expect(screen.getByText('right')).toBeInTheDocument();\n });\n\n it('renders alt text button', () => {\n renderComponent();\n expect(screen.getByText('Alt text')).toBeInTheDocument();\n });\n\n it('does not render alignment buttons when disabled', () => {\n renderComponent({ disableImageAlignmentButtons: true });\n expect(screen.queryByText('left')).not.toBeInTheDocument();\n expect(screen.queryByText('center')).not.toBeInTheDocument();\n expect(screen.queryByText('right')).not.toBeInTheDocument();\n });\n\n it('shows active state for selected alignment', () => {\n const { container } = renderComponent({ alignment: 'center' });\n // The MarkButton component uses aria-pressed for active state\n const centerButton = screen.getByText('center').closest('button');\n expect(centerButton).toHaveAttribute('aria-pressed', 'true');\n });\n });\n\n describe('user interactions', () => {\n it('calls onChange with alignment when left is clicked', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n await user.click(screen.getByText('left'));\n\n expect(onChange).toHaveBeenCalledWith({ alignment: 'left' });\n });\n\n it('calls onChange with alignment when center is clicked', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n await user.click(screen.getByText('center'));\n\n expect(onChange).toHaveBeenCalledWith({ alignment: 'center' });\n });\n\n it('calls onChange with alignment when right is clicked', async () => {\n const user = userEvent.setup();\n renderComponent();\n\n await user.click(screen.getByText('right'));\n\n expect(onChange).toHaveBeenCalledWith({ alignment: 'right' });\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _imageToolbar = _interopRequireDefault(require("../image-toolbar"));
|
|
6
|
+
var _react2 = require("@testing-library/react");
|
|
7
|
+
it('renders image toolbar', function () {
|
|
8
|
+
var classes = {
|
|
9
|
+
holder: 'holder'
|
|
10
|
+
};
|
|
11
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_imageToolbar["default"], {
|
|
12
|
+
percent: 50,
|
|
13
|
+
classes: classes,
|
|
14
|
+
onChange: jest.fn()
|
|
15
|
+
})),
|
|
16
|
+
container = _render.container;
|
|
17
|
+
|
|
18
|
+
// Verify the toolbar is rendered
|
|
19
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=image-toolbar.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-toolbar.test.js","names":["_react","_interopRequireDefault","require","_imageToolbar","_react2","it","classes","holder","_render","render","createElement","percent","onChange","jest","fn","container","expect","firstChild","toBeInTheDocument"],"sources":["../../../../src/plugins/image/__tests__/image-toolbar.test.jsx"],"sourcesContent":["import React from 'react';\nimport Toolbar from '../image-toolbar';\nimport { render } from '@testing-library/react';\n\nit('renders image toolbar', () => {\n const classes = { holder: 'holder' };\n\n const { container } = render(<Toolbar percent={50} classes={classes} onChange={jest.fn()} />);\n\n // Verify the toolbar is rendered\n expect(container.firstChild).toBeInTheDocument();\n});\n"],"mappings":";;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEAG,EAAE,CAAC,uBAAuB,EAAE,YAAM;EAChC,IAAMC,OAAO,GAAG;IAAEC,MAAM,EAAE;EAAS,CAAC;EAEpC,IAAAC,OAAA,GAAsB,IAAAC,cAAM,eAACT,MAAA,YAAAU,aAAA,CAACP,aAAA,WAAO;MAACQ,OAAO,EAAE,EAAG;MAACL,OAAO,EAAEA,OAAQ;MAACM,QAAQ,EAAEC,IAAI,CAACC,EAAE,CAAC;IAAE,CAAE,CAAC,CAAC;IAArFC,SAAS,GAAAP,OAAA,CAATO,SAAS;;EAEjB;EACAC,MAAM,CAACD,SAAS,CAACE,UAAU,CAAC,CAACC,iBAAiB,CAAC,CAAC;AAClD,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _ = _interopRequireDefault(require("../"));
|
|
5
|
+
describe('image plugin', function () {
|
|
6
|
+
var value = {};
|
|
7
|
+
var imageSupport = {
|
|
8
|
+
"delete": jest.fn(),
|
|
9
|
+
add: jest.fn()
|
|
10
|
+
};
|
|
11
|
+
var imagePlugin = (0, _["default"])({
|
|
12
|
+
onDelete: function onDelete(src, done) {
|
|
13
|
+
imageSupport["delete"](src, function (e) {
|
|
14
|
+
done(e, value);
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
insertImageRequested: function insertImageRequested(node, getHandler) {
|
|
18
|
+
var handler = getHandler(function () {
|
|
19
|
+
return value;
|
|
20
|
+
});
|
|
21
|
+
imageSupport.add(handler);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
describe('normalizeNode', function () {
|
|
25
|
+
it('should exit the function if the node is not of type document', function () {
|
|
26
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
27
|
+
object: 'image'
|
|
28
|
+
});
|
|
29
|
+
expect(returnValue).toEqual(undefined);
|
|
30
|
+
});
|
|
31
|
+
it('should exit if the function if there are no changes needed', function () {
|
|
32
|
+
var nodes = [{
|
|
33
|
+
object: 'text',
|
|
34
|
+
text: 'Before Image'
|
|
35
|
+
}, {
|
|
36
|
+
type: 'image'
|
|
37
|
+
}, {
|
|
38
|
+
object: 'text',
|
|
39
|
+
text: 'After Image'
|
|
40
|
+
}];
|
|
41
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
42
|
+
object: 'document',
|
|
43
|
+
findDescendant: jest.fn(function (callback) {
|
|
44
|
+
nodes.forEach(function (n) {
|
|
45
|
+
return callback(n);
|
|
46
|
+
});
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
expect(returnValue).toEqual(undefined);
|
|
50
|
+
});
|
|
51
|
+
it('should return a function if there is a node with an empty text before an image', function () {
|
|
52
|
+
var nodes = [{
|
|
53
|
+
object: 'text',
|
|
54
|
+
text: '',
|
|
55
|
+
key: '1'
|
|
56
|
+
}, {
|
|
57
|
+
type: 'image',
|
|
58
|
+
key: '2'
|
|
59
|
+
}, {
|
|
60
|
+
object: 'text',
|
|
61
|
+
text: 'After Image',
|
|
62
|
+
key: '3'
|
|
63
|
+
}];
|
|
64
|
+
var findDescendant = jest.fn(function (callback) {
|
|
65
|
+
nodes.forEach(function (n) {
|
|
66
|
+
return callback(n);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
var change = {
|
|
70
|
+
withoutNormalization: jest.fn(function (callback) {
|
|
71
|
+
callback();
|
|
72
|
+
}),
|
|
73
|
+
insertTextByKey: jest.fn()
|
|
74
|
+
};
|
|
75
|
+
var returnValue = imagePlugin.normalizeNode({
|
|
76
|
+
object: 'document',
|
|
77
|
+
findDescendant: findDescendant
|
|
78
|
+
});
|
|
79
|
+
expect(returnValue).toEqual(expect.any(Function));
|
|
80
|
+
returnValue(change);
|
|
81
|
+
expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));
|
|
82
|
+
expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_","_interopRequireDefault","require","describe","value","imageSupport","jest","fn","add","imagePlugin","ImageToolbar","onDelete","src","done","e","insertImageRequested","node","getHandler","handler","it","returnValue","normalizeNode","object","expect","toEqual","undefined","nodes","text","type","findDescendant","callback","forEach","n","key","change","withoutNormalization","insertTextByKey","any","Function","toHaveBeenCalledWith"],"sources":["../../../../src/plugins/image/__tests__/index.test.js"],"sourcesContent":["import ImageToolbar from '../';\n\ndescribe('image plugin', () => {\n let value = {};\n\n const imageSupport = {\n delete: jest.fn(),\n add: jest.fn(),\n };\n\n const imagePlugin = ImageToolbar({\n onDelete: (src, done) => {\n imageSupport.delete(src, (e) => {\n done(e, value);\n });\n },\n insertImageRequested: (node, getHandler) => {\n const handler = getHandler(() => value);\n imageSupport.add(handler);\n },\n });\n\n describe('normalizeNode', () => {\n it('should exit the function if the node is not of type document', () => {\n const returnValue = imagePlugin.normalizeNode({ object: 'image' });\n\n expect(returnValue).toEqual(undefined);\n });\n\n it('should exit if the function if there are no changes needed', () => {\n const nodes = [\n {\n object: 'text',\n text: 'Before Image',\n },\n {\n type: 'image',\n },\n {\n object: 'text',\n text: 'After Image',\n },\n ];\n const returnValue = imagePlugin.normalizeNode({\n object: 'document',\n findDescendant: jest.fn((callback) => {\n nodes.forEach((n) => callback(n));\n }),\n });\n expect(returnValue).toEqual(undefined);\n });\n\n it('should return a function if there is a node with an empty text before an image', () => {\n const nodes = [\n {\n object: 'text',\n text: '',\n key: '1',\n },\n {\n type: 'image',\n key: '2',\n },\n {\n object: 'text',\n text: 'After Image',\n key: '3',\n },\n ];\n const findDescendant = jest.fn((callback) => {\n nodes.forEach((n) => callback(n));\n });\n const change = {\n withoutNormalization: jest.fn((callback) => {\n callback();\n }),\n insertTextByKey: jest.fn(),\n };\n const returnValue = imagePlugin.normalizeNode({\n object: 'document',\n findDescendant,\n });\n\n expect(returnValue).toEqual(expect.any(Function));\n\n returnValue(change);\n\n expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));\n expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _mockChange = _interopRequireWildcard(require("./mock-change"));
|
|
6
|
+
var _slate = require("slate");
|
|
7
|
+
var _insertImageHandler = _interopRequireDefault(require("../insert-image-handler"));
|
|
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
|
+
expect.extend({
|
|
10
|
+
toMatchData: function toMatchData(received, argument) {
|
|
11
|
+
var argData = _slate.Data.create(argument);
|
|
12
|
+
var pass = argData.equals(received.data);
|
|
13
|
+
if (pass) {
|
|
14
|
+
return {
|
|
15
|
+
message: function message() {
|
|
16
|
+
return "expected ".concat(received.toJSON(), " not to be divisible by ").concat(argData.toJSON());
|
|
17
|
+
},
|
|
18
|
+
pass: true
|
|
19
|
+
};
|
|
20
|
+
} else {
|
|
21
|
+
return {
|
|
22
|
+
message: function message() {
|
|
23
|
+
return "expected ".concat(received.toJSON(), " to be divisible by ").concat(argData.toJSON());
|
|
24
|
+
},
|
|
25
|
+
pass: false
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
describe('insert image handler', function () {
|
|
31
|
+
var _change, document, value;
|
|
32
|
+
beforeEach(function () {
|
|
33
|
+
document = new _mockChange.MockDocument();
|
|
34
|
+
_change = new _mockChange["default"]();
|
|
35
|
+
value = {
|
|
36
|
+
change: function change() {
|
|
37
|
+
return _change;
|
|
38
|
+
},
|
|
39
|
+
document: document
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
var block = {
|
|
43
|
+
key: 1
|
|
44
|
+
};
|
|
45
|
+
var onChange = jest.fn();
|
|
46
|
+
var handler = new _insertImageHandler["default"](block, function () {}, function () {
|
|
47
|
+
return value;
|
|
48
|
+
}, onChange);
|
|
49
|
+
test('it constructs', function () {
|
|
50
|
+
expect(handler).not.toEqual(undefined);
|
|
51
|
+
});
|
|
52
|
+
describe('fileChosen', function () {
|
|
53
|
+
var fileReader;
|
|
54
|
+
beforeEach(function () {
|
|
55
|
+
fileReader = {
|
|
56
|
+
readAsDataURL: jest.fn()
|
|
57
|
+
};
|
|
58
|
+
global.FileReader = function () {
|
|
59
|
+
return fileReader;
|
|
60
|
+
};
|
|
61
|
+
handler.fileChosen({});
|
|
62
|
+
});
|
|
63
|
+
test('calls readAsDataURL', function () {
|
|
64
|
+
expect(fileReader.readAsDataURL).toBeCalledWith({});
|
|
65
|
+
});
|
|
66
|
+
test('calls onChange with src -> dataUrl', function () {
|
|
67
|
+
fileReader.result = 'dataURL';
|
|
68
|
+
fileReader.onload();
|
|
69
|
+
expect(_change.setNodeByKey).toBeCalledWith(block.key, expect.anything());
|
|
70
|
+
expect(_change.setNodeByKey.mock.calls[0][1]).toMatchData({
|
|
71
|
+
src: 'dataURL'
|
|
72
|
+
});
|
|
73
|
+
expect(onChange).toBeCalledWith(_change);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('progress', function () {
|
|
77
|
+
test('calls change w/ percent', function () {
|
|
78
|
+
handler.progress(40, 40, 100);
|
|
79
|
+
expect(_change.setNodeByKey).toBeCalledWith(block.key, expect.anything());
|
|
80
|
+
expect(_change.setNodeByKey.mock.calls[0][1].data.toJS()).toMatchObject({
|
|
81
|
+
percent: 40
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('done', function () {
|
|
86
|
+
test('calls setNodeByKey', function () {
|
|
87
|
+
handler.done(null, 'src');
|
|
88
|
+
expect(_change.setNodeByKey).toBeCalledWith(block.key, expect.anything());
|
|
89
|
+
expect(_change.setNodeByKey.mock.calls[0][1].data.toJS()).toMatchObject({
|
|
90
|
+
src: 'src',
|
|
91
|
+
loaded: true,
|
|
92
|
+
percent: 100
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('cancel', function () {
|
|
97
|
+
beforeEach(function () {
|
|
98
|
+
document.getChild = jest.fn().mockReturnValue({
|
|
99
|
+
data: _slate.Data.create({}),
|
|
100
|
+
key: block.key
|
|
101
|
+
});
|
|
102
|
+
handler.cancel();
|
|
103
|
+
});
|
|
104
|
+
test('calls onChange', function () {
|
|
105
|
+
expect(onChange).toBeCalled();
|
|
106
|
+
});
|
|
107
|
+
test('calls removeNodeByKey', function () {
|
|
108
|
+
expect(_change.removeNodeByKey).toBeCalledWith(block.key);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=insert-image-handler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert-image-handler.test.js","names":["_mockChange","_interopRequireWildcard","require","_slate","_insertImageHandler","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","expect","extend","toMatchData","received","argument","argData","Data","create","pass","equals","data","message","concat","toJSON","describe","change","document","value","beforeEach","MockDocument","MockChange","block","key","onChange","jest","fn","handler","InsertImageHandler","test","not","toEqual","undefined","fileReader","readAsDataURL","global","FileReader","fileChosen","toBeCalledWith","result","onload","setNodeByKey","anything","mock","calls","src","progress","toJS","toMatchObject","percent","done","loaded","getChild","mockReturnValue","cancel","toBeCalled","removeNodeByKey"],"sources":["../../../../src/plugins/image/__tests__/insert-image-handler.test.js"],"sourcesContent":["import MockChange, { MockDocument } from './mock-change';\n\nimport { Data } from 'slate';\nimport InsertImageHandler from '../insert-image-handler';\n\nexpect.extend({\n toMatchData: (received, argument) => {\n const argData = Data.create(argument);\n const pass = argData.equals(received.data);\n if (pass) {\n return {\n message: () => `expected ${received.toJSON()} not to be divisible by ${argData.toJSON()}`,\n pass: true,\n };\n } else {\n return {\n message: () => `expected ${received.toJSON()} to be divisible by ${argData.toJSON()}`,\n pass: false,\n };\n }\n },\n});\ndescribe('insert image handler', () => {\n let change, document, value;\n beforeEach(() => {\n document = new MockDocument();\n change = new MockChange();\n value = {\n change: () => change,\n document,\n };\n });\n\n const block = { key: 1 };\n const onChange = jest.fn();\n\n const handler = new InsertImageHandler(\n block,\n () => {},\n () => value,\n onChange,\n );\n\n test('it constructs', () => {\n expect(handler).not.toEqual(undefined);\n });\n\n describe('fileChosen', () => {\n let fileReader;\n beforeEach(() => {\n fileReader = {\n readAsDataURL: jest.fn(),\n };\n\n global.FileReader = () => fileReader;\n handler.fileChosen({});\n });\n\n test('calls readAsDataURL', () => {\n expect(fileReader.readAsDataURL).toBeCalledWith({});\n });\n\n test('calls onChange with src -> dataUrl', () => {\n fileReader.result = 'dataURL';\n fileReader.onload();\n expect(change.setNodeByKey).toBeCalledWith(block.key, expect.anything());\n expect(change.setNodeByKey.mock.calls[0][1]).toMatchData({\n src: 'dataURL',\n });\n expect(onChange).toBeCalledWith(change);\n });\n });\n\n describe('progress', () => {\n test('calls change w/ percent', () => {\n handler.progress(40, 40, 100);\n expect(change.setNodeByKey).toBeCalledWith(block.key, expect.anything());\n\n expect(change.setNodeByKey.mock.calls[0][1].data.toJS()).toMatchObject({\n percent: 40,\n });\n });\n });\n\n describe('done', () => {\n test('calls setNodeByKey', () => {\n handler.done(null, 'src');\n\n expect(change.setNodeByKey).toBeCalledWith(block.key, expect.anything());\n\n expect(change.setNodeByKey.mock.calls[0][1].data.toJS()).toMatchObject({\n src: 'src',\n loaded: true,\n percent: 100,\n });\n });\n });\n\n describe('cancel', () => {\n beforeEach(() => {\n document.getChild = jest.fn().mockReturnValue({ data: Data.create({}), key: block.key });\n handler.cancel();\n });\n\n test('calls onChange', () => {\n expect(onChange).toBeCalled();\n });\n\n test('calls removeNodeByKey', () => {\n expect(change.removeNodeByKey).toBeCalledWith(block.key);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MockDocument = MockDocument;
|
|
7
|
+
exports["default"] = MockChange;
|
|
8
|
+
var _slate = require("slate");
|
|
9
|
+
function MockChange() {
|
|
10
|
+
this.setNodeByKey = jest.fn().mockReturnValue(this);
|
|
11
|
+
this.removeNodeByKey = jest.fn().mockReturnValue(this);
|
|
12
|
+
this.insertInline = jest.fn().mockReturnValue(this);
|
|
13
|
+
this.moveFocusTo = jest.fn().mockReturnValue(this);
|
|
14
|
+
this.moveAnchorTo = jest.fn().mockReturnValue(this);
|
|
15
|
+
}
|
|
16
|
+
function MockDocument() {
|
|
17
|
+
this.getChild = jest.fn().mockReturnValue({
|
|
18
|
+
data: _slate.Data.create({})
|
|
19
|
+
});
|
|
20
|
+
this.getDescendant = jest.fn();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mock-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-change.js","names":["_slate","require","MockChange","setNodeByKey","jest","fn","mockReturnValue","removeNodeByKey","insertInline","moveFocusTo","moveAnchorTo","MockDocument","getChild","data","Data","create","getDescendant"],"sources":["../../../../src/plugins/image/__tests__/mock-change.js"],"sourcesContent":["import { Data } from 'slate';\n\nexport default function MockChange() {\n this.setNodeByKey = jest.fn().mockReturnValue(this);\n this.removeNodeByKey = jest.fn().mockReturnValue(this);\n this.insertInline = jest.fn().mockReturnValue(this);\n this.moveFocusTo = jest.fn().mockReturnValue(this);\n this.moveAnchorTo = jest.fn().mockReturnValue(this);\n}\n\nexport function MockDocument() {\n this.getChild = jest.fn().mockReturnValue({ data: Data.create({}) });\n\n this.getDescendant = jest.fn();\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEe,SAASC,UAAUA,CAAA,EAAG;EACnC,IAAI,CAACC,YAAY,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,IAAI,CAAC;EACnD,IAAI,CAACC,eAAe,GAAGH,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,IAAI,CAAC;EACtD,IAAI,CAACE,YAAY,GAAGJ,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,IAAI,CAAC;EACnD,IAAI,CAACG,WAAW,GAAGL,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,IAAI,CAAC;EAClD,IAAI,CAACI,YAAY,GAAGN,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC,IAAI,CAAC;AACrD;AAEO,SAASK,YAAYA,CAAA,EAAG;EAC7B,IAAI,CAACC,QAAQ,GAAGR,IAAI,CAACC,EAAE,CAAC,CAAC,CAACC,eAAe,CAAC;IAAEO,IAAI,EAAEC,WAAI,CAACC,MAAM,CAAC,CAAC,CAAC;EAAE,CAAC,CAAC;EAEpE,IAAI,CAACC,aAAa,GAAGZ,IAAI,CAACC,EAAE,CAAC,CAAC;AAChC","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _index = _interopRequireWildcard(require("../index"));
|
|
6
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
7
|
+
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); }
|
|
8
|
+
var log = (0, _debug["default"])('@pie-lib:editable-html:test:plugins:list');
|
|
9
|
+
describe('ListPlugin', function () {
|
|
10
|
+
var next;
|
|
11
|
+
describe('deserialize', function () {
|
|
12
|
+
next = jest.fn();
|
|
13
|
+
var assertDeserialize = function assertDeserialize(tagName, expectedType) {
|
|
14
|
+
it("should deserialize ".concat(tagName, " to ").concat(expectedType), function () {
|
|
15
|
+
var out = _index.serialization.deserialize({
|
|
16
|
+
tagName: tagName,
|
|
17
|
+
children: [],
|
|
18
|
+
childNodes: []
|
|
19
|
+
}, next);
|
|
20
|
+
expect(out).toMatchObject({
|
|
21
|
+
object: 'block',
|
|
22
|
+
type: expectedType
|
|
23
|
+
});
|
|
24
|
+
expect(next).toHaveBeenCalledWith([]);
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
assertDeserialize('ul', 'ul_list');
|
|
28
|
+
assertDeserialize('ol', 'ol_list');
|
|
29
|
+
assertDeserialize('li', 'list_item');
|
|
30
|
+
});
|
|
31
|
+
describe('serialize', function () {
|
|
32
|
+
var assertSerialize = function assertSerialize(type, expectedType) {
|
|
33
|
+
it("should serialize ".concat(type, " to ").concat(expectedType), function () {
|
|
34
|
+
var out = _index.serialization.serialize({
|
|
35
|
+
object: 'block',
|
|
36
|
+
type: type
|
|
37
|
+
}, {});
|
|
38
|
+
log('out: ', out);
|
|
39
|
+
expect(out.type).toMatch(expectedType);
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
assertSerialize('ul_list', 'ul');
|
|
43
|
+
assertSerialize('ol_list', 'ol');
|
|
44
|
+
assertSerialize('list_item', 'li');
|
|
45
|
+
});
|
|
46
|
+
describe('renderNode', function () {
|
|
47
|
+
var plugin = (0, _index["default"])({});
|
|
48
|
+
var assertRenderNode = function assertRenderNode(type, expectedType) {
|
|
49
|
+
it("should renderNode ".concat(type, " to ").concat(expectedType), function () {
|
|
50
|
+
var out = plugin.renderNode({
|
|
51
|
+
node: {
|
|
52
|
+
type: type
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
expect(out.type).toMatch(expectedType);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
assertRenderNode('ul_list', 'ul');
|
|
59
|
+
assertRenderNode('ol_list', 'ol');
|
|
60
|
+
assertRenderNode('list_item', 'li');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","names":["_index","_interopRequireWildcard","require","_debug","_interopRequireDefault","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","log","debug","describe","next","jest","fn","assertDeserialize","tagName","expectedType","it","concat","out","serialization","deserialize","children","childNodes","expect","toMatchObject","object","type","toHaveBeenCalledWith","assertSerialize","serialize","toMatch","plugin","List","assertRenderNode","renderNode","node"],"sources":["../../../../src/plugins/list/__tests__/index.test.js"],"sourcesContent":["import List, { serialization } from '../index';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:test:plugins:list');\n\ndescribe('ListPlugin', () => {\n let next;\n\n describe('deserialize', () => {\n next = jest.fn();\n\n const assertDeserialize = (tagName, expectedType) => {\n it(`should deserialize ${tagName} to ${expectedType}`, () => {\n const out = serialization.deserialize({ tagName, children: [], childNodes: [] }, next);\n\n expect(out).toMatchObject({ object: 'block', type: expectedType });\n expect(next).toHaveBeenCalledWith([]);\n });\n };\n assertDeserialize('ul', 'ul_list');\n assertDeserialize('ol', 'ol_list');\n assertDeserialize('li', 'list_item');\n });\n\n describe('serialize', () => {\n const assertSerialize = (type, expectedType) => {\n it(`should serialize ${type} to ${expectedType}`, () => {\n const out = serialization.serialize({ object: 'block', type }, {});\n log('out: ', out);\n expect(out.type).toMatch(expectedType);\n });\n };\n assertSerialize('ul_list', 'ul');\n assertSerialize('ol_list', 'ol');\n assertSerialize('list_item', 'li');\n });\n\n describe('renderNode', () => {\n let plugin = List({});\n\n const assertRenderNode = (type, expectedType) => {\n it(`should renderNode ${type} to ${expectedType}`, () => {\n const out = plugin.renderNode({ node: { type } });\n expect(out.type).toMatch(expectedType);\n });\n };\n\n assertRenderNode('ul_list', 'ul');\n assertRenderNode('ol_list', 'ol');\n assertRenderNode('list_item', 'li');\n });\n});\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA0B,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,wBAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE1B,IAAMmB,GAAG,GAAG,IAAAC,iBAAK,EAAC,0CAA0C,CAAC;AAE7DC,QAAQ,CAAC,YAAY,EAAE,YAAM;EAC3B,IAAIC,IAAI;EAERD,QAAQ,CAAC,aAAa,EAAE,YAAM;IAC5BC,IAAI,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAEhB,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,OAAO,EAAEC,YAAY,EAAK;MACnDC,EAAE,uBAAAC,MAAA,CAAuBH,OAAO,UAAAG,MAAA,CAAOF,YAAY,GAAI,YAAM;QAC3D,IAAMG,GAAG,GAAGC,oBAAa,CAACC,WAAW,CAAC;UAAEN,OAAO,EAAPA,OAAO;UAAEO,QAAQ,EAAE,EAAE;UAAEC,UAAU,EAAE;QAAG,CAAC,EAAEZ,IAAI,CAAC;QAEtFa,MAAM,CAACL,GAAG,CAAC,CAACM,aAAa,CAAC;UAAEC,MAAM,EAAE,OAAO;UAAEC,IAAI,EAAEX;QAAa,CAAC,CAAC;QAClEQ,MAAM,CAACb,IAAI,CAAC,CAACiB,oBAAoB,CAAC,EAAE,CAAC;MACvC,CAAC,CAAC;IACJ,CAAC;IACDd,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;IAClCA,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC;IAClCA,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC;EACtC,CAAC,CAAC;EAEFJ,QAAQ,CAAC,WAAW,EAAE,YAAM;IAC1B,IAAMmB,eAAe,GAAG,SAAlBA,eAAeA,CAAIF,IAAI,EAAEX,YAAY,EAAK;MAC9CC,EAAE,qBAAAC,MAAA,CAAqBS,IAAI,UAAAT,MAAA,CAAOF,YAAY,GAAI,YAAM;QACtD,IAAMG,GAAG,GAAGC,oBAAa,CAACU,SAAS,CAAC;UAAEJ,MAAM,EAAE,OAAO;UAAEC,IAAI,EAAJA;QAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClEnB,GAAG,CAAC,OAAO,EAAEW,GAAG,CAAC;QACjBK,MAAM,CAACL,GAAG,CAACQ,IAAI,CAAC,CAACI,OAAO,CAACf,YAAY,CAAC;MACxC,CAAC,CAAC;IACJ,CAAC;IACDa,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;IAChCA,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;IAChCA,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;EACpC,CAAC,CAAC;EAEFnB,QAAQ,CAAC,YAAY,EAAE,YAAM;IAC3B,IAAIsB,MAAM,GAAG,IAAAC,iBAAI,EAAC,CAAC,CAAC,CAAC;IAErB,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIP,IAAI,EAAEX,YAAY,EAAK;MAC/CC,EAAE,sBAAAC,MAAA,CAAsBS,IAAI,UAAAT,MAAA,CAAOF,YAAY,GAAI,YAAM;QACvD,IAAMG,GAAG,GAAGa,MAAM,CAACG,UAAU,CAAC;UAAEC,IAAI,EAAE;YAAET,IAAI,EAAJA;UAAK;QAAE,CAAC,CAAC;QACjDH,MAAM,CAACL,GAAG,CAACQ,IAAI,CAAC,CAACI,OAAO,CAACf,YAAY,CAAC;MACxC,CAAC,CAAC;IACJ,CAAC;IAEDkB,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC;IACjCA,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC;IACjCA,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC;EACrC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|