Files
wehub-resource-sync 719032b19f
Update Schema / Update configuration json schema (push) Has been cancelled
Memory Benchmark / Memory Test (Full Analysis) (push) Has been cancelled
CI Quality / Lint GitHub Actions (actionlint) (push) Has been cancelled
CI Quality / Lint GitHub Actions (zizmor) (push) Has been cancelled
CI Quality / Check typos (push) Has been cancelled
CI / Test coverage (push) Has been cancelled
CI / Test (22.x, windows-latest) (push) Has been cancelled
CI / Test (24.x, macos-latest) (push) Has been cancelled
CI / Test (24.x, ubuntu-latest) (push) Has been cancelled
CI / Test (24.x, windows-latest) (push) Has been cancelled
CI / Test (26.x, macos-latest) (push) Has been cancelled
CI / Test (26.x, ubuntu-latest) (push) Has been cancelled
CI / Test (26.x, windows-latest) (push) Has been cancelled
CI / Test with Bun (latest, macos-latest) (push) Has been cancelled
CI / Test with Bun (latest, ubuntu-latest) (push) Has been cancelled
CI / Test with Bun (latest, windows-latest) (push) Has been cancelled
CI / Build and run (22.x, macos-latest) (push) Has been cancelled
CI / Build and run (22.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (22.x, windows-latest) (push) Has been cancelled
autofix.ci / autofix (push) Has been cancelled
CI Browser Extension / Lint Browser Extension (push) Has been cancelled
CI Browser Extension / Test Browser Extension (push) Has been cancelled
Memory Benchmark / Memory Test (push) Has been cancelled
CI Website / Lint Website Client (push) Has been cancelled
CI Website / Lint Website Server (push) Has been cancelled
CI Website / Test Website Server (push) Has been cancelled
CI Website / Bundle Website Server (push) Has been cancelled
CI / Lint Biome (push) Has been cancelled
CI / Lint oxlint (push) Has been cancelled
CI / Lint TypeScript (push) Has been cancelled
CI / Lint Secretlint (push) Has been cancelled
CI / Test (22.x, macos-latest) (push) Has been cancelled
CI / Test (22.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (24.x, macos-latest) (push) Has been cancelled
CI / Build and run (24.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (24.x, windows-latest) (push) Has been cancelled
CI / Build and run (26.x, macos-latest) (push) Has been cancelled
CI / Build and run (26.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (26.x, windows-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, macos-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, ubuntu-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Docker / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Docker / build (linux/arm/v7, ubuntu-24.04-arm) (push) Has been cancelled
Docker / build (linux/arm64, ubuntu-24.04-arm) (push) Has been cancelled
Docker / merge (push) Has been cancelled
Pack repository with Repomix / pack-repo (push) Has been cancelled
Performance Benchmark History / Benchmark (macos-latest) (push) Has been cancelled
Performance Benchmark History / Benchmark (ubuntu-latest) (push) Has been cancelled
Performance Benchmark History / Benchmark (windows-latest) (push) Has been cancelled
Performance Benchmark History / Store Results (push) Has been cancelled
Test Repomix Action / Test Node.js 22 (push) Has been cancelled
Test Repomix Action / Test Node.js 24 (push) Has been cancelled
Test Repomix Action / Test Node.js 26 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:37 +08:00

104 lines
3.6 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import type { ProcessedFile } from '../../../src/core/file/fileTypes.js';
import { canUseFastOutputTokenPath, extractOutputWrapper } from '../../../src/core/metrics/calculateMetrics.js';
import { createMockConfig } from '../../testing/testUtils.js';
describe('extractOutputWrapper', () => {
it('should extract wrapper from output with file contents', () => {
const files: ProcessedFile[] = [
{ path: 'a.ts', content: 'const a = 1;' },
{ path: 'b.ts', content: 'const b = 2;' },
];
const output = '<header>const a = 1;<separator>const b = 2;<footer>';
const wrapper = extractOutputWrapper(output, files);
expect(wrapper).toBe('<header><separator><footer>');
});
it('should return null when file content is not found in output', () => {
const files: ProcessedFile[] = [{ path: 'a.ts', content: 'not in output' }];
const output = '<header>something else<footer>';
expect(extractOutputWrapper(output, files)).toBeNull();
});
it('should skip empty file contents', () => {
const files: ProcessedFile[] = [
{ path: 'empty.ts', content: '' },
{ path: 'a.ts', content: 'content-a' },
];
const output = '<header>content-a<footer>';
expect(extractOutputWrapper(output, files)).toBe('<header><footer>');
});
it('should handle identical content in multiple files by consuming in order', () => {
const files: ProcessedFile[] = [
{ path: 'a.ts', content: 'same' },
{ path: 'b.ts', content: 'same' },
];
const output = '<h1>same<h2>same<end>';
expect(extractOutputWrapper(output, files)).toBe('<h1><h2><end>');
});
it('should return null when file order does not match output order', () => {
const files: ProcessedFile[] = [
{ path: 'b.ts', content: 'BBB' },
{ path: 'a.ts', content: 'AAA' },
];
const output = '<header>AAA<mid>BBB<footer>';
expect(extractOutputWrapper(output, files)).toBeNull();
});
it('should handle output with no files', () => {
const output = '<header><footer>';
expect(extractOutputWrapper(output, [])).toBe('<header><footer>');
});
it('should handle output that is only file contents with no wrapper', () => {
const files: ProcessedFile[] = [
{ path: 'a.ts', content: 'aaa' },
{ path: 'b.ts', content: 'bbb' },
];
const output = 'aaabbb';
expect(extractOutputWrapper(output, files)).toBe('');
});
});
describe('canUseFastOutputTokenPath', () => {
it('should return true for xml style', () => {
const config = createMockConfig({ output: { style: 'xml' } });
expect(canUseFastOutputTokenPath(config)).toBe(true);
});
it('should return true for markdown style', () => {
const config = createMockConfig({ output: { style: 'markdown' } });
expect(canUseFastOutputTokenPath(config)).toBe(true);
});
it('should return true for plain style', () => {
const config = createMockConfig({ output: { style: 'plain' } });
expect(canUseFastOutputTokenPath(config)).toBe(true);
});
it('should return false for json style', () => {
const config = createMockConfig({ output: { style: 'json' } });
expect(canUseFastOutputTokenPath(config)).toBe(false);
});
it('should return false when splitOutput is defined', () => {
const config = createMockConfig({ output: { style: 'xml', splitOutput: 3 } });
expect(canUseFastOutputTokenPath(config)).toBe(false);
});
it('should return false when parsableStyle is true', () => {
const config = createMockConfig({ output: { style: 'xml', parsableStyle: true } });
expect(canUseFastOutputTokenPath(config)).toBe(false);
});
});