'use strict';
delete require.cache[require.resolve('../../build')];
delete require.cache[require.resolve('../../build/lib/core')];
const fs = require('fs').promises;
const hljs = require('../../build');
hljs.debugMode();
const path = require('path');
const utility = require('../utility');
const { getThirdPartyPackages } = require('../../tools/lib/external_language');
function testAutoDetection(language, { detectPath }) {
const languagePath = detectPath || utility.buildPath('detect', language);
it(`should be detected as ${language}`, async() => {
const dir = await fs.stat(languagePath);
dir.isDirectory().should.be.true();
const filenames = await fs.readdir(languagePath);
await Promise.all(filenames
.map(async function(example) {
const filename = path.join(languagePath, example);
const content = await fs.readFile(filename, 'utf-8');
const detectedLanguage = hljs.highlightAuto(content).language;
detectedLanguage.should.equal(language,
`${path.basename(filename)} should be detected as ${language}, but was ${detectedLanguage}`);
}));
});
}
describe('hljs.highlightAuto()', () => {
before(async function() {
const thirdPartyPackages = await getThirdPartyPackages();
const languages = hljs.listLanguages();
describe(`hljs.highlightAuto()`, function() {
languages.filter(hljs.autoDetection).forEach((language) => {
const detectPath = detectTestDir(language);
testAutoDetection(language, { detectPath });
});
});
function detectTestDir(name) {
for (let i = 0; i < thirdPartyPackages.length; ++i) {
const pkg = thirdPartyPackages[i];
const idx = pkg.names.indexOf(name);
if (idx !== -1) return pkg.detectTestPaths[idx];
}
return null;
}
});
it("compiling the grammars", async function() {
const languages = hljs.listLanguages();
languages.forEach(lang => hljs.highlight("", { language: lang} ))
});
});