mirror of
https://github.com/HeyPuter/puter
synced 2024-11-15 06:15:47 +00:00
128 lines
3.7 KiB
JavaScript
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';
|
||
|
});
|
||
|
})
|
||
|
})
|
||
|
})
|
||
|
});
|