Home Reference Source Test Repository

test/bin/cli.test.js

const assert = require( 'power-assert' );
const Path = require( 'path' );
const CLI = require( '../../src/bin/cli.js' ).CLI;
const HelpText = require( '../../src/bin/cli.js' ).HelpText;
const Options = require( '../../src/bin/cli.js' ).Options;
const Package = require( '../../package.json' );
const StdOutMock = require( '../mock/stdout.mock.js' );

/** @test {CLI} */
describe( 'CLI', () => {
  /** @test {CLI#printHelp} */
  describe( 'printHelp', () => {
    it( 'Print', () => {
      const mock = new StdOutMock();
      CLI.printHelp( mock );
      assert( mock.text === HelpText );
    } );
  } );

  /** @test {CLI#printVersion} */
  describe( 'printVersion', () => {
    it( 'Print', () => {
      const mock = new StdOutMock();
      CLI.printVersion( mock );

      const expected = 'v' + Package.version + '\n';
      assert( mock.text === expected );
    } );
  } );

  /** @test {CLI#parseArgv} */
  describe( 'parseArgv', () => {
    it( 'Help', () => {
      let options = CLI.parseArgv( [] );
      assert( options.help );

      options = CLI.parseArgv( [ Options.help[ 0 ] ] );
      assert( options.help );

      options = CLI.parseArgv( [ Options.help[ 1 ] ] );
      assert( options.help );
    } );

    it( 'Version', () => {
      let options = CLI.parseArgv( [ Options.version[ 0 ] ] );
      assert( options.version );

      options = CLI.parseArgv( [ Options.version[ 1 ] ] );
      assert( options.version );
    } );

    it( 'Input', () => {
      const input    = './test/wp.xml';
      const expected = Path.resolve( input );
      let options = CLI.parseArgv( [ Options.input[ 0 ], input ] );
      assert( options.input === expected );

      options = CLI.parseArgv( [ Options.input[ 1 ], input ] );
      assert( options.input === expected );

      options = CLI.parseArgv( [ Options.input[ 0 ] ] );
      assert( options.input !== expected );

      options = CLI.parseArgv( [ Options.input[ 1 ], Options.help[ 0 ] ] );
      assert( options.input !== expected );
    } );

    it( 'Output', () => {
      const output   = './test';
      const expected = Path.resolve( output );
      let options = CLI.parseArgv( [ Options.output[ 0 ], output ] );
      assert( options.output === expected );

      options = CLI.parseArgv( [ Options.output[ 1 ], output ] );
      assert( options.output === expected );

      options = CLI.parseArgv( [ Options.output[ 0 ] ] );
      assert( options.output !== expected );

      options = CLI.parseArgv( [ Options.output[ 1 ], Options.help[ 0 ] ] );
      assert( options.output !== expected );
    } );

    it( 'Modes', () => {
      let modes   = 'no-gfm';
      let options = CLI.parseArgv( [ Options.modes[ 0 ], modes ] );
      assert( options.noGFM );

      options = CLI.parseArgv( [ Options.modes[ 1 ], modes ] );
      assert( options.noGFM );

      modes   = 'no-gfm,test,no-melink';
      options = CLI.parseArgv( [ Options.modes[ 1 ], modes ] );
      assert( options.noGFM && options.noMELink );

      options = CLI.parseArgv( [ Options.modes[ 0 ] ] );
      assert( !( options.noGFM && options.noMELink ) );

      options = CLI.parseArgv( [ Options.modes[ 1 ], Options.help[ 0 ] ] );
      assert( !( options.noGFM && options.noMELink ) );
    } );

    it( 'Report', () => {
      let options = CLI.parseArgv();
      assert( !( options.report ) );

      options = CLI.parseArgv( [ Options.report[ 0 ] ] );
      assert( options.report );

      options = CLI.parseArgv( [ Options.report[ 1 ] ] );
      assert( options.report );
    } );
  } );
} );