puter/tools/comment-parser/test/test.js
2024-07-10 00:41:08 -04:00

128 lines
3.7 KiB
JavaScript

const {
StringStream,
LinesCommentParser,
BlockCommentParser,
CommentParser
} = require('../main');
const assert = async (label, fn) => {
if ( ! await fn() ) {
// TODO: strutil quot
throw new Error(`assert: '${label}' failed`)
}
};
describe('parsers', () => {
describe('lines-comment-parser', () => {
it ('basic test', async () => {
const parser = LinesCommentParser({ prefix: '//' });
let lines;
const ss = StringStream(`
// first line of first block
// second line of first block
// first line of second block
function () {}
`);
const results = [];
for (;;) {
comment = await parser.parse(ss);
if ( ! comment ) break;
results.push(comment.lines);
}
console.log('results?', results);
})
})
describe('block-comment-parser', () => {
it ('basic test', async () => {
const parser = BlockCommentParser({
start: '/*',
end: '*/',
ignore_line_prefix: '*',
});
let lines;
const ss = StringStream(`
/*
First block
comment
*/
/*
* second block
* comment
*/
/**
* third block
* comment
*/
function () {}
`);
const results = [];
for (;;) {
comment = await parser.parse(ss);
if ( ! comment ) break;
results.push(comment.lines);
}
console.log('results?', results);
})
it ('doesn\'t return anything for line comments', async () => {
const parser = BlockCommentParser({
start: '/*',
end: '*/',
ignore_line_prefix: '*',
});
let lines;
const ss = StringStream(`
// this comment should not be parsed
// by the block comment parser
function () {}
`);
const results = [];
for (;;) {
comment = await parser.parse(ss);
if ( ! comment ) break;
results.push(comment.lines);
}
console.log('results?', results);
})
})
describe('extract_top_comments', () => {
it ('basic test', async () => {
const parser = CommentParser();
const filename = 'test.js';
const source = `
// First lines comment
// second line of lines comment
/*
First block comment
second line of block comment
*/
`;
const results = await parser.extract_top_comments({
filename,
source,
});
console.log('results?', results);
})
})
describe('StringStream', () => {
describe('fork', () => {
it('works', async () => {
const ss = StringStream('asdf');
const ss_ = ss.fork();
ss_.fwd();
await assert('fwd worked', async () => {
return await ss_.get_char() === 's';
});
await assert('upstream state is same', async () => {
return await ss.get_char() === 'a';
});
})
})
})
});