mermaid/src/diagrams/classDiagram/classDiagram.spec.js

209 lines
6.7 KiB
JavaScript
Raw Normal View History

2017-04-11 22:57:57 +08:00
/* eslint-env jasmine */
2017-09-10 21:23:04 +08:00
import { parser } from './parser/classDiagram'
import classDb from './classDb'
2015-10-25 18:09:58 +01:00
describe('class diagram, ', function () {
2017-04-11 22:14:25 +08:00
describe('when parsing an info graph it', function () {
beforeEach(function () {
2017-09-10 21:23:04 +08:00
parser.yy = classDb
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions', function () {
var str = 'classDiagram\n' +
'Class01 <|-- Class02\n' +
'Class03 *-- Class04\n' +
'Class05 o-- Class06\n' +
'Class07 .. Class08\n' +
'Class09 -- Class1'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle relation definition of different types and directions', function () {
var str = 'classDiagram\n' +
'Class11 <|.. Class12\n' +
'Class13 --> Class14\n' +
'Class15 ..> Class16\n' +
'Class17 ..|> Class18\n' +
'Class19 <--* Class20'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle cardinality and labels', function () {
var str = 'classDiagram\n' +
'Class01 "1" *-- "many" Class02 : contains\n' +
'Class03 o-- Class04 : aggregation\n' +
'Class05 --> "1" Class06'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle class definitions', function () {
var str = 'classDiagram\n' +
'class Car\n' +
'Driver -- Car : drives >\n' +
'Car *-- Wheel : have 4 >\n' +
'Car -- Person : < owns'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle method statements', function () {
var str = 'classDiagram\n' +
'Object <|-- ArrayList\n' +
'Object : equals()\n' +
'ArrayList : Object[] elementData\n' +
'ArrayList : size()'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle parsing of method statements grouped by brackets', function () {
var str = 'classDiagram\n' +
'class Dummy {\n' +
'String data\n' +
' void methods()\n' +
'}\n' +
'\n' +
'class Flight {\n' +
' flightNumber : Integer\n' +
' departureTime : Date\n' +
'}'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
it('should handle parsing of separators', function () {
var str = 'classDiagram\n' +
'class Foo1 {\n' +
' You can use\n' +
' several lines\n' +
'..\n' +
'as you want\n' +
'and group\n' +
'==\n' +
'things together.\n' +
'__\n' +
'You can have as many groups\n' +
'as you want\n' +
'--\n' +
'End of class\n' +
'}\n' +
'\n' +
'class User {\n' +
'.. Simple Getter ..\n' +
'+ getName()\n' +
'+ getAddress()\n' +
'.. Some setter ..\n' +
'+ setName()\n' +
'__ private data __\n' +
'int age\n' +
'-- encrypted --\n' +
'String password\n' +
'}'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
})
})
describe('when fetching data from an classDiagram graph it', function () {
beforeEach(function () {
2017-09-10 21:23:04 +08:00
parser.yy = classDb
parser.yy.clear()
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions EXTENSION', function () {
var str = 'classDiagram\n' +
'Class01 <|-- Class02'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class02').id).toBe('Class02')
expect(relations[0].relation.type1).toBe(classDb.relationType.EXTENSION)
2017-04-11 22:14:25 +08:00
expect(relations[0].relation.type2).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE)
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions AGGREGATION and dotted line', function () {
var str = 'classDiagram\n' +
'Class01 o.. Class02'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class02').id).toBe('Class02')
expect(relations[0].relation.type1).toBe(classDb.relationType.AGGREGATION)
2017-04-11 22:14:25 +08:00
expect(relations[0].relation.type2).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.lineType).toBe(classDb.lineType.DOTTED_LINE)
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions COMPOSITION on both sides', function () {
var str = 'classDiagram\n' +
'Class01 *--* Class02'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class02').id).toBe('Class02')
expect(relations[0].relation.type1).toBe(classDb.relationType.COMPOSITION)
expect(relations[0].relation.type2).toBe(classDb.relationType.COMPOSITION)
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE)
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions no types', function () {
var str = 'classDiagram\n' +
'Class01 -- Class02'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class02').id).toBe('Class02')
2017-04-11 22:14:25 +08:00
expect(relations[0].relation.type1).toBe('none')
expect(relations[0].relation.type2).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE)
2017-04-11 22:14:25 +08:00
})
it('should handle relation definitions with type only on right side', function () {
var str = 'classDiagram\n' +
'Class01 --|> Class02'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class02').id).toBe('Class02')
2017-04-11 22:14:25 +08:00
expect(relations[0].relation.type1).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.type2).toBe(classDb.relationType.EXTENSION)
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE)
2017-04-11 22:14:25 +08:00
})
it('should handle multiple classes and relation definitions', function () {
var str = 'classDiagram\n' +
'Class01 <|-- Class02\n' +
'Class03 *-- Class04\n' +
'Class05 o-- Class06\n' +
'Class07 .. Class08\n' +
'Class09 -- Class10'
2017-09-10 21:23:04 +08:00
parser.parse(str)
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
var relations = parser.yy.getRelations()
2017-04-11 22:14:25 +08:00
2017-09-10 21:23:04 +08:00
expect(parser.yy.getClass('Class01').id).toBe('Class01')
expect(parser.yy.getClass('Class10').id).toBe('Class10')
2017-04-11 22:14:25 +08:00
expect(relations.length).toBe(5)
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.type1).toBe(classDb.relationType.EXTENSION)
2017-04-11 22:14:25 +08:00
expect(relations[0].relation.type2).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE)
2017-04-11 22:14:25 +08:00
expect(relations[3].relation.type1).toBe('none')
expect(relations[3].relation.type2).toBe('none')
2017-09-10 21:23:04 +08:00
expect(relations[3].relation.lineType).toBe(classDb.lineType.DOTTED_LINE)
2017-04-11 22:14:25 +08:00
})
})
})