Files
personamanagmentlayer__pcl/scripts/test-parser-capabilities.mjs
ANGX 07949936fa fix: resolve vitest test infrastructure and enable Phase 1.0 validation tests
This commit resolves the pre-existing vitest test collection issue and enables
execution of Phase 1.0 team validation tests.

Changes:
- Enhanced vitest.config.ts with proper path resolution and esbuild config
- Created tsconfig.test.json for test-specific TypeScript configuration
- Converted team-validation tests to .mjs format (more reliable than vitest+TS)
- Updated tests to use compile() instead of parse() for full semantic analysis
- Created VITEST-ISSUE-RESOLUTION.md documenting the fix

Test Results:
- 13/15 Phase 1.0A team validation tests passing (87% pass rate)
- All core validation features working:
  ✓ Duplicate member detection (3/3)
  ✓ Primary persona validation (2/2)
  ✓ Quorum consistency checks (4/4)
  ✓ Conflict order validation (3/3)
  ✓ Nested teams validation (1/1)

Known Issues:
- 2 circular reference detection tests fail (edge case, low priority)
- Vitest 1.6.1 incompatible with Node v25.2.1 + TypeScript ESM

Workaround: Use .mjs test format which is proven reliable.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 05:00:15 +01:00

89 lines
2.6 KiB
JavaScript

import { parse } from './dist/index.js';
console.log('Testing PCL Parser Capabilities...\n');
function testParse(testName, code) {
console.log(`=== ${testName} ===`);
const result = parse(code);
if (result.ok) {
const { program, errors } = result.value;
console.log('✅ Parse succeeded');
console.log(' Errors:', errors.length);
console.log(' Statements:', program.statements.map(s => s.kind).join(', '));
return { success: true, program, errors };
} else {
console.log('❌ Parse failed');
console.log(' Errors:', result.error);
return { success: false, error: result.error };
}
}
// Test 1: Team parsing
const teamCode = `
team ReviewTeam {
members: [ReviewerA, ReviewerB, ReviewerC]
primary: ReviewerA
quorum: 2
}
`;
const teamResult = testParse('TEST 1: Team Declaration', teamCode);
if (teamResult.success && teamResult.program.statements.length > 0) {
const team = teamResult.program.statements[0];
console.log(' Team name:', team.id.name);
console.log(' Team body members:', team.body?.members.length || 0);
}
console.log();
// Test 2: Workflow parsing
const workflowCode = `
workflow CodeReview {
steps: A -> B -> C
}
`;
const workflowResult = testParse('TEST 2: Workflow Declaration', workflowCode);
if (workflowResult.success && workflowResult.program.statements.length > 0) {
const workflow = workflowResult.program.statements[0];
console.log(' Workflow name:', workflow.id.name);
console.log(' Workflow body members:', workflow.body?.members.length || 0);
}
console.log();
// Test 3: Skill declaration
const skillCode = `
skill ThreatModeling {
description: "Identify security threats"
}
`;
const skillResult = testParse('TEST 3: Skill Declaration', skillCode);
console.log();
// Test 4: Persona with methods
const personaMethodCode = `
persona Analyst {
intent = "Analyze data"
method analyze(input: String): String {
return "Analysis: " + input
}
}
`;
const methodResult = testParse('TEST 4: Persona with Method', personaMethodCode);
if (methodResult.success && methodResult.program.statements.length > 0) {
const persona = methodResult.program.statements[0];
console.log(' Persona name:', persona.id.name);
console.log(' Persona members:', persona.members.map(m => m.kind).join(', '));
}
console.log();
// Summary
console.log('=== SUMMARY ===');
console.log('Team parsing:', teamResult.success ? '✅ Works' : '❌ Failed');
console.log('Workflow parsing:', workflowResult.success ? '✅ Works' : '❌ Failed');
console.log('Skill parsing:', skillResult.success ? '✅ Works' : '❌ Failed');
console.log('Method parsing:', methodResult.success ? '✅ Works' : '❌ Failed');