test: add tests for sequence diagram text wrap updates

This commit is contained in:
Johnny Walker
2020-12-12 02:01:40 -05:00
parent 2a5b029ecc
commit 0fe1fb76d1
3 changed files with 153 additions and 0 deletions

View File

@@ -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

View File

@@ -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');