Skip to content

Commit

Permalink
Merge pull request #470 from u-minor/support_parallel
Browse files Browse the repository at this point in the history
add par statement to sequenceDiagram
  • Loading branch information
knsv authored Apr 1, 2017
2 parents 96be322 + 3b9baeb commit 63057c2
Show file tree
Hide file tree
Showing 7 changed files with 204 additions and 69 deletions.
16 changes: 16 additions & 0 deletions src/diagrams/sequenceDiagram/parser/sequenceDiagram.jison
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
"opt" { this.begin('LINE'); return 'opt'; }
"alt" { this.begin('LINE'); return 'alt'; }
"else" { this.begin('LINE'); return 'else'; }
"par" { this.begin('LINE'); return 'par'; }
"and" { this.begin('LINE'); return 'and'; }
<LINE>[^#\n;]* { this.popState(); return 'restOfLine'; }
"end" return 'end';
"left of" return 'left_of';
Expand Down Expand Up @@ -115,6 +117,20 @@ statement
$3.push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});
$$=$3;}
| par restOfLine par_sections end
{
// Parallel start
$3.unshift({type: 'parStart', parText:$2, signalType: yy.LINETYPE.PAR_START});
// Content in par is already in $3
// End
$3.push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});
$$=$3;}
;

par_sections
: document
| document and restOfLine par_sections
{ $$ = $1.concat([{type: 'and', parText:$3, signalType: yy.LINETYPE.PAR_AND}, $4]); }
;

note_statement
Expand Down
124 changes: 68 additions & 56 deletions src/diagrams/sequenceDiagram/parser/sequenceDiagram.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 14 additions & 1 deletion src/diagrams/sequenceDiagram/sequenceDb.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ exports.LINETYPE = {
OPT_START : 15 ,
OPT_END : 16 ,
ACTIVE_START : 17 ,
ACTIVE_END : 18
ACTIVE_END : 18 ,
PAR_START : 19 ,
PAR_AND : 20 ,
PAR_END : 21
};

exports.ARROWTYPE = {
Expand Down Expand Up @@ -156,6 +159,16 @@ exports.apply = function(param){
break;
case 'setTitle':
exports.setTitle(param.text);
break;
case 'parStart':
exports.addSignal(undefined, undefined, param.parText, param.signalType);
break;
case 'and':
exports.addSignal(undefined, undefined, param.parText, param.signalType);
break;
case 'parEnd':
exports.addSignal(undefined, undefined, undefined, param.signalType);
break;
}
}
};
58 changes: 58 additions & 0 deletions src/diagrams/sequenceDiagram/sequenceDiagram.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,32 @@ describe('when parsing a sequenceDiagram',function() {
expect(messages[0].from).toBe('Alice');
expect(messages[1].from).toBe('Bob');
});
it('it should handle par statements a sequenceDiagram', function () {
var str = 'sequenceDiagram\n' +
'par Parallel one\n' +
'Alice->>Bob: Hello Bob, how are you?\n' +
'Bob-->>Alice: I am good thanks!\n' +
'and Parallel two\n' +
'Alice->>Bob: Are you OK?\n' +
'Bob-->>Alice: Fine!\n' +
'and Parallel three\n' +
'Alice->>Bob: What do you think about it?\n' +
'Bob-->>Alice: It\'s good!\n' +
'end';

sq.parse(str);
var actors = sq.yy.getActors();

expect(actors.Alice.description).toBe('Alice');
expect(actors.Bob.description).toBe('Bob');

var messages = sq.yy.getMessages();

expect(messages.length).toBe(10);
expect(messages[0].message).toBe('Parallel one');
expect(messages[1].from).toBe('Alice');
expect(messages[2].from).toBe('Bob');
});
it('it should handle special characters in signals', function () {
var str = 'sequenceDiagram\n' +
'Alice->Bob: -:<>,;# comment';
Expand Down Expand Up @@ -506,6 +532,21 @@ describe('when parsing a sequenceDiagram',function() {
expect(messages[1].message).toBe('-:<>,');
expect(messages[3].message).toBe(',<>:-');
});
it('it should handle special characters in par', function () {
var str = 'sequenceDiagram\n' +
'Alice->Bob: Hello Bob, how are you?\n' +
'par -:<>,;# comment\n' +
'Bob-->Alice: I am good thanks!\n' +
'and ,<>:-#; comment\n' +
'Bob-->Alice: I am good thanks!\n' +
'end';

sq.parse(str);

var messages = sq.yy.getMessages();
expect(messages[1].message).toBe('-:<>,');
expect(messages[3].message).toBe(',<>:-');
});
it('it should handle no-label loop', function () {
var str = 'sequenceDiagram\n' +
'Alice->Bob: Hello Bob, how are you?\n' +
Expand Down Expand Up @@ -543,6 +584,23 @@ describe('when parsing a sequenceDiagram',function() {

sq.parse(str);

var messages = sq.yy.getMessages();
expect(messages[1].message).toBe('');
expect(messages[2].message).toBe('I am good thanks!');
expect(messages[3].message).toBe('');
expect(messages[4].message).toBe('I am good thanks!');
});
it('it should handle no-label par', function () {
var str = 'sequenceDiagram\n' +
'Alice->Bob: Hello Bob, how are you?\n' +
'par;' +
'Bob-->Alice: I am good thanks!\n' +
'and # comment\n' +
'Bob-->Alice: I am good thanks!\n' +
'end';

sq.parse(str);

var messages = sq.yy.getMessages();
expect(messages[1].message).toBe('');
expect(messages[2].message).toBe('I am good thanks!');
Expand Down
Loading

0 comments on commit 63057c2

Please sign in to comment.