mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-14 06:43:25 +08:00
Merge branch 'develop' of https://github.com/designsforhealth/mermaid into designsforhealth-develop
This commit is contained in:
commit
1c0b167c95
@ -52,6 +52,26 @@ context('Sequence diagram', () => {
|
||||
{}
|
||||
);
|
||||
});
|
||||
it('should handle line breaks and wrap annotations', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
sequenceDiagram
|
||||
participant Alice
|
||||
participant Bob
|
||||
participant John as John<br/>Second Line
|
||||
Alice ->> Bob: Hello Bob, how are you?
|
||||
Bob-->>John: How about you John?
|
||||
Note right of John: John thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.
|
||||
Bob-->Alice: Checking with John...
|
||||
Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit.
|
||||
Bob-x John: Hey John -<br/>we're still waiting to know<br/>how you're doing
|
||||
Note over John:nowrap: John's trying hard not to break his train of thought.
|
||||
Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take??
|
||||
Note over John: After a few more moments, John<br/>finally snaps out of it.
|
||||
`,
|
||||
{}
|
||||
);
|
||||
})
|
||||
it('should render loops with a slight margin', () => {
|
||||
imgSnapshotTest(
|
||||
`
|
||||
|
7
dist/index.html
vendored
7
dist/index.html
vendored
@ -449,8 +449,13 @@ Bob-->>John: How about you John?
|
||||
end
|
||||
Bob--x Alice: I am good thanks!
|
||||
Bob-x John: I am good thanks!
|
||||
Note right of John: Bob thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.
|
||||
Note right of John: John thinks a long<br/>long time, so long<br/>that the text does<br/>not fit on a row.
|
||||
Bob-->Alice: Checking with John...
|
||||
Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit.
|
||||
Bob-x John: Hey John - we're still waiting to know<br/>how you're doing
|
||||
Note over John:nowrap: John's trying hard not to break his train of thought.
|
||||
Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take??
|
||||
Note over John: After a few more moments, John<br/>finally snaps out of it.
|
||||
end
|
||||
alt either this
|
||||
Alice->>John: Yes
|
||||
|
17
dist/mermaid.core.js
vendored
17
dist/mermaid.core.js
vendored
@ -17226,9 +17226,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "apply", function() { return apply; });
|
||||
/* harmony import */ var _mermaidAPI__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mermaidAPI */ "./src/mermaidAPI.js");
|
||||
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../config */ "./src/config.js");
|
||||
/* harmony import */ var _common_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/common */ "./src/diagrams/common/common.js");
|
||||
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js");
|
||||
|
||||
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../logger */ "./src/logger.js");
|
||||
|
||||
|
||||
|
||||
@ -17376,9 +17374,9 @@ var parseMessage = function parseMessage(str) {
|
||||
|
||||
var message = {
|
||||
text: _str.replace(/^[:]?(?:no)?wrap:/, '').trim(),
|
||||
wrap: _str.match(/^[:]?(?:no)?wrap:/) === null ? _common_common__WEBPACK_IMPORTED_MODULE_2__["default"].hasBreaks(_str) || undefined : _str.match(/^[:]?wrap:/) !== null ? true : _str.match(/^[:]?nowrap:/) !== null ? false : undefined
|
||||
wrap: _str.match(/^[:]?wrap:/) !== null ? true : _str.match(/^[:]?nowrap:/) !== null ? false : undefined
|
||||
};
|
||||
_logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('parseMessage:', message);
|
||||
_logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('parseMessage:', message);
|
||||
return message;
|
||||
};
|
||||
var LINETYPE = {
|
||||
@ -17818,7 +17816,6 @@ var drawNote = function drawNote(elem, noteModel) {
|
||||
textObj.anchor = conf.noteAlign;
|
||||
textObj.textMargin = conf.noteMargin;
|
||||
textObj.valign = conf.noteAlign;
|
||||
textObj.wrap = true;
|
||||
var textElem = Object(_svgDraw__WEBPACK_IMPORTED_MODULE_1__["drawText"])(g, textObj);
|
||||
var textHeight = Math.round(textElem.map(function (te) {
|
||||
return (te._groups || te)[0][0].getBBox().height;
|
||||
@ -17871,8 +17868,7 @@ var drawMessage = function drawMessage(g, msgModel) {
|
||||
starty = msgModel.starty,
|
||||
message = msgModel.message,
|
||||
type = msgModel.type,
|
||||
sequenceIndex = msgModel.sequenceIndex,
|
||||
wrap = msgModel.wrap;
|
||||
sequenceIndex = msgModel.sequenceIndex;
|
||||
var lines = _common_common__WEBPACK_IMPORTED_MODULE_4__["default"].splitBreaks(message).length;
|
||||
var textDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(message, messageFont(conf));
|
||||
var lineHeight = textDims.height / lines;
|
||||
@ -17892,7 +17888,6 @@ var drawMessage = function drawMessage(g, msgModel) {
|
||||
textObj.valign = conf.messageAlign;
|
||||
textObj.textMargin = conf.wrapPadding;
|
||||
textObj.tspan = false;
|
||||
textObj.wrap = wrap;
|
||||
Object(_svgDraw__WEBPACK_IMPORTED_MODULE_1__["drawText"])(g, textObj);
|
||||
var totalOffset = textDims.height - 10;
|
||||
var textWidth = textDims.width;
|
||||
@ -18408,12 +18403,12 @@ var buildMessageModel = function buildMessageModel(msg, actors) {
|
||||
var toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;
|
||||
var allBounds = fromBounds.concat(toBounds);
|
||||
var boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);
|
||||
var msgDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(msg.message, messageFont(conf));
|
||||
|
||||
if (msg.wrap && msg.message) {
|
||||
msg.message = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].wrapLabel(msg.message, Math.max(boundedWidth + 2 * conf.wrapPadding, conf.width), messageFont(conf));
|
||||
}
|
||||
|
||||
var msgDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(msg.message, messageFont(conf));
|
||||
return {
|
||||
width: Math.max(msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, boundedWidth + 2 * conf.wrapPadding, conf.width),
|
||||
height: 0,
|
||||
@ -18605,7 +18600,7 @@ var drawRect = function drawRect(elem, rectData) {
|
||||
var drawText = function drawText(elem, textData) {
|
||||
var prevTextHeight = 0,
|
||||
textHeight = 0;
|
||||
var lines = textData.wrap ? textData.text.split(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex) : [textData.text.replace(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex, ' ')];
|
||||
var lines = textData.text.split(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex);
|
||||
var textElems = [];
|
||||
var dy = 0;
|
||||
|
||||
|
2
dist/mermaid.core.js.map
vendored
2
dist/mermaid.core.js.map
vendored
File diff suppressed because one or more lines are too long
19
dist/mermaid.js
vendored
19
dist/mermaid.js
vendored
@ -30304,7 +30304,7 @@ function addHtmlLabel(root, node) {
|
||||
var client = div.node().getBoundingClientRect();
|
||||
fo
|
||||
.attr("width", client.width)
|
||||
.attr("height", client.height);
|
||||
.attr("height", client.height);
|
||||
|
||||
return fo;
|
||||
}
|
||||
@ -65588,9 +65588,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "apply", function() { return apply; });
|
||||
/* harmony import */ var _mermaidAPI__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mermaidAPI */ "./src/mermaidAPI.js");
|
||||
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../config */ "./src/config.js");
|
||||
/* harmony import */ var _common_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/common */ "./src/diagrams/common/common.js");
|
||||
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../logger */ "./src/logger.js");
|
||||
|
||||
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../logger */ "./src/logger.js");
|
||||
|
||||
|
||||
|
||||
@ -65738,9 +65736,9 @@ var parseMessage = function parseMessage(str) {
|
||||
|
||||
var message = {
|
||||
text: _str.replace(/^[:]?(?:no)?wrap:/, '').trim(),
|
||||
wrap: _str.match(/^[:]?(?:no)?wrap:/) === null ? _common_common__WEBPACK_IMPORTED_MODULE_2__["default"].hasBreaks(_str) || undefined : _str.match(/^[:]?wrap:/) !== null ? true : _str.match(/^[:]?nowrap:/) !== null ? false : undefined
|
||||
wrap: _str.match(/^[:]?wrap:/) !== null ? true : _str.match(/^[:]?nowrap:/) !== null ? false : undefined
|
||||
};
|
||||
_logger__WEBPACK_IMPORTED_MODULE_3__["logger"].debug('parseMessage:', message);
|
||||
_logger__WEBPACK_IMPORTED_MODULE_2__["logger"].debug('parseMessage:', message);
|
||||
return message;
|
||||
};
|
||||
var LINETYPE = {
|
||||
@ -66179,7 +66177,6 @@ var drawNote = function drawNote(elem, noteModel) {
|
||||
textObj.anchor = conf.noteAlign;
|
||||
textObj.textMargin = conf.noteMargin;
|
||||
textObj.valign = conf.noteAlign;
|
||||
textObj.wrap = true;
|
||||
var textElem = Object(_svgDraw__WEBPACK_IMPORTED_MODULE_1__["drawText"])(g, textObj);
|
||||
var textHeight = Math.round(textElem.map(function (te) {
|
||||
return (te._groups || te)[0][0].getBBox().height;
|
||||
@ -66232,8 +66229,7 @@ var drawMessage = function drawMessage(g, msgModel) {
|
||||
starty = msgModel.starty,
|
||||
message = msgModel.message,
|
||||
type = msgModel.type,
|
||||
sequenceIndex = msgModel.sequenceIndex,
|
||||
wrap = msgModel.wrap;
|
||||
sequenceIndex = msgModel.sequenceIndex;
|
||||
var lines = _common_common__WEBPACK_IMPORTED_MODULE_4__["default"].splitBreaks(message).length;
|
||||
var textDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(message, messageFont(conf));
|
||||
var lineHeight = textDims.height / lines;
|
||||
@ -66253,7 +66249,6 @@ var drawMessage = function drawMessage(g, msgModel) {
|
||||
textObj.valign = conf.messageAlign;
|
||||
textObj.textMargin = conf.wrapPadding;
|
||||
textObj.tspan = false;
|
||||
textObj.wrap = wrap;
|
||||
Object(_svgDraw__WEBPACK_IMPORTED_MODULE_1__["drawText"])(g, textObj);
|
||||
var totalOffset = textDims.height - 10;
|
||||
var textWidth = textDims.width;
|
||||
@ -66769,12 +66764,12 @@ var buildMessageModel = function buildMessageModel(msg, actors) {
|
||||
var toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;
|
||||
var allBounds = fromBounds.concat(toBounds);
|
||||
var boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);
|
||||
var msgDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(msg.message, messageFont(conf));
|
||||
|
||||
if (msg.wrap && msg.message) {
|
||||
msg.message = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].wrapLabel(msg.message, Math.max(boundedWidth + 2 * conf.wrapPadding, conf.width), messageFont(conf));
|
||||
}
|
||||
|
||||
var msgDims = _utils__WEBPACK_IMPORTED_MODULE_7__["default"].calculateTextDimensions(msg.message, messageFont(conf));
|
||||
return {
|
||||
width: Math.max(msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding, boundedWidth + 2 * conf.wrapPadding, conf.width),
|
||||
height: 0,
|
||||
@ -66966,7 +66961,7 @@ var drawRect = function drawRect(elem, rectData) {
|
||||
var drawText = function drawText(elem, textData) {
|
||||
var prevTextHeight = 0,
|
||||
textHeight = 0;
|
||||
var lines = textData.wrap ? textData.text.split(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex) : [textData.text.replace(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex, ' ')];
|
||||
var lines = textData.text.split(_common_common__WEBPACK_IMPORTED_MODULE_0__["default"].lineBreakRegex);
|
||||
var textElems = [];
|
||||
var dy = 0;
|
||||
|
||||
|
6
dist/mermaid.js.map
vendored
6
dist/mermaid.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/mermaid.min.js
vendored
4
dist/mermaid.min.js
vendored
File diff suppressed because one or more lines are too long
6
dist/mermaid.min.js.map
vendored
6
dist/mermaid.min.js.map
vendored
File diff suppressed because one or more lines are too long
@ -1,6 +1,5 @@
|
||||
import mermaidAPI from '../../mermaidAPI';
|
||||
import * as configApi from '../../config';
|
||||
import common from '../common/common';
|
||||
import { logger } from '../../logger';
|
||||
|
||||
let prevActor = undefined;
|
||||
@ -138,9 +137,7 @@ export const parseMessage = function(str) {
|
||||
const message = {
|
||||
text: _str.replace(/^[:]?(?:no)?wrap:/, '').trim(),
|
||||
wrap:
|
||||
_str.match(/^[:]?(?:no)?wrap:/) === null
|
||||
? common.hasBreaks(_str) || undefined
|
||||
: _str.match(/^[:]?wrap:/) !== null
|
||||
_str.match(/^[:]?wrap:/) !== null
|
||||
? true
|
||||
: _str.match(/^[:]?nowrap:/) !== null
|
||||
? false
|
||||
|
@ -442,6 +442,87 @@ note right of 1: multiline<br \t/>text
|
||||
expect(messages[6].message).toBe('multiline<br \t/>text');
|
||||
expect(messages[7].message).toBe('multiline<br \t/>text');
|
||||
});
|
||||
it('it should handle notes and messages without wrap specified', function () {
|
||||
const str = `
|
||||
sequenceDiagram
|
||||
participant 1
|
||||
participant 2
|
||||
participant 3
|
||||
participant 4
|
||||
1->>2: single-line text
|
||||
note right of 2: single-line text
|
||||
2->>3:nowrap: single-line text
|
||||
note right of 3:nowrap: single-line text
|
||||
3->>4: multiline<br/>text
|
||||
note right of 4: multiline<br/>text
|
||||
4->>1:nowrap: multiline<br/>text
|
||||
note right of 1:nowrap: multiline<br/>text
|
||||
`;
|
||||
|
||||
mermaidAPI.parse(str);
|
||||
|
||||
const messages = parser.yy.getMessages();
|
||||
expect(messages[0].message).toBe('single-line text');
|
||||
expect(messages[1].message).toBe('single-line text');
|
||||
expect(messages[2].message).toBe('single-line text');
|
||||
expect(messages[3].message).toBe('single-line text');
|
||||
expect(messages[4].message).toBe('multiline<br/>text');
|
||||
expect(messages[5].message).toBe('multiline<br/>text');
|
||||
expect(messages[6].message).toBe('multiline<br/>text');
|
||||
expect(messages[7].message).toBe('multiline<br/>text');
|
||||
|
||||
// wrap indicates whether wrap is specified
|
||||
expect(messages[0].wrap).toBe(false);
|
||||
expect(messages[1].wrap).toBe(false);
|
||||
expect(messages[2].wrap).toBe(false);
|
||||
expect(messages[3].wrap).toBe(false);
|
||||
expect(messages[4].wrap).toBe(false);
|
||||
expect(messages[5].wrap).toBe(false);
|
||||
expect(messages[6].wrap).toBe(false);
|
||||
expect(messages[7].wrap).toBe(false);
|
||||
})
|
||||
it('it should handle notes and messages with wrap specified', function () {
|
||||
const str = `
|
||||
sequenceDiagram
|
||||
participant 1
|
||||
participant 2
|
||||
participant 3
|
||||
participant 4
|
||||
1->>2:wrap: single-line text
|
||||
note right of 2:wrap: single-line text
|
||||
2->>3:wrap: multiline<br/>text
|
||||
note right of 3:wrap: multiline<br/>text
|
||||
`;
|
||||
|
||||
mermaidAPI.parse(str);
|
||||
|
||||
const messages = parser.yy.getMessages();
|
||||
expect(messages[0].message).toBe('single-line text');
|
||||
expect(messages[1].message).toBe('single-line text');
|
||||
expect(messages[2].message).toBe('multiline<br/>text');
|
||||
expect(messages[3].message).toBe('multiline<br/>text');
|
||||
expect(messages[0].wrap).toBe(true);
|
||||
expect(messages[1].wrap).toBe(true);
|
||||
expect(messages[2].wrap).toBe(true);
|
||||
expect(messages[3].wrap).toBe(true);
|
||||
})
|
||||
it('it should handle notes and messages with nowrap or line breaks', function () {
|
||||
const str = `
|
||||
sequenceDiagram
|
||||
participant 1
|
||||
participant 2
|
||||
1->>2: single-line text
|
||||
note right of 2: single-line text
|
||||
`;
|
||||
|
||||
mermaidAPI.parse(str);
|
||||
|
||||
const messages = parser.yy.getMessages();
|
||||
expect(messages[0].message).toBe('single-line text');
|
||||
expect(messages[1].message).toBe('single-line text');
|
||||
expect(messages[0].wrap).toBe(false);
|
||||
expect(messages[1].wrap).toBe(false);
|
||||
})
|
||||
it('it should handle notes over a single actor', function() {
|
||||
const str = `
|
||||
sequenceDiagram
|
||||
|
@ -226,7 +226,6 @@ const drawNote = function(elem, noteModel) {
|
||||
textObj.anchor = conf.noteAlign;
|
||||
textObj.textMargin = conf.noteMargin;
|
||||
textObj.valign = conf.noteAlign;
|
||||
textObj.wrap = true;
|
||||
|
||||
let textElem = drawText(g, textObj);
|
||||
|
||||
@ -272,7 +271,7 @@ const actorFont = cnf => {
|
||||
*/
|
||||
const drawMessage = function(g, msgModel) {
|
||||
bounds.bumpVerticalPos(10);
|
||||
const { startx, stopx, starty, message, type, sequenceIndex, wrap } = msgModel;
|
||||
const { startx, stopx, starty, message, type, sequenceIndex } = msgModel;
|
||||
const lines = common.splitBreaks(message).length;
|
||||
let textDims = utils.calculateTextDimensions(message, messageFont(conf));
|
||||
const lineHeight = textDims.height / lines;
|
||||
@ -293,7 +292,6 @@ const drawMessage = function(g, msgModel) {
|
||||
textObj.valign = conf.messageAlign;
|
||||
textObj.textMargin = conf.wrapPadding;
|
||||
textObj.tspan = false;
|
||||
textObj.wrap = wrap;
|
||||
|
||||
drawText(g, textObj);
|
||||
|
||||
@ -971,7 +969,6 @@ const buildMessageModel = function(msg, actors) {
|
||||
const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;
|
||||
const allBounds = fromBounds.concat(toBounds);
|
||||
const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);
|
||||
const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf));
|
||||
if (msg.wrap && msg.message) {
|
||||
msg.message = utils.wrapLabel(
|
||||
msg.message,
|
||||
@ -979,6 +976,8 @@ const buildMessageModel = function(msg, actors) {
|
||||
messageFont(conf)
|
||||
);
|
||||
}
|
||||
const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf));
|
||||
|
||||
return {
|
||||
width: Math.max(
|
||||
msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,
|
||||
|
@ -21,9 +21,7 @@ export const drawRect = function(elem, rectData) {
|
||||
export const drawText = function(elem, textData) {
|
||||
let prevTextHeight = 0,
|
||||
textHeight = 0;
|
||||
const lines = textData.wrap
|
||||
? textData.text.split(common.lineBreakRegex)
|
||||
: [textData.text.replace(common.lineBreakRegex, ' ')];
|
||||
const lines = textData.text.split(common.lineBreakRegex);
|
||||
|
||||
let textElems = [];
|
||||
let dy = 0;
|
||||
|
@ -49,6 +49,58 @@ describe('svgDraw', function() {
|
||||
expect(rect.attr).not.toHaveBeenCalledWith('class', expect.anything());
|
||||
});
|
||||
});
|
||||
describe('drawText', function() {
|
||||
it('it should append a single element', function() {
|
||||
const svg = MockD3('svg');
|
||||
svgDraw.drawText(svg, {
|
||||
x: 10,
|
||||
y: 10,
|
||||
dy: '1em',
|
||||
text: 'One fine text message',
|
||||
class: 'noteText',
|
||||
fontFamily: 'courier',
|
||||
fontSize: '10px',
|
||||
fontWeight: '500',
|
||||
});
|
||||
expect(svg.__children.length).toBe(1);
|
||||
const text = svg.__children[0];
|
||||
expect(text.__name).toBe('text');
|
||||
expect(text.attr).toHaveBeenCalledWith('x', 10);
|
||||
expect(text.attr).toHaveBeenCalledWith('y', 10);
|
||||
expect(text.attr).toHaveBeenCalledWith('dy', '1em');
|
||||
expect(text.attr).toHaveBeenCalledWith('class', 'noteText');
|
||||
expect(text.text).toHaveBeenCalledWith('One fine text message');
|
||||
expect(text.style).toHaveBeenCalledWith('font-family', 'courier');
|
||||
expect(text.style).toHaveBeenCalledWith('font-size', '10px');
|
||||
expect(text.style).toHaveBeenCalledWith('font-weight', '500');
|
||||
});
|
||||
it('it should append a multiple elements', function() {
|
||||
const svg = MockD3('svg');
|
||||
svgDraw.drawText(svg, {
|
||||
x: 10,
|
||||
y: 10,
|
||||
text: 'One fine text message<br>with multiple<br>fine lines',
|
||||
});
|
||||
expect(svg.__children.length).toBe(3);
|
||||
const text1 = svg.__children[0];
|
||||
expect(text1.__name).toBe('text');
|
||||
expect(text1.attr).toHaveBeenCalledWith('x', 10);
|
||||
expect(text1.attr).toHaveBeenCalledWith('y', 10);
|
||||
expect(text1.text).toHaveBeenCalledWith('One fine text message');
|
||||
|
||||
const text2 = svg.__children[1];
|
||||
expect(text2.__name).toBe('text');
|
||||
expect(text2.attr).toHaveBeenCalledWith('x', 10);
|
||||
expect(text2.attr).toHaveBeenCalledWith('y', 10);
|
||||
expect(text2.text).toHaveBeenCalledWith('with multiple');
|
||||
|
||||
const text3 = svg.__children[2];
|
||||
expect(text3.__name).toBe('text');
|
||||
expect(text3.attr).toHaveBeenCalledWith('x', 10);
|
||||
expect(text3.attr).toHaveBeenCalledWith('y', 10);
|
||||
expect(text3.text).toHaveBeenCalledWith('fine lines');
|
||||
});
|
||||
});
|
||||
describe('drawBackgroundRect', function() {
|
||||
it('it should append a rect before the previous element within a given bound', function() {
|
||||
const svg = MockD3('svg');
|
||||
|
Loading…
x
Reference in New Issue
Block a user