Home Manual Reference Source Test Repository

src/transform/format.js

import fs                  from 'fs-extra';
import { assert }          from 'chai';

import ClassReport         from '../../../src/module/report/ClassReport';
import ClassMethodReport   from '../../../src/module/report/ClassMethodReport';
import ModuleMethodReport  from '../../../src/module/report/ModuleMethodReport';
import ModuleReport        from '../../../src/module/report/ModuleReport';
import ProjectReport       from '../../../src/project/report/ProjectReport';

import TransformFormat     from '../../../src/transform/TransformFormat';

import * as testconfig     from '../testconfig';

// Uncomment to generate matching format test data.
// generateFormatData();
runTests();

/**
 * Runs the tests
 */
function runTests()
{
   if (testconfig.modules['transformFormat'])
   {
      suite('transform:', () =>
      {
         suite('TransformFormat:', () =>
         {
            suite('forEach / formatReport (large-module/module):', () =>
            {
               const largeModuleJSON = require('typhonjs-escomplex-test-data/files/large-module/json/module');

               const moduleReport = ModuleReport.parse(largeModuleJSON);

               TransformFormat.forEach((format, formatName) =>
               {
                  if (TransformFormat.isSupported(formatName, moduleReport.type))
                  {
                     test(`formatName: ${formatName}`, () =>
                     {
                        const output = format.formatReport(moduleReport);

                        const original = fs.readFileSync(
                         `./test/fixture/files/large-module/module/module-${formatName}.${format.extension}`, 'utf8');

                        assert.strictEqual(output, original);
                     });
                  }
               });
            });

            suite('forEach / formatReport (large-project/project-no-modules):', () =>
            {
               const largeProjectJSON = require(
                'typhonjs-escomplex-test-data/files/large-project/json/project-no-modules');

               const projectResult = ProjectReport.parse(largeProjectJSON);

               TransformFormat.forEach((format, formatName) =>
               {
                  if (TransformFormat.isSupported(formatName, projectResult.type))
                  {
                     test(`formatName: ${formatName}`, () =>
                     {
                        const output = format.formatReport(projectResult);

                        const original = fs.readFileSync(
                         `./test/fixture/files/large-project/project-no-modules/project-${formatName}.${
                          format.extension}`, 'utf8');

                        assert.strictEqual(output, original);
                     });
                  }
               });
            });
         });

         suite('ClassReport:', () =>
         {
            suite('toFormat (large-class/class):', () =>
            {
               const largeClassJSON = require('typhonjs-escomplex-test-data/files/large-class/json/class');

               const classReport = ClassReport.parse(largeClassJSON);

               ClassReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = classReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-class/class/class-${format.name}.${format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-module/class-with-errors):', () =>
            {
               const largeClassJSON = require(
                'typhonjs-escomplex-test-data/files/large-class/json/class-with-errors');

               const classReport = ClassReport.parse(largeClassJSON);

               ClassReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = classReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-class/class-with-errors/class-${format.name}.${format.extension}`,
                       'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });
         });

         suite('MethodReport:', () =>
         {
            suite('toFormat (large-method/classmethod):', () =>
            {
               const largeMethodJSON = require('typhonjs-escomplex-test-data/files/large-method/json/classmethod');

               const methodReport = ClassMethodReport.parse(largeMethodJSON);

               ClassMethodReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = methodReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-method/classmethod/classmethod-${format.name}.${format.extension}`,
                       'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-method/classmethod-with-errors):', () =>
            {
               const largeMethodJSON = require(
                'typhonjs-escomplex-test-data/files/large-method/json/classmethod-with-errors');

               const methodReport = ClassMethodReport.parse(largeMethodJSON);

               ClassMethodReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = methodReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-method/classmethod-with-errors/classmethod-${format.name}.${
                       format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-method/modulemethod):', () =>
            {
               const largeMethodJSON = require('typhonjs-escomplex-test-data/files/large-method/json/modulemethod');

               const methodReport = ModuleMethodReport.parse(largeMethodJSON);

               ModuleMethodReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = methodReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-method/modulemethod/modulemethod-${format.name}.${format.extension}`,
                       'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-method/modulemethod-with-errors):', () =>
            {
               const largeMethodJSON = require(
                'typhonjs-escomplex-test-data/files/large-method/json/modulemethod-with-errors');

               const methodReport = ModuleMethodReport.parse(largeMethodJSON);

               ModuleMethodReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = methodReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-method/modulemethod-with-errors/modulemethod-${format.name}.${
                       format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });
         });

         suite('ModuleReport:', () =>
         {
            suite('toFormat (large-module/module):', () =>
            {
               const largeModuleJSON = require('typhonjs-escomplex-test-data/files/large-module/json/module');

               const moduleReport = ModuleReport.parse(largeModuleJSON);

               ModuleReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = moduleReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-module/module/module-${format.name}.${format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-module/module-with-errors):', () =>
            {
               const largeModuleJSON = require(
                'typhonjs-escomplex-test-data/files/large-module/json/module-with-errors');

               const moduleReport = ModuleReport.parse(largeModuleJSON);

               ModuleReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = moduleReport.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-module/module-with-errors/module-${format.name}.${format.extension}`,
                       'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });
         });

         suite('ProjectReport:', () =>
         {
            suite('toFormat (large-project/project):', () =>
            {
               const largeProjectJSON = require('typhonjs-escomplex-test-data/files/large-project/json/project');

               const projectResult = ProjectReport.parse(largeProjectJSON);

               ProjectReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = projectResult.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-project/project/project-${format.name}.${format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-project/project-no-modules):', () =>
            {
               const largeProjectJSON = require(
                'typhonjs-escomplex-test-data/files/large-project/json/project-no-modules');

               const projectResult = ProjectReport.parse(largeProjectJSON);

               ProjectReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = projectResult.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-project/project-no-modules/project-${format.name}.${
                       format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });

            suite('toFormat (large-project/project-with-errors):', () =>
            {
               const largeProjectJSON = require(
                'typhonjs-escomplex-test-data/files/large-project/json/project-with-errors');

               const projectResult = ProjectReport.parse(largeProjectJSON);

               ProjectReport.getFormats().forEach((format) =>
               {
                  test(`formatName: ${format.name}`, () =>
                  {
                     const output = projectResult.toFormat(format.name);

                     const original = fs.readFileSync(
                      `./test/fixture/files/large-project/project-with-errors/project-${format.name}.${
                       format.extension}`, 'utf8');

                     assert.strictEqual(output, original);
                  });
               });
            });
         });
      });
   }
}

/**
 * Generates the original module report / project result test data.
 */
/*
function generateFormatData()
{
   // Empty formatted result / report matching test data.
   fs.emptyDirSync('./test/fixture/files/large-class/class');
   fs.emptyDirSync('./test/fixture/files/large-class/class-with-errors');
   fs.emptyDirSync('./test/fixture/files/large-method/classmethod');
   fs.emptyDirSync('./test/fixture/files/large-method/classmethod-with-errors');
   fs.emptyDirSync('./test/fixture/files/large-method/modulemethod');
   fs.emptyDirSync('./test/fixture/files/large-method/modulemethod-with-errors');
   fs.emptyDirSync('./test/fixture/files/large-module/module');
   fs.emptyDirSync('./test/fixture/files/large-module/module-with-errors');
   fs.emptyDirSync('./test/fixture/files/large-project/project');
   fs.emptyDirSync('./test/fixture/files/large-project/project-no-modules');
   fs.emptyDirSync('./test/fixture/files/large-project/project-with-errors');

   // Generate project result formatted test data.

   const largeClassJSON = require('typhonjs-escomplex-test-data/files/large-class/json/class');
   const classReport = ClassReport.parse(largeClassJSON);

   ClassReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(classReport);

         fs.writeFileSync(
          `./test/fixture/files/large-class/class/class-${format.name}.${format.extension}`, output, 'utf8');
      });
   });

   const largeClassJSON2 = require('typhonjs-escomplex-test-data/files/large-class/json/class-with-errors');
   const classReport2 = ClassReport.parse(largeClassJSON2);

   ClassReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(classReport2);

         fs.writeFileSync(
          `./test/fixture/files/large-class/class-with-errors/class-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });

   const largeClassMethodJSON = require('typhonjs-escomplex-test-data/files/large-method/json/classmethod');
   const classMethodReport = ClassMethodReport.parse(largeClassMethodJSON);

   ClassMethodReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(classMethodReport);

         fs.writeFileSync(
          `./test/fixture/files/large-method/classmethod/classmethod-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });

   const largeClassMethodJSON2 = require(
    'typhonjs-escomplex-test-data/files/large-method/json/classmethod-with-errors');
   const classMethodReport2 = ClassMethodReport.parse(largeClassMethodJSON2);

   ClassMethodReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(classMethodReport2);

         fs.writeFileSync(
          `./test/fixture/files/large-method/classmethod-with-errors/classmethod-${format.name}.${format.extension}`,
           output, 'utf8');
      });
   });

   const largeModuleMethodJSON = require('typhonjs-escomplex-test-data/files/large-method/json/modulemethod');
   const moduleMethodReport = ModuleMethodReport.parse(largeModuleMethodJSON);

   ModuleMethodReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(moduleMethodReport);

         fs.writeFileSync(
          `./test/fixture/files/large-method/modulemethod/modulemethod-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });

   const largeModuleMethodJSON2 = require(
    'typhonjs-escomplex-test-data/files/large-method/json/modulemethod-with-errors');
   const moduleMethodReport2 = ModuleMethodReport.parse(largeModuleMethodJSON2);

   ModuleMethodReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(moduleMethodReport2);

         fs.writeFileSync(
          `./test/fixture/files/large-method/modulemethod-with-errors/modulemethod-${format.name}.${format.extension}`,
           output, 'utf8');
      });
   });

   const largeModuleJSON = require('typhonjs-escomplex-test-data/files/large-module/json/module');
   const moduleReport = ModuleReport.parse(largeModuleJSON);

   ModuleReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(moduleReport);

         fs.writeFileSync(
          `./test/fixture/files/large-module/module/module-${format.name}.${format.extension}`, output, 'utf8');
      });
   });

   const largeModuleJSON2 = require('typhonjs-escomplex-test-data/files/large-module/json/module-with-errors');
   const moduleReport2 = ModuleReport.parse(largeModuleJSON2);

   ModuleReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(moduleReport2);

         fs.writeFileSync(
          `./test/fixture/files/large-module/module-with-errors/module-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });

   // Generate module report formatted test data.

   const largeProjectJSON = require('typhonjs-escomplex-test-data/files/large-project/json/project');
   const projectResult = ProjectReport.parse(largeProjectJSON);

   ProjectReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(projectResult);

         fs.writeFileSync(
          `./test/fixture/files/large-project/project/project-${format.name}.${format.extension}`, output, 'utf8');
      });
   });

   const largeProjectJSON2 = require('typhonjs-escomplex-test-data/files/large-project/json/project-no-modules');
   const projectResult2 = ProjectReport.parse(largeProjectJSON2);

   ProjectReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(projectResult2);

         fs.writeFileSync(
          `./test/fixture/files/large-project/project-no-modules/project-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });

   const largeProjectJSON3 = require('typhonjs-escomplex-test-data/files/large-project/json/project-with-errors');
   const projectResult3 = ProjectReport.parse(largeProjectJSON3);

   ProjectReport.getFormats().forEach((format) =>
   {
      test(`generate formatName: ${format.name}`, () =>
      {
         const output = format.formatReport(projectResult3);

         fs.writeFileSync(
          `./test/fixture/files/large-project/project-with-errors/project-${format.name}.${format.extension}`, output,
           'utf8');
      });
   });
}
*/