#!/usr/bin/env node 'use strict'; /** * LocaleEnforcer Unit Tests * * Tests 3 scenarios: * 1. English prompt → English output (verify instruction injected) * 2. Chinese prompt → English output (verify instruction injected) * 3. Mixed prompt → English output (verify instruction injected) */ const assert = require('assert'); const { LocaleEnforcer } = require('../../../dist/glmt/locale-enforcer'); describe('LocaleEnforcer', () => { describe('Scenario 1: English prompt → English output', () => { it('should inject instruction into system prompt', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'system', content: 'You are a helpful assistant.' }, { role: 'user', content: 'Plan a microservices architecture' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 2); assert.ok(result[0].content.includes('CRITICAL: You MUST respond in English only')); assert.ok(result[0].content.includes('You are a helpful assistant')); assert.strictEqual(result[1].content, 'Plan a microservices architecture'); }); it('should inject instruction into first user message if no system prompt', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'user', content: 'Fix the bug in login.js' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 1); assert.ok(result[0].content.includes('CRITICAL: You MUST respond in English only')); assert.ok(result[0].content.includes('Fix the bug in login.js')); }); it('should handle array content in system message', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'system', content: [ { type: 'text', text: 'You are a code assistant.' } ] }, { role: 'user', content: 'Implement REST API' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 2); assert.ok(Array.isArray(result[0].content)); assert.strictEqual(result[0].content[0].type, 'text'); assert.ok(result[0].content[0].text.includes('CRITICAL: You MUST respond in English only')); assert.strictEqual(result[0].content[1].text, 'You are a code assistant.'); }); }); describe('Scenario 2: Chinese prompt → English output', () => { it('should inject instruction for Chinese prompts', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'system', content: '你是一个编程助手' }, { role: 'user', content: '实现用户认证系统' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 2); assert.ok(result[0].content.includes('CRITICAL: You MUST respond in English only')); assert.ok(result[0].content.includes('你是一个编程助手')); assert.strictEqual(result[1].content, '实现用户认证系统'); }); it('should handle Chinese content in array format', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'user', content: [ { type: 'text', text: '分析代码性能' } ] } ]; const result = enforcer.injectInstruction(messages); assert.ok(Array.isArray(result[0].content)); assert.strictEqual(result[0].content[0].type, 'text'); assert.ok(result[0].content[0].text.includes('CRITICAL: You MUST respond in English only')); assert.strictEqual(result[0].content[1].text, '分析代码性能'); }); }); describe('Scenario 3: Mixed language prompt → English output', () => { it('should inject instruction for mixed English and Chinese', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'user', content: 'Implement 用户登录 with JWT authentication' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 1); assert.ok(result[0].content.includes('CRITICAL: You MUST respond in English only')); assert.ok(result[0].content.includes('Implement 用户登录 with JWT authentication')); }); it('should handle mixed content with multiple text blocks', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'user', content: [ { type: 'text', text: 'Create a REST API for ' }, { type: 'text', text: '产品管理' } ] } ]; const result = enforcer.injectInstruction(messages); assert.ok(Array.isArray(result[0].content)); assert.strictEqual(result[0].content.length, 3); // Instruction + 2 original blocks assert.ok(result[0].content[0].text.includes('CRITICAL: You MUST respond in English only')); }); }); describe('Edge cases', () => { it('should handle empty messages array', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = []; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 0); }); it('should handle messages with no system or user role', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const messages = [ { role: 'assistant', content: 'Previous response' } ]; const result = enforcer.injectInstruction(messages); assert.strictEqual(result.length, 1); assert.strictEqual(result[0].content, 'Previous response'); }); it('should not mutate original messages array', () => { const enforcer = new LocaleEnforcer({ forceEnglish: true }); const originalMessages = [ { role: 'user', content: 'Test prompt' } ]; const originalCopy = JSON.parse(JSON.stringify(originalMessages)); enforcer.injectInstruction(originalMessages); assert.deepStrictEqual(originalMessages, originalCopy); }); it('should handle default forceEnglish option (should be true)', () => { const enforcer = new LocaleEnforcer(); const messages = [ { role: 'user', content: 'Test' } ]; const result = enforcer.injectInstruction(messages); assert.ok(result[0].content.includes('CRITICAL: You MUST respond in English only')); }); }); }); // Run tests if executed directly if (require.main === module) { const Mocha = require('mocha'); const mocha = new Mocha({ reporter: 'spec' }); mocha.suite.emit('pre-require', global, null, mocha); // Load this test file require(module.filename); mocha.run(failures => { process.exitCode = failures ? 1 : 0; }); }