diff --git a/src/diagrams/c4/parser/flow.spec.js b/src/diagrams/c4/parser/flow.spec.js new file mode 100644 index 000000000..c01d99e40 --- /dev/null +++ b/src/diagrams/c4/parser/flow.spec.js @@ -0,0 +1,84 @@ +import flowDb from '../c4Db'; +import flow from './c4Diagram.jison'; +import { setConfig } from '../../../config'; + +setConfig({ + securityLevel: 'strict', +}); + +describe('parsing a flow chart', function () { + beforeEach(function () { + flow.parser.yy = flowDb; + flow.parser.yy.clear(); + }); + + it('should parse a C4 diagram with one Person correctly', function () { + flow.parser.parse(`C4Context +title System Context diagram for Internet Banking System +Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")`); + + const yy = flow.parser.yy; + expect(yy.getC4Type()).toBe('C4Context'); + expect(yy.getTitle()).toBe('System Context diagram for Internet Banking System'); + + const shapes = yy.getC4ShapeArray(); + expect(shapes.length).toBe(1); + const onlyShape = shapes[0]; + + expect(onlyShape).toEqual({ + alias: 'customerA', + descr: { + text: 'A customer of the bank, with personal bank accounts.', + }, + label: { + text: 'Banking Customer A', + }, + parentBoundary: 'global', + typeC4Shape: { + text: 'person', + }, + wrap: false, + }); + }); + + it('should handle a trailing whitespaces after statements', function () { + const whitespace = ' '; + const rendered = flow.parser.parse(`C4Context${whitespace} +title System Context diagram for Internet Banking System${whitespace} +Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")${whitespace}`); + + expect(rendered).toBe(true); + }); + + it('should handle parameter names that are keywords', function () { + flow.parser.parse(`C4Context +title title +Person(Person, "Person", "Person")`); + + const yy = flow.parser.yy; + expect(yy.getTitle()).toBe('title'); + + const shapes = yy.getC4ShapeArray(); + expect(shapes.length).toBe(1); + const onlyShape = shapes[0]; + + expect(onlyShape.alias).toBe('Person'); + expect(onlyShape.descr.text).toBe('Person'); + expect(onlyShape.label.text).toBe('Person'); + }); + + it('should allow default in the parameters', function () { + flow.parser.parse(`C4Context +Person(default, "default", "default")`); + + const yy = flow.parser.yy; + + const shapes = yy.getC4ShapeArray(); + expect(shapes.length).toBe(1); + const onlyShape = shapes[0]; + + expect(onlyShape.alias).toBe('default'); + expect(onlyShape.descr.text).toBe('default'); + expect(onlyShape.label.text).toBe('default'); + }); +});