assertSourceAstEqual()

in packages/fb-babel-plugin-utils/TestUtil.js [170:224]


  assertSourceAstEqual(expected, actual, options) {
    const expectedTree = stripMeta(
      parse(normalizeSourceCode(expected)).program,
      options,
    );
    const actualTree = stripMeta(
      parse(normalizeSourceCode(actual)).program,
      options,
    );
    try {
      assert.deepStrictEqual(actualTree, expectedTree);
    } catch (e) {
      const jsonDiff = require('json-diff');
      const expectedFormattedCode = formatSourceCode(expected);
      const actualFormattedCode = formatSourceCode(actual);
      const commonStr = firstCommonSubstring(
        expectedFormattedCode,
        actualFormattedCode,
      );
      const excerptLength = 60;
      const excerptDiffFromExpected = expectedFormattedCode.substr(
        commonStr.length,
        excerptLength,
      );
      const excerptDiffFromActual = actualFormattedCode.substr(
        commonStr.length,
        excerptLength,
      );

      const errMessage = `deepEqual node AST assert failed for the following code:

Expected output: <<<${expectedFormattedCode}>>>

Actual output: <<<${actualFormattedCode}>>>

First common string: <<<${commonStr}>>>

The first difference is (${excerptLength} chars max):

Expected : <<<${excerptDiffFromExpected}>>>

Actual   : <<<${excerptDiffFromActual}>>>

AST diff:
====
${jsonDiff.diffString(expectedTree, actualTree)}
====
`;
      console.error(errMessage);

      const err = new Error(errMessage);
      err.stack = e.stack;
      throw err;
    }
  },