Skip to content

Commit

Permalink
test: fix flaky doctool and test
Browse files Browse the repository at this point in the history
Doctool tests have been failing a lot in CI on Win2008 R2. It appears
async functions and callback-based functions are being used in
combination such that the callback-based function cannot guarantee that
it will invoke its callback. Convert the callback-based functions to
async functions so we have one paradigm and reliable results.

Backport-PR-URL: #32642
PR-URL: #29979
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
  • Loading branch information
Trott authored and BethGriggs committed Apr 6, 2020
1 parent 0177464 commit 1ea70d6
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 34 deletions.
32 changes: 11 additions & 21 deletions test/doctool/test-doctool-html.js
Expand Up @@ -22,7 +22,7 @@ const remark2rehype = require('remark-rehype');
const raw = require('rehype-raw');
const htmlStringify = require('rehype-stringify');

function toHTML({ input, filename, nodeVersion }, cb) {
async function toHTML({ input, filename, nodeVersion }) {
const content = unified()
.use(markdown)
.use(html.firstHeader)
Expand All @@ -34,10 +34,7 @@ function toHTML({ input, filename, nodeVersion }, cb) {
.use(htmlStringify)
.processSync(input);

html.toHTML(
{ input, content, filename, nodeVersion },
cb
);
return html.toHTML({ input, content, filename, nodeVersion });
}

// Test data is a list of objects with two properties.
Expand Down Expand Up @@ -107,23 +104,16 @@ testData.forEach(({ file, html }) => {
// Normalize expected data by stripping whitespace.
const expected = html.replace(spaces, '');

readFile(file, 'utf8', common.mustCall((err, input) => {
readFile(file, 'utf8', common.mustCall(async (err, input) => {
assert.ifError(err);
toHTML(
{
input: input,
filename: 'foo',
nodeVersion: process.version,
},
common.mustCall((err, output) => {
assert.ifError(err);
const output = await toHTML({ input: input,
filename: 'foo',
nodeVersion: process.version });

const actual = output.replace(spaces, '');
// Assert that the input stripped of all whitespace contains the
// expected markup.
assert(actual.includes(expected),
`ACTUAL: ${actual}\nEXPECTED: ${expected}`);
})
);
const actual = output.replace(spaces, '');
// Assert that the input stripped of all whitespace contains the
// expected markup.
assert(actual.includes(expected),
`ACTUAL: ${actual}\nEXPECTED: ${expected}`);
}));
});
17 changes: 6 additions & 11 deletions tools/doc/generate.js
Expand Up @@ -67,7 +67,7 @@ if (!filename) {
}


fs.readFile(filename, 'utf8', (er, input) => {
fs.readFile(filename, 'utf8', async (er, input) => {
if (er) throw er;

const content = unified()
Expand All @@ -84,15 +84,10 @@ fs.readFile(filename, 'utf8', (er, input) => {

const basename = path.basename(filename, '.md');

html.toHTML(
{ input, content, filename, nodeVersion },
(err, html) => {
const target = path.join(outputDir, `${basename}.html`);
if (err) throw err;
fs.writeFileSync(target, html);
}
);
const myHtml = await html.toHTML({ input, content, filename, nodeVersion });
const htmlTarget = path.join(outputDir, `${basename}.html`);
fs.writeFileSync(htmlTarget, myHtml);

const target = path.join(outputDir, `${basename}.json`);
fs.writeFileSync(target, JSON.stringify(content.json, null, 2));
const jsonTarget = path.join(outputDir, `${basename}.json`);
fs.writeFileSync(jsonTarget, JSON.stringify(content.json, null, 2));
});
4 changes: 2 additions & 2 deletions tools/doc/html.js
Expand Up @@ -63,7 +63,7 @@ const gtocHTML = unified()
const templatePath = path.join(docPath, 'template.html');
const template = fs.readFileSync(templatePath, 'utf8');

async function toHTML({ input, content, filename, nodeVersion }, cb) {
async function toHTML({ input, content, filename, nodeVersion }) {
filename = path.basename(filename, '.md');

const id = filename.replace(/\W+/g, '-');
Expand All @@ -87,7 +87,7 @@ async function toHTML({ input, content, filename, nodeVersion }, cb) {
HTML = HTML.replace('__ALTDOCS__', '');
}

cb(null, HTML);
return HTML;
}

// Set the section name based on the first header. Default to 'Index'.
Expand Down

0 comments on commit 1ea70d6

Please sign in to comment.