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

240 lines
9.1 KiB
TypeScript

import Handlebars from 'handlebars';
import { describe, expect, test } from 'vitest';
import { getMarkdownTemplate } from '../../../../src/core/output/outputStyles/markdownStyle.js';
describe('markdownStyle', () => {
describe('getMarkdownTemplate', () => {
test('should return valid markdown template', () => {
const template = getMarkdownTemplate();
expect(template).toContain('# File Summary');
expect(template).toContain('# Directory Structure');
expect(template).toContain('# Files');
expect(template).toContain('{{#if instruction}}');
expect(template).toContain('# Instruction');
});
test('should correctly render template with basic data', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
generationHeader: 'Generated Test Header',
summaryPurpose: 'Test Purpose',
summaryFileFormat: 'Test Format',
summaryUsageGuidelines: 'Test Guidelines',
summaryNotes: 'Test Notes',
treeString: 'src/\n index.ts',
processedFiles: [
{
path: 'src/index.ts',
content: 'console.log("Hello");',
},
],
fileSummaryEnabled: true,
directoryStructureEnabled: true,
filesEnabled: true,
markdownCodeBlockDelimiter: '```',
};
const result = compiledTemplate(data);
expect(result).toContain('Generated Test Header');
expect(result).toContain('Test Purpose');
expect(result).toContain('Test Format');
expect(result).toContain('Test Guidelines');
expect(result).toContain('Test Notes');
expect(result).toContain('src/\n index.ts');
expect(result).toContain('## File: src/index.ts');
expect(result).toContain('console.log("Hello");');
});
test('should render optional header text when provided', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
headerText: 'Custom Header Text',
processedFiles: [],
fileSummaryEnabled: true,
directoryStructureEnabled: true,
};
const result = compiledTemplate(data);
expect(result).toContain('# User Provided Header');
expect(result).toContain('Custom Header Text');
});
test('should not render header section when headerText is not provided', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
processedFiles: [],
fileSummaryEnabled: true,
directoryStructureEnabled: true,
};
const result = compiledTemplate(data);
expect(result).not.toContain('# User Provided Header');
});
test('should render instruction section when provided', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
instruction: 'Custom Instruction Text',
processedFiles: [],
fileSummaryEnabled: true,
directoryStructureEnabled: true,
};
const result = compiledTemplate(data);
expect(result).toContain('# Instruction');
expect(result).toContain('Custom Instruction Text');
});
test('should display headerText if specified even if fileSummary is disabled', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
headerText: 'MARKDOWN HEADER',
fileSummaryEnabled: false,
directoryStructureEnabled: true,
processedFiles: [],
};
const result = compiledTemplate(data);
expect(result).not.toContain('This file is a merged representation');
expect(result).toContain('MARKDOWN HEADER');
});
test('should not display generationHeader if fileSummary is disabled', () => {
const template = getMarkdownTemplate();
const compiledTemplate = Handlebars.compile(template);
const data = {
generationHeader: 'Generated Test Header',
fileSummaryEnabled: false,
directoryStructureEnabled: true,
processedFiles: [],
};
const result = compiledTemplate(data);
expect(result).not.toContain('This file is a merged representation');
expect(result).not.toContain('Generated Test Header');
expect(result).toContain('# Directory Structure');
});
});
describe('getFileExtension helper', () => {
// Helper to get extension mapping result
const getExtension = (filePath: string): string => {
const helper = Handlebars.helpers.getFileExtension as Handlebars.HelperDelegate;
return helper(filePath) as string;
};
// JavaScript variants
test('should handle JavaScript related extensions', () => {
expect(getExtension('file.js')).toBe('javascript');
expect(getExtension('file.jsx')).toBe('javascript');
expect(getExtension('file.ts')).toBe('typescript');
expect(getExtension('file.tsx')).toBe('typescript');
});
// Web technologies
test('should handle web technology extensions', () => {
expect(getExtension('file.html')).toBe('html');
expect(getExtension('file.css')).toBe('css');
expect(getExtension('file.scss')).toBe('scss');
expect(getExtension('file.sass')).toBe('sass');
expect(getExtension('file.vue')).toBe('vue');
});
// Backend languages
test('should handle backend language extensions', () => {
expect(getExtension('file.py')).toBe('python');
expect(getExtension('file.rb')).toBe('ruby');
expect(getExtension('file.php')).toBe('php');
expect(getExtension('file.java')).toBe('java');
expect(getExtension('file.go')).toBe('go');
});
// System programming languages
test('should handle system programming language extensions', () => {
expect(getExtension('file.c')).toBe('c');
expect(getExtension('file.cpp')).toBe('cpp');
expect(getExtension('file.rs')).toBe('rust');
expect(getExtension('file.swift')).toBe('swift');
expect(getExtension('file.kt')).toBe('kotlin');
});
// Configuration and data format files
test('should handle configuration and data format extensions', () => {
expect(getExtension('file.json')).toBe('json');
expect(getExtension('file.json5')).toBe('json5');
expect(getExtension('file.xml')).toBe('xml');
expect(getExtension('file.yaml')).toBe('yaml');
expect(getExtension('file.yml')).toBe('yaml');
expect(getExtension('file.toml')).toBe('toml');
});
// Shell and scripting
test('should handle shell and scripting extensions', () => {
expect(getExtension('file.sh')).toBe('bash');
expect(getExtension('file.bash')).toBe('bash');
expect(getExtension('file.ps1')).toBe('powershell');
});
// Database and query languages
test('should handle database related extensions', () => {
expect(getExtension('file.sql')).toBe('sql');
expect(getExtension('file.graphql')).toBe('graphql');
expect(getExtension('file.gql')).toBe('graphql');
});
// Functional programming languages
test('should handle functional programming language extensions', () => {
expect(getExtension('file.fs')).toBe('fsharp');
expect(getExtension('file.fsx')).toBe('fsharp');
expect(getExtension('file.hs')).toBe('haskell');
expect(getExtension('file.clj')).toBe('clojure');
expect(getExtension('file.cljs')).toBe('clojure');
});
// Other languages and tools
test('should handle other programming language extensions', () => {
expect(getExtension('file.scala')).toBe('scala');
expect(getExtension('file.dart')).toBe('dart');
expect(getExtension('file.ex')).toBe('elixir');
expect(getExtension('file.exs')).toBe('elixir');
expect(getExtension('file.erl')).toBe('erlang');
expect(getExtension('file.coffee')).toBe('coffeescript');
});
// Infrastructure and templating
test('should handle infrastructure and templating extensions', () => {
expect(getExtension('file.tf')).toBe('hcl');
expect(getExtension('file.tfvars')).toBe('hcl');
expect(getExtension('file.dockerfile')).toBe('dockerfile');
expect(getExtension('file.pug')).toBe('pug');
expect(getExtension('file.proto')).toBe('protobuf');
});
// Miscellaneous
test('should handle miscellaneous file extensions', () => {
expect(getExtension('file.md')).toBe('markdown');
expect(getExtension('file.r')).toBe('r');
expect(getExtension('file.pl')).toBe('perl');
expect(getExtension('file.pm')).toBe('perl');
expect(getExtension('file.lua')).toBe('lua');
expect(getExtension('file.groovy')).toBe('groovy');
expect(getExtension('file.vb')).toBe('vb');
});
// Edge cases
test('should handle edge cases', () => {
expect(getExtension('file')).toBe(''); // No extension
expect(getExtension('.gitignore')).toBe(''); // Dotfile
expect(getExtension('file.unknown')).toBe(''); // Unknown extension
expect(getExtension('path/to/file.js')).toBe('javascript'); // Path with directory
});
});
});