26.8 KB1038 lines
Blame
1import { imgSnapshotTest } from '../../helpers/util.ts';
2describe('Class diagram V3 ELK', () => {
3 it('ELK-0: should render a simple class diagram', () => {
4 imgSnapshotTest(
5 `
6 classDiagram
7
8 classA -- classB : Inheritance
9 classA -- classC : link
10 classC -- classD : link
11 classB -- classD
12
13 `,
14 { logLevel: 1, htmlLabels: true, layout: 'elk' }
15 );
16 });
17
18 it('ELK-1: should render a simple class diagram', () => {
19 imgSnapshotTest(
20 `
21 classDiagram
22 Class01 <|-- AveryLongClass : Cool
23 &lt;&lt;interface&gt;&gt; Class01
24 Class03 *-- Class04
25 Class05 o-- Class06
26 Class07 .. Class08
27 Class09 --> C2 : Where am i?
28 Class09 --* C3
29 Class09 --|> Class07
30 Class12 <|.. Class08
31 Class11 ..>Class12
32 Class07 : equals()
33 Class07 : Object[] elementData
34 Class01 : size()
35 Class01 : int chimp
36 Class01 : int gorilla
37 Class01 : -int privateChimp
38 Class01 : +int publicGorilla
39 Class01 : #int protectedMarmoset
40 Class08 <--> C2: Cool label
41 class Class10 {
42 &lt;&lt;service&gt;&gt;
43 int id
44 test()
45 }
46 `,
47 { logLevel: 1, htmlLabels: true, layout: 'elk' }
48 );
49 });
50
51 it('ELK-1.1: should render a simple class diagram without htmlLabels', () => {
52 imgSnapshotTest(
53 `
54 classDiagram
55 Class01 <|-- AveryLongClass : Cool
56 &lt;&lt;interface&gt;&gt; Class01
57 Class03 *-- Class04
58 Class05 o-- Class06
59 Class07 .. Class08
60 Class09 --> C2 : Where am i?
61 Class09 --* C3
62 Class09 --|> Class07
63 Class12 <|.. Class08
64 Class11 ..>Class12
65 Class07 : equals()
66 Class07 : Object[] elementData
67 Class01 : size()
68 Class01 : int chimp
69 Class01 : int gorilla
70 Class01 : -int privateChimp
71 Class01 : +int publicGorilla
72 Class01 : #int protectedMarmoset
73 Class08 <--> C2: Cool label
74 class Class10 {
75 &lt;&lt;service&gt;&gt;
76 int id
77 test()
78 }
79 `,
80 { logLevel: 1, htmlLabels: false, layout: 'elk' }
81 );
82 });
83
84 it('ELK-2: should render a simple class diagrams with cardinality', () => {
85 imgSnapshotTest(
86 `
87 classDiagram
88 Class01 "1" <|--|> "*" AveryLongClass : Cool
89 &lt;&lt;interface&gt;&gt; Class01
90 Class03 "1" *-- "*" Class04
91 Class05 "1" o-- "many" Class06
92 Class07 "1" .. "*" Class08
93 Class09 "1" --> "*" C2 : Where am i?
94 Class09 "*" --* "*" C3
95 Class09 "1" --|> "1" Class07
96 Class07 : equals()
97 Class07 : Object[] elementData
98 Class01 : size()
99 Class01 : int chimp
100 Class01 : int gorilla
101 Class08 "1" <--> "*" C2: Cool label
102 class Class10 {
103 &lt;&lt;service&gt;&gt;
104 int id
105 test()
106 }
107 `,
108 { logLevel: 1, htmlLabels: true, layout: 'elk' }
109 );
110 });
111
112 it('ELK-2.1: should render a simple class diagrams with cardinality without htmlLabels', () => {
113 imgSnapshotTest(
114 `
115 classDiagram
116 Class01 "1" <|--|> "*" AveryLongClass : Cool
117 &lt;&lt;interface&gt;&gt; Class01
118 Class03 "1" *-- "*" Class04
119 Class05 "1" o-- "many" Class06
120 Class07 "1" .. "*" Class08
121 Class09 "1" --> "*" C2 : Where am i?
122 Class09 "*" --* "*" C3
123 Class09 "1" --|> "1" Class07
124 Class07 : equals()
125 Class07 : Object[] elementData
126 Class01 : size()
127 Class01 : int chimp
128 Class01 : int gorilla
129 Class08 "1" <--> "*" C2: Cool label
130 class Class10 {
131 &lt;&lt;service&gt;&gt;
132 int id
133 test()
134 }
135 `,
136 { logLevel: 1, htmlLabels: false, layout: 'elk' }
137 );
138 });
139
140 it('ELK-2.2 should render a simple class diagram with different visibilities', () => {
141 imgSnapshotTest(
142 `
143 classDiagram
144 Class01 <|-- AveryLongClass : Cool
145 &lt;&lt;interface&gt;&gt; Class01
146 Class01 : -privateMethod()
147 Class01 : +publicMethod()
148 Class01 : #protectedMethod()
149 Class01 : -int privateChimp
150 Class01 : +int publicGorilla
151 Class01 : #int protectedMarmoset
152 `,
153 { logLevel: 1, htmlLabels: true, layout: 'elk' }
154 );
155 });
156 it('ELK-2.3 should render a simple class diagram with different visibilities without htmlLabels', () => {
157 imgSnapshotTest(
158 `
159 classDiagram
160 Class01 <|-- AveryLongClass : Cool
161 &lt;&lt;interface&gt;&gt; Class01
162 Class01 : -privateMethod()
163 Class01 : +publicMethod()
164 Class01 : #protectedMethod()
165 Class01 : -int privateChimp
166 Class01 : +int publicGorilla
167 Class01 : #int protectedMarmoset
168 `,
169 { logLevel: 1, htmlLabels: false, layout: 'elk' }
170 );
171 });
172
173 it('ELK-3: should render multiple class diagrams', () => {
174 imgSnapshotTest(
175 [
176 `
177 classDiagram
178 Class01 "1" <|--|> "*" AveryLongClass : Cool
179 &lt;&lt;interface&gt;&gt; Class01
180 Class03 "1" *-- "*" Class04
181 Class05 "1" o-- "many" Class06
182 Class07 "1" .. "*" Class08
183 Class09 "1" --> "*" C2 : Where am i?
184 Class09 "*" --* "*" C3
185 Class09 "1" --|> "1" Class07
186 Class07 : equals()
187 Class07 : Object[] elementData
188 Class01 : size()
189 Class01 : int chimp
190 Class01 : int gorilla
191 Class08 "1" <--> "*" C2: Cool label
192 class Class10 {
193 &lt;&lt;service&gt;&gt;
194 int id
195 test()
196 }
197 `,
198 `
199 classDiagram
200 Class01 "1" <|--|> "*" AveryLongClass : Cool
201 &lt;&lt;interface&gt;&gt; Class01
202 Class03 "1" *-- "*" Class04
203 Class05 "1" o-- "many" Class06
204 Class07 "1" .. "*" Class08
205 Class09 "1" --> "*" C2 : Where am i?
206 Class09 "*" --* "*" C3
207 Class09 "1" --|> "1" Class07
208 Class07 : equals()
209 Class07 : Object[] elementData
210 Class01 : size()
211 Class01 : int chimp
212 Class01 : int gorilla
213 Class08 "1" <--> "*" C2: Cool label
214 class Class10 {
215 &lt;&lt;service&gt;&gt;
216 int id
217 test()
218 }
219 `,
220 ],
221 { logLevel: 1, htmlLabels: true, layout: 'elk' }
222 );
223 });
224
225 it('ELK-4: should render a simple class diagram with comments', () => {
226 imgSnapshotTest(
227 `
228 classDiagram
229 %% this is a comment
230 Class01 <|-- AveryLongClass : Cool
231 &lt;&lt;interface&gt;&gt; Class01
232 Class03 *-- Class04
233 Class05 o-- Class06
234 Class07 .. Class08
235 Class09 --> C2 : Where am i?
236 Class09 --* C3
237 Class09 --|> Class07
238 Class07 : equals()
239 Class07 : Object[] elementData
240 Class01 : size()
241 Class01 : int chimp
242 Class01 : int gorilla
243 Class08 <--> C2: Cool label
244 class Class10 {
245 &lt;&lt;service&gt;&gt;
246 int id
247 test()
248 }
249 `,
250 { logLevel: 1, htmlLabels: true, layout: 'elk' }
251 );
252 });
253
254 it('ELK-5: should render a simple class diagram with abstract method', () => {
255 imgSnapshotTest(
256 `
257 classDiagram
258 Class01 <|-- AveryLongClass : Cool
259 Class01 : someMethod()*
260 `,
261 { logLevel: 1, htmlLabels: true, layout: 'elk' }
262 );
263 });
264
265 it('ELK-5.1: should render a simple class diagram with abstract method without htmlLabels', () => {
266 imgSnapshotTest(
267 `
268 classDiagram
269 Class01 <|-- AveryLongClass : Cool
270 Class01 : someMethod()*
271 `,
272 { logLevel: 1, htmlLabels: false, layout: 'elk' }
273 );
274 });
275
276 it('ELK-6: should render a simple class diagram with static method', () => {
277 imgSnapshotTest(
278 `
279 classDiagram
280 Class01 <|-- AveryLongClass : Cool
281 Class01 : someMethod()$
282 `,
283 { logLevel: 1, htmlLabels: true, layout: 'elk' }
284 );
285 });
286
287 it('ELK-6.1: should render a simple class diagram with static method without htmlLabels', () => {
288 imgSnapshotTest(
289 `
290 classDiagram
291 Class01 <|-- AveryLongClass : Cool
292 Class01 : someMethod()$
293 `,
294 { logLevel: 1, htmlLabels: false, layout: 'elk' }
295 );
296 });
297
298 it('ELK-7: should render a simple class diagram with Generic class', () => {
299 imgSnapshotTest(
300 `
301 classDiagram
302 class Class01~T~
303 Class01 : size()
304 Class01 : int chimp
305 Class01 : int gorilla
306 Class08 <--> C2: Cool label
307 class Class10~T~ {
308 &lt;&lt;service&gt;&gt;
309 int id
310 test()
311 }
312 `,
313 { logLevel: 1, htmlLabels: true, layout: 'elk' }
314 );
315 });
316
317 it('ELK-7.1: should render a simple class diagram with Generic class without htmlLabels', () => {
318 imgSnapshotTest(
319 `
320 classDiagram
321 class Class01~T~
322 Class01 : size()
323 Class01 : int chimp
324 Class01 : int gorilla
325 Class08 <--> C2: Cool label
326 class Class10~T~ {
327 &lt;&lt;service&gt;&gt;
328 int id
329 test()
330 }
331 `,
332 { logLevel: 1, htmlLabels: false, layout: 'elk' }
333 );
334 });
335
336 it('ELK-8: should render a simple class diagram with Generic class and relations', () => {
337 imgSnapshotTest(
338 `
339 classDiagram
340 Class01~T~ <|-- AveryLongClass : Cool
341 Class03~T~ *-- Class04~T~
342 Class01 : size()
343 Class01 : int chimp
344 Class01 : int gorilla
345 Class08 <--> C2: Cool label
346 class Class10~T~ {
347 &lt;&lt;service&gt;&gt;
348 int id
349 test()
350 }
351 `,
352 { logLevel: 1, htmlLabels: true, layout: 'elk' }
353 );
354 });
355
356 it('ELK-9: should render a simple class diagram with clickable link', () => {
357 imgSnapshotTest(
358 `
359 classDiagram
360 Class01~T~ <|-- AveryLongClass : Cool
361 Class03~T~ *-- Class04~T~
362 Class01 : size()
363 Class01 : int chimp
364 Class01 : int gorilla
365 Class08 <--> C2: Cool label
366 class Class10~T~ {
367 &lt;&lt;service&gt;&gt;
368 int id
369 test()
370 }
371 link Class01 "google.com" "A Tooltip"
372 `,
373 { logLevel: 1, htmlLabels: true, layout: 'elk' }
374 );
375 });
376
377 it('ELK-10: should render a simple class diagram with clickable callback', () => {
378 imgSnapshotTest(
379 `
380 classDiagram
381 Class01~T~ <|-- AveryLongClass : Cool
382 Class03~T~ *-- Class04~T~
383 Class01 : size()
384 Class01 : int chimp
385 Class01 : int gorilla
386 Class08 <--> C2: Cool label
387 class Class10~T~ {
388 &lt;&lt;service&gt;&gt;
389 int id
390 test()
391 }
392 callback Class01 "functionCall" "A Tooltip"
393 `,
394 { logLevel: 1, htmlLabels: true, layout: 'elk' }
395 );
396 });
397
398 it('ELK-11: should render a simple class diagram with return type on method', () => {
399 imgSnapshotTest(
400 `
401 classDiagram
402 class Class10~T~ {
403 int[] id
404 test(int[] ids) bool
405 testArray() bool[]
406 }
407 `,
408 { logLevel: 1, htmlLabels: true, layout: 'elk' }
409 );
410 });
411
412 it('ELK-11.1: should render a simple class diagram with return type on method without htmlLabels', () => {
413 imgSnapshotTest(
414 `
415 classDiagram
416 class Class10~T~ {
417 int[] id
418 test(int[] ids) bool
419 testArray() bool[]
420 }
421 `,
422 { logLevel: 1, htmlLabels: false, layout: 'elk' }
423 );
424 });
425
426 it('ELK-12: should render a simple class diagram with generic types', () => {
427 imgSnapshotTest(
428 `
429 classDiagram
430 class Class10~T~ {
431 int[] id
432 List~int~ ids
433 test(List~int~ ids) List~bool~
434 testArray() bool[]
435 }
436 `,
437 { logLevel: 1, htmlLabels: true, layout: 'elk' }
438 );
439 });
440
441 it('ELK-12.1: should render a simple class diagram with generic types without htmlLabels', () => {
442 imgSnapshotTest(
443 `
444 classDiagram
445 class Class10~T~ {
446 int[] id
447 List~int~ ids
448 test(List~int~ ids) List~bool~
449 testArray() bool[]
450 }
451 `,
452 { logLevel: 1, htmlLabels: false, layout: 'elk' }
453 );
454 });
455
456 it('ELK-13: should render a simple class diagram with css classes applied', () => {
457 imgSnapshotTest(
458 `
459 classDiagram
460 class Class10 {
461 int[] id
462 List~int~ ids
463 test(List~int~ ids) List~bool~
464 testArray() bool[]
465 }
466
467 cssClass "Class10" exClass2
468 `,
469 { logLevel: 1, htmlLabels: true, layout: 'elk' }
470 );
471 });
472
473 it('ELK-14: should render a simple class diagram with css classes applied directly', () => {
474 imgSnapshotTest(
475 `
476 classDiagram
477 class Class10:::exClass2 {
478 int[] id
479 List~int~ ids
480 test(List~int~ ids) List~bool~
481 testArray() bool[]
482 }
483 `,
484 { logLevel: 1, htmlLabels: true, layout: 'elk' }
485 );
486 });
487
488 it('ELK-15: should render a simple class diagram with css classes applied two multiple classes', () => {
489 imgSnapshotTest(
490 `
491 classDiagram
492 class Class10
493 class Class20
494
495 cssClass "Class10, class20" exClass2
496 `,
497 { logLevel: 1, htmlLabels: true, layout: 'elk' }
498 );
499 });
500
501 it('ELK-16a: should render a simple class diagram with static field', () => {
502 imgSnapshotTest(
503 `
504 classDiagram
505 class Foo {
506 +String bar$
507 }
508 `,
509 { logLevel: 1, htmlLabels: true, layout: 'elk' }
510 );
511 });
512
513 it('ELK-16b: should handle the direction statement with TB', () => {
514 imgSnapshotTest(
515 `
516 classDiagram
517 direction TB
518 class Student {
519 -idCard : IdCard
520 }
521 class IdCard{
522 -id : int
523 -name : string
524 }
525 class Bike{
526 -id : int
527 -name : string
528 }
529 Student "1" --o "1" IdCard : carries
530 Student "1" --o "1" Bike : rides
531
532 `,
533 { logLevel: 1, htmlLabels: true, layout: 'elk' }
534 );
535 });
536 it('ELK-17a: should handle the direction statement with BT', () => {
537 imgSnapshotTest(
538 `
539 classDiagram
540 direction BT
541 class Student {
542 -idCard : IdCard
543 }
544 class IdCard{
545 -id : int
546 -name : string
547 }
548 class Bike{
549 -id : int
550 -name : string
551 }
552 Student "1" --o "1" IdCard : carries
553 Student "1" --o "1" Bike : rides
554
555 `,
556 { logLevel: 1, htmlLabels: true, layout: 'elk' }
557 );
558 });
559 it('ELK-17b: should handle the direction statement with RL', () => {
560 imgSnapshotTest(
561 `
562 classDiagram
563 direction RL
564 class Student {
565 -idCard : IdCard
566 }
567 class IdCard{
568 -id : int
569 -name : string
570 }
571 class Bike{
572 -id : int
573 -name : string
574 }
575 Student "1" --o "1" IdCard : carries
576 Student "1" --o "1" Bike : rides
577
578 `,
579 { logLevel: 1, htmlLabels: true, layout: 'elk' }
580 );
581 });
582
583 it('ELK-18a: should handle the direction statement with LR', () => {
584 imgSnapshotTest(
585 `
586 classDiagram
587 direction LR
588 class Student {
589 -idCard : IdCard
590 }
591 class IdCard{
592 -id : int
593 -name : string
594 }
595 class Bike{
596 -id : int
597 -name : string
598 }
599 Student "1" --o "1" IdCard : carries
600 Student "1" --o "1" Bike : rides
601
602 `,
603 { logLevel: 1, htmlLabels: true, layout: 'elk' }
604 );
605 });
606
607 it('ELK-18b: should render a simple class diagram with notes', () => {
608 imgSnapshotTest(
609 `
610 classDiagram
611 note "I love this diagram!\nDo you love it?"
612 class Class10 {
613 int id
614 size()
615 }
616 note for Class10 "Cool class\nI said it's very cool class!"
617
618 `,
619 { logLevel: 1, htmlLabels: true, layout: 'elk' }
620 );
621 });
622
623 it('ELK-1433: should render a simple class with a title', () => {
624 imgSnapshotTest(
625 `---
626title: simple class diagram
627---
628classDiagram
629class Class10
630`,
631 { logLevel: 1, htmlLabels: true, layout: 'elk' }
632 );
633 });
634
635 it('ELK: should render a class with text label', () => {
636 imgSnapshotTest(
637 `classDiagram
638 class C1["Class 1 with text label"]
639 C1 --> C2`,
640 { logLevel: 1, htmlLabels: true, layout: 'elk' }
641 );
642 });
643
644 it('ELK: should render two classes with text labels', () => {
645 imgSnapshotTest(
646 `classDiagram
647 class C1["Class 1 with text label"]
648 class C2["Class 2 with chars @?"]
649 C1 --> C2`,
650 { logLevel: 1, htmlLabels: true, layout: 'elk' }
651 );
652 });
653 it('ELK: should render a class with a text label, members and annotation', () => {
654 imgSnapshotTest(
655 `classDiagram
656 class C1["Class 1 with text label"] {
657 &lt;&lt;interface&gt;&gt;
658 +member1
659 }
660 C1 --> C2`,
661 { logLevel: 1, htmlLabels: true, layout: 'elk' }
662 );
663 });
664 it('ELK: should render multiple classes with same text labels', () => {
665 imgSnapshotTest(
666 `classDiagram
667 class C1["Class with text label"]
668 class C2["Class with text label"]
669 class C3["Class with text label"]
670 C1 --> C2
671 C3 ..> C2
672 `,
673 { logLevel: 1, htmlLabels: true, layout: 'elk' }
674 );
675 });
676 it('ELK: should render classes with different text labels', () => {
677 imgSnapshotTest(
678 `classDiagram
679 class C1["OneWord"]
680 class C2["With, Comma"]
681 class C3["With (Brackets)"]
682 class C4["With [Brackets]"]
683 class C5["With {Brackets}"]
684 class C7["With 1 number"]
685 class C8["With . period..."]
686 class C9["With - dash"]
687 class C10["With _ underscore"]
688 class C11["With ' single quote"]
689 class C12["With ~!@#$%^&*()_+=-/?"]
690 class C13["With Città foreign language"]
691 `,
692 { logLevel: 1, htmlLabels: true, layout: 'elk' }
693 );
694 });
695
696 it('ELK: should render classLabel if class has already been defined earlier', () => {
697 imgSnapshotTest(
698 `classDiagram
699 Animal <|-- Duck
700 class Duck["Duck with text label"]
701 `,
702 { logLevel: 1, htmlLabels: true, layout: 'elk' }
703 );
704 });
705 it('ELK: should add classes namespaces', function () {
706 imgSnapshotTest(
707 `
708 classDiagram
709 namespace Namespace1 {
710 class C1
711 class C2
712 }
713 C1 --> C2
714 class C3
715 class C4
716 `,
717 { logLevel: 1, htmlLabels: true, layout: 'elk' }
718 );
719 });
720 it('ELK: should render a simple class diagram with no members', () => {
721 imgSnapshotTest(
722 `
723 classDiagram
724 class Class10
725 `,
726 { logLevel: 1, htmlLabels: true, layout: 'elk' }
727 );
728 });
729 it('ELK: should render a simple class diagram with no members if hideEmptyMembersBox is enabled', () => {
730 imgSnapshotTest(
731 `
732 classDiagram
733 class Class10
734 `,
735 { logLevel: 1, class: { htmlLabels: true, hideEmptyMembersBox: true }, layout: 'elk' }
736 );
737 });
738 it('ELK: should render a simple class diagram with no attributes, only methods', () => {
739 imgSnapshotTest(
740 `
741 classDiagram
742 class Duck {
743 +swim()
744 +quack()
745 }
746 `,
747 { logLevel: 1, htmlLabels: true, layout: 'elk' }
748 );
749 });
750 it('ELK: should render a simple class diagram with no methods, only attributes', () => {
751 imgSnapshotTest(
752 `
753 classDiagram
754 class Duck {
755 +String beakColor
756 +int age
757 +float weight
758 }
759 `,
760 { logLevel: 1, htmlLabels: true, layout: 'elk' }
761 );
762 });
763 it('ELK: should render a simple class diagram with style definition', () => {
764 imgSnapshotTest(
765 `
766 classDiagram
767 class Class10
768 style Class10 fill:#f9f,stroke:#333,stroke-width:4px
769 `,
770 { logLevel: 1, htmlLabels: true, layout: 'elk' }
771 );
772 });
773 it('ELK: should render a simple class diagram with style definition without htmlLabels', () => {
774 imgSnapshotTest(
775 `
776 classDiagram
777 class Class10
778 style Class10 fill:#f9f,stroke:#333,stroke-width:4px
779 `,
780 { logLevel: 1, htmlLabels: false, layout: 'elk' }
781 );
782 });
783 it('ELK: should render a simple class diagram with classDef definitions', () => {
784 imgSnapshotTest(
785 `
786 classDiagram
787 class Class10
788 classDef pink fill:#f9f
789 classDef bold stroke:#333,stroke-width:6px,color:#fff
790 `,
791 { logLevel: 1, htmlLabels: true, layout: 'elk' }
792 );
793 });
794 it('ELK: should render a simple class diagram with classDefs being applied', () => {
795 imgSnapshotTest(
796 `
797 classDiagram
798 class Class10:::pink
799 cssClass "Class10" bold
800 classDef pink fill:#f9f
801 classDef bold stroke:#333,stroke-width:6px,color:#fff
802 `,
803 { logLevel: 1, htmlLabels: true, layout: 'elk' }
804 );
805 });
806 it('ELK: should render a simple class diagram with classDefs being applied without htmlLabels', () => {
807 imgSnapshotTest(
808 `
809 classDiagram
810 class Class10:::pink
811 cssClass "Class10" bold
812 classDef pink fill:#f9f
813 classDef bold stroke:#333,stroke-width:6px,color:#fff
814 `,
815 { logLevel: 1, htmlLabels: false, layout: 'elk' }
816 );
817 });
818 it('ELK: should render a simple class diagram with markdown styling', () => {
819 imgSnapshotTest(
820 `
821 classDiagram
822 class Class10 {
823 +attribute *italic**
824 ~attribute **bold***
825 _italicmethod_()
826 __boldmethod__()
827 _+_swim_()a_
828 __+quack() test__
829 }
830 `,
831 { logLevel: 1, htmlLabels: true, layout: 'elk' }
832 );
833 });
834 it('ELK: should render a simple class diagram with markdown styling without htmlLabels', () => {
835 imgSnapshotTest(
836 `
837 classDiagram
838 class Class10 {
839 +attribute *italic**
840 ~attribute **bold***
841 _italicmethod_()
842 __boldmethod__()
843 _+_swim_()a_
844 __+quack() test__
845 }
846 `,
847 { logLevel: 1, htmlLabels: false, layout: 'elk' }
848 );
849 });
850 it('ELK: should render a simple class diagram with the handDrawn look', () => {
851 imgSnapshotTest(
852 `
853 classDiagram
854 class Class10
855 `,
856 { logLevel: 1, htmlLabels: true, look: 'handDrawn', layout: 'elk' }
857 );
858 });
859 it('ELK: should render a simple class diagram with styles and the handDrawn look', () => {
860 imgSnapshotTest(
861 `
862 classDiagram
863 class Class10
864 style Class10 fill:#f9f,stroke:#333,stroke-width:4px,color:white
865 `,
866 { logLevel: 1, htmlLabels: true, look: 'handDrawn', layout: 'elk' }
867 );
868 });
869 it('ELK: should render a simple class diagram with styles and the handDrawn look without htmlLabels', () => {
870 imgSnapshotTest(
871 `
872 classDiagram
873 class Class10
874 style Class10 fill:#f9f,stroke:#333,stroke-width:4px,color:white
875 `,
876 { logLevel: 1, htmlLabels: false, look: 'handDrawn', layout: 'elk' }
877 );
878 });
879 it('ELK: should render a full class diagram with the handDrawn look', () => {
880 imgSnapshotTest(
881 `
882 classDiagram
883 note "I love this diagram!\nDo you love it?"
884 Class01 <|-- AveryLongClass : Cool
885 &lt;&lt;interface&gt;&gt; Class01
886 Class03 "1" *-- "*" Class04
887 Class05 "1" o-- "many" Class06
888 Class07 "1" .. "*" Class08
889 Class09 "1" --> "*" C2 : Where am i?
890 Class09 "*" --* "*" C3
891 Class09 "1" --|> "1" Class07
892 Class12 <|.. Class08
893 Class11 ..>Class12
894 Class07 : equals()
895 Class07 : Object[] elementData
896 Class01 : size()
897 Class01 : int chimp
898 Class01 : int gorilla
899 Class01 : -int privateChimp
900 Class01 : +int publicGorilla
901 Class01 : #int protectedMarmoset
902 Class08 <--> C2: Cool label
903 class Class10 {
904 &lt;&lt;service&gt;&gt;
905 int id
906 test()
907 }
908 note for Class10 "Cool class\nI said it's very cool class!"
909 `,
910 { logLevel: 1, htmlLabels: true, look: 'handDrawn', layout: 'elk' }
911 );
912 });
913 it('ELK: should render a simple class diagram with a custom theme', () => {
914 imgSnapshotTest(
915 `
916 %%{
917 init: {
918 'theme': 'base',
919 'themeVariables': {
920 'primaryColor': '#BB2528',
921 'primaryTextColor': '#fff',
922 'primaryBorderColor': '#7C0000',
923 'lineColor': '#F83d29',
924 'secondaryColor': '#006100',
925 'tertiaryColor': '#fff'
926 }
927 }
928 }%%
929 classDiagram
930 Class01 <|-- AveryLongClass : Cool
931 &lt;&lt;interface&gt;&gt; Class01
932 Class03 *-- Class04
933 Class05 o-- Class06
934 Class07 .. Class08
935 Class09 --> C2 : Where am i?
936 Class09 --* C3
937 Class09 --|> Class07
938 Class12 <|.. Class08
939 Class11 ..>Class12
940 Class07 : equals()
941 Class07 : Object[] elementData
942 Class01 : size()
943 Class01 : int chimp
944 Class01 : int gorilla
945 Class01 : -int privateChimp
946 Class01 : +int publicGorilla
947 Class01 : #int protectedMarmoset
948 Class08 <--> C2: Cool label
949 class Class10 {
950 &lt;&lt;service&gt;&gt;
951 int id
952 test()
953 }
954 `,
955 { logLevel: 1, htmlLabels: true, layout: 'elk' }
956 );
957 });
958 it('ELK: should render a simple class diagram with a custom theme and the handDrawn look', () => {
959 imgSnapshotTest(
960 `
961 %%{
962 init: {
963 'theme': 'base',
964 'themeVariables': {
965 'primaryColor': '#BB2528',
966 'primaryTextColor': '#fff',
967 'primaryBorderColor': '#7C0000',
968 'lineColor': '#F83d29',
969 'secondaryColor': '#006100',
970 'tertiaryColor': '#fff'
971 }
972 }
973 }%%
974 classDiagram
975 Class01 <|-- AveryLongClass : Cool
976 &lt;&lt;interface&gt;&gt; Class01
977 Class03 *-- Class04
978 Class05 o-- Class06
979 Class07 .. Class08
980 Class09 --> C2 : Where am i?
981 Class09 --* C3
982 Class09 --|> Class07
983 Class12 <|.. Class08
984 Class11 ..>Class12
985 Class07 : equals()
986 Class07 : Object[] elementData
987 Class01 : size()
988 Class01 : int chimp
989 Class01 : int gorilla
990 Class01 : -int privateChimp
991 Class01 : +int publicGorilla
992 Class01 : #int protectedMarmoset
993 Class08 <--> C2: Cool label
994 class Class10 {
995 &lt;&lt;service&gt;&gt;
996 int id
997 test()
998 }
999 `,
1000 { logLevel: 1, htmlLabels: true, look: 'handDrawn', layout: 'elk' }
1001 );
1002 });
1003 it('ELK: should render a full class diagram using elk', () => {
1004 imgSnapshotTest(
1005 `
1006 classDiagram
1007 note "I love this diagram!\nDo you love it?"
1008 Class01 <|-- AveryLongClass : Cool
1009 &lt;&lt;interface&gt;&gt; Class01
1010 Class03 "1" *-- "*" Class04
1011 Class05 "1" o-- "many" Class06
1012 Class07 "1" .. "*" Class08
1013 Class09 "1" --> "*" C2 : Where am i?
1014 Class09 "*" --* "*" C3
1015 Class09 "1" --|> "1" Class07
1016 Class12 <|.. Class08
1017 Class11 ..>Class12
1018 Class07 : equals()
1019 Class07 : Object[] elementData
1020 Class01 : size()
1021 Class01 : int chimp
1022 Class01 : int gorilla
1023 Class01 : -int privateChimp
1024 Class01 : +int publicGorilla
1025 Class01 : #int protectedMarmoset
1026 Class08 <--> C2: Cool label
1027 class Class10 {
1028 &lt;&lt;service&gt;&gt;
1029 int id
1030 test()
1031 }
1032 note for Class10 "Cool class\nI said it's very cool class!"
1033 `,
1034 { logLevel: 1, htmlLabels: true, layout: 'elk' }
1035 );
1036 });
1037});
1038