import { LanguageProfileUtil } from '../../../code-context/_base/LanguageProfile';
import { TreeSitterUtil } from '../../../code-context/ast/TreeSitterUtil';
import { TestLanguageServiceProvider } from '../../../test/TestLanguageService';

const Parser = require('web-tree-sitter');

describe('BlockBuilder for Java', () => {
	let parser: any;
	let language: any;
	let langConfig = LanguageProfileUtil.from('java')!!;

	beforeEach(async () => {
		await Parser.init();
		parser = new Parser();
		const languageService = new TestLanguageServiceProvider(parser);

		language = await langConfig.grammar(languageService, 'java')!!;
		parser.setLanguage(language);
	});

	it('build for node', async () => {
		const sourceCode = `
/**
 * This is a comment of Class Level.
 */
class HelloWorld {
		/**
		 * This is a method comment
		 */
    public static void main(string[] args) {
        System.Out.Println("Hello " + args[0]);
    }
}
`;

		let tree = parser.parse(sourceCode);

		const query = langConfig.methodQuery.query(language);

		const root = tree.rootNode;
		const matches = query?.matches(root);

		const blockNode = matches[0].captures[0].node;

		let commentNode = TreeSitterUtil.previousNodesOfType(blockNode, ['block_comment', 'line_comment']);

		expect(commentNode.length).toBe(1);
		expect(commentNode[0].text).includes('This is a method comment');
	});
});
