updated validaor and tests to use treemap

This commit is contained in:
shubham-mermaid
2025-07-07 18:54:38 +05:30
parent 0da2922ee7
commit 35b84761a9
2 changed files with 14 additions and 14 deletions

View File

@@ -1,5 +1,5 @@
import type { ValidationAcceptor, ValidationChecks } from 'langium'; import type { ValidationAcceptor, ValidationChecks } from 'langium';
import type { MermaidAstType, TreemapDoc } from '../generated/ast.js'; import type { MermaidAstType, Treemap } from '../generated/ast.js';
import type { TreemapServices } from './module.js'; import type { TreemapServices } from './module.js';
/** /**
@@ -9,10 +9,10 @@ export function registerValidationChecks(services: TreemapServices) {
const validator = services.validation.TreemapValidator; const validator = services.validation.TreemapValidator;
const registry = services.validation.ValidationRegistry; const registry = services.validation.ValidationRegistry;
if (registry) { if (registry) {
// Use any to bypass type checking since we know TreemapDoc is part of the AST // Use any to bypass type checking since we know Treemap is part of the AST
// but the type system is having trouble with it // but the type system is having trouble with it
const checks: ValidationChecks<MermaidAstType> = { const checks: ValidationChecks<MermaidAstType> = {
TreemapDoc: validator.checkSingleRoot.bind(validator), Treemap: validator.checkSingleRoot.bind(validator),
// Remove unused validation for TreemapRow // Remove unused validation for TreemapRow
}; };
registry.register(checks, validator); registry.register(checks, validator);
@@ -27,7 +27,7 @@ export class TreemapValidator {
* Validates that a treemap has only one root node. * Validates that a treemap has only one root node.
* A root node is defined as a node that has no indentation. * A root node is defined as a node that has no indentation.
*/ */
checkSingleRoot(doc: TreemapDoc, accept: ValidationAcceptor): void { checkSingleRoot(doc: Treemap, accept: ValidationAcceptor): void {
let rootNodeIndentation; let rootNodeIndentation;
for (const row of doc.TreemapRows) { for (const row of doc.TreemapRows) {

View File

@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest'; import { describe, expect, it } from 'vitest';
import { expectNoErrorsOrAlternatives } from './test-util.js'; import { expectNoErrorsOrAlternatives } from './test-util.js';
import type { TreemapDoc, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js'; import type { Treemap, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js';
import type { LangiumParser } from 'langium'; import type { LangiumParser } from 'langium';
import { createTreemapServices } from '../src/language/treemap/module.js'; import { createTreemapServices } from '../src/language/treemap/module.js';
@@ -9,21 +9,21 @@ describe('Treemap Parser', () => {
const parser: LangiumParser = services.parser.LangiumParser; const parser: LangiumParser = services.parser.LangiumParser;
const parse = (input: string) => { const parse = (input: string) => {
return parser.parse<TreemapDoc>(input); return parser.parse<Treemap>(input);
}; };
describe('Basic Parsing', () => { describe('Basic Parsing', () => {
it('should parse empty treemap', () => { it('should parse empty treemap', () => {
const result = parse('treemap'); const result = parse('treemap');
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
expect(result.value.TreemapRows).toHaveLength(0); expect(result.value.TreemapRows).toHaveLength(0);
}); });
it('should parse a section node', () => { it('should parse a section node', () => {
const result = parse('treemap\n"Root"'); const result = parse('treemap\n"Root"');
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
expect(result.value.TreemapRows).toHaveLength(1); expect(result.value.TreemapRows).toHaveLength(1);
if (result.value.TreemapRows[0].item) { if (result.value.TreemapRows[0].item) {
expect(result.value.TreemapRows[0].item.$type).toBe('Section'); expect(result.value.TreemapRows[0].item.$type).toBe('Section');
@@ -39,7 +39,7 @@ describe('Treemap Parser', () => {
"Child2" : 200 "Child2" : 200
`); `);
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
expect(result.value.TreemapRows).toHaveLength(3); expect(result.value.TreemapRows).toHaveLength(3);
if (result.value.TreemapRows[0].item) { if (result.value.TreemapRows[0].item) {
@@ -95,7 +95,7 @@ describe('Treemap Parser', () => {
// We're only checking that the multiple root nodes parse successfully // We're only checking that the multiple root nodes parse successfully
// The validation errors would be reported by the validator during validation // The validation errors would be reported by the validator during validation
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
expect(result.value.TreemapRows).toHaveLength(2); expect(result.value.TreemapRows).toHaveLength(2);
}); });
}); });
@@ -104,7 +104,7 @@ describe('Treemap Parser', () => {
it('should parse a treemap with title', () => { it('should parse a treemap with title', () => {
const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100'); const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100');
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
// We can't directly test the title property due to how Langium processes TitleAndAccessibilities // We can't directly test the title property due to how Langium processes TitleAndAccessibilities
// but we can verify the TreemapRows are parsed correctly // but we can verify the TreemapRows are parsed correctly
expect(result.value.TreemapRows).toHaveLength(2); expect(result.value.TreemapRows).toHaveLength(2);
@@ -113,7 +113,7 @@ describe('Treemap Parser', () => {
it('should parse a treemap with accTitle', () => { it('should parse a treemap with accTitle', () => {
const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100'); const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100');
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
// We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities // We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities
expect(result.value.TreemapRows).toHaveLength(2); expect(result.value.TreemapRows).toHaveLength(2);
}); });
@@ -123,7 +123,7 @@ describe('Treemap Parser', () => {
'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100' 'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100'
); );
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
// We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities // We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities
expect(result.value.TreemapRows).toHaveLength(2); expect(result.value.TreemapRows).toHaveLength(2);
}); });
@@ -136,7 +136,7 @@ accDescr: This is an accessible description
"Root" "Root"
"Child": 100`); "Child": 100`);
expectNoErrorsOrAlternatives(result); expectNoErrorsOrAlternatives(result);
expect(result.value.$type).toBe('TreemapDoc'); expect(result.value.$type).toBe('Treemap');
// We can't directly test these properties due to how Langium processes TitleAndAccessibilities // We can't directly test these properties due to how Langium processes TitleAndAccessibilities
expect(result.value.TreemapRows).toHaveLength(2); expect(result.value.TreemapRows).toHaveLength(2);
}); });