mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-20 15:59:51 +02:00
feat: add use case diagram examples and update parser tests for error handling
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
This commit is contained in:
51
packages/examples/src/examples/usecase.ts
Normal file
51
packages/examples/src/examples/usecase.ts
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'usecase',
|
||||||
|
name: 'Use Case Diagram',
|
||||||
|
description: 'Visualize system functionality and user interactions',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Use Case',
|
||||||
|
isDefault: true,
|
||||||
|
code: `usecase
|
||||||
|
actor User
|
||||||
|
actor Admin
|
||||||
|
User --> (Login)
|
||||||
|
User --> (View Profile)
|
||||||
|
Admin --> (Manage Users)
|
||||||
|
Admin --> (View Reports)`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'System Boundary',
|
||||||
|
code: `usecase
|
||||||
|
actor Customer
|
||||||
|
actor Support
|
||||||
|
|
||||||
|
SystemBoundary@{ type: rect } "E-commerce System" {
|
||||||
|
Customer --> (Browse Products)
|
||||||
|
Customer --> (Place Order)
|
||||||
|
Customer --> (Track Order)
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemBoundary@{ type: package } "Admin Panel" {
|
||||||
|
Support --> (Process Orders)
|
||||||
|
Support --> (Handle Returns)
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Actor Relationships',
|
||||||
|
code: `usecase
|
||||||
|
actor Developer1
|
||||||
|
actor Developer2
|
||||||
|
actor Manager
|
||||||
|
|
||||||
|
Developer1 --> (Write Code)
|
||||||
|
Developer2 --> (Review Code)
|
||||||
|
Manager --> (Approve Release)
|
||||||
|
|
||||||
|
Developer1 --> Developer2
|
||||||
|
Manager --> Developer1`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
@@ -21,6 +21,7 @@ import quadrantChart from './examples/quadrant-chart.js';
|
|||||||
import packetDiagram from './examples/packet.js';
|
import packetDiagram from './examples/packet.js';
|
||||||
import blockDiagram from './examples/block.js';
|
import blockDiagram from './examples/block.js';
|
||||||
import treemapDiagram from './examples/treemap.js';
|
import treemapDiagram from './examples/treemap.js';
|
||||||
|
import usecaseDiagram from './examples/usecase.js';
|
||||||
|
|
||||||
export const diagramData: DiagramMetadata[] = [
|
export const diagramData: DiagramMetadata[] = [
|
||||||
flowChart,
|
flowChart,
|
||||||
@@ -45,4 +46,5 @@ export const diagramData: DiagramMetadata[] = [
|
|||||||
packetDiagram,
|
packetDiagram,
|
||||||
blockDiagram,
|
blockDiagram,
|
||||||
treemapDiagram,
|
treemapDiagram,
|
||||||
|
usecaseDiagram,
|
||||||
];
|
];
|
||||||
|
@@ -1489,14 +1489,18 @@ describe('Error Handling', () => {
|
|||||||
const emptyInput = '';
|
const emptyInput = '';
|
||||||
|
|
||||||
expect(() => parseUsecaseWithAntlr(emptyInput)).toThrow(UsecaseParseError);
|
expect(() => parseUsecaseWithAntlr(emptyInput)).toThrow(UsecaseParseError);
|
||||||
expect(() => parseUsecaseWithAntlr(emptyInput)).toThrow(/missing 'usecase'/);
|
expect(() => parseUsecaseWithAntlr(emptyInput)).toThrow(
|
||||||
|
/mismatched input '<EOF>' expecting {'usecase', NEWLINE}/
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw UsecaseParseError for only whitespace input', () => {
|
it('should throw UsecaseParseError for only whitespace input', () => {
|
||||||
const whitespaceInput = ' \n \t \n ';
|
const whitespaceInput = ' \n \t \n ';
|
||||||
|
|
||||||
expect(() => parseUsecaseWithAntlr(whitespaceInput)).toThrow(UsecaseParseError);
|
expect(() => parseUsecaseWithAntlr(whitespaceInput)).toThrow(UsecaseParseError);
|
||||||
expect(() => parseUsecaseWithAntlr(whitespaceInput)).toThrow(/missing 'usecase'/);
|
expect(() => parseUsecaseWithAntlr(whitespaceInput)).toThrow(
|
||||||
|
/extraneous input '<EOF>' expecting {'usecase', NEWLINE}/
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw UsecaseParseError for missing usecase keyword', () => {
|
it('should throw UsecaseParseError for missing usecase keyword', () => {
|
||||||
@@ -1506,7 +1510,9 @@ describe('Error Handling', () => {
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
expect(() => parseUsecaseWithAntlr(missingKeyword)).toThrow(UsecaseParseError);
|
expect(() => parseUsecaseWithAntlr(missingKeyword)).toThrow(UsecaseParseError);
|
||||||
expect(() => parseUsecaseWithAntlr(missingKeyword)).toThrow(/missing 'usecase'/);
|
expect(() => parseUsecaseWithAntlr(missingKeyword)).toThrow(
|
||||||
|
/extraneous input 'actor' expecting {'usecase', NEWLINE}/
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user