blob: 23d8d562458d537e1a9a8140b9254eff3f658576 [file] [edit]
/**
* @license
* Copyright 2026 The Go Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
* license that can be found in the LICENSE file.
*/
import { parse } from './markdown';
import fs from 'fs';
describe('parse', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('extracts single code block', async () => {
const mockContent = `
# Title
\`\`\`html
<div>Hello</div>
\`\`\`
`;
jest.spyOn(fs.promises, 'readFile').mockResolvedValue(mockContent);
const result = await parse('dummy.md');
expect(result).toBe('<div>Hello</div>\n');
});
it('extracts multiple code blocks', async () => {
const mockContent = `
\`\`\`html
<div>Block 1</div>
\`\`\`
Some text
\`\`\`html
<div>Block 2</div>
\`\`\`
`;
jest.spyOn(fs.promises, 'readFile').mockResolvedValue(mockContent);
const result = await parse('dummy.md');
expect(result).toBe('<div>Block 1</div>\n\n<div>Block 2</div>\n');
});
it('returns empty string if no code blocks', async () => {
const mockContent = `
# Title
No code blocks here.
`;
jest.spyOn(fs.promises, 'readFile').mockResolvedValue(mockContent);
const result = await parse('dummy.md');
expect(result).toBe('');
});
it('handles code blocks with language specifier', async () => {
const mockContent = `
\`\`\`javascript
const x = 1;
\`\`\`
`;
jest.spyOn(fs.promises, 'readFile').mockResolvedValue(mockContent);
const result = await parse('dummy.md');
expect(result).toBe('const x = 1;\n');
});
it('documents behavior with nested backticks (current limitation)', async () => {
const mockContent = `
\`\`\`javascript
const x = \` \`\`\` \`;
\`\`\`
`;
jest.spyOn(fs.promises, 'readFile').mockResolvedValue(mockContent);
const result = await parse('dummy.md');
// It stops at the first \`\`\` inside the string.
expect(result).toBe('const x = ` ');
});
});