/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

// Tests that the addon commands works as they should

function test() {
  return Task.spawn(spawnTest).then(finish, helpers.handleError);
}

function* spawnTest() {
  let options = yield helpers.openTab("about:blank");
  yield helpers.openToolbar(options);

  yield helpers.audit(options, [
    {
      setup: 'addon list dictionary',
      check: {
        input:  'addon list dictionary',
        hints:                       '',
        markup: 'VVVVVVVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: 'There are no add-ons of that type installed.'
      }
    },
    {
      setup: 'addon list extension',
      check: {
        input:  'addon list extension',
        hints:                      '',
        markup: 'VVVVVVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: [/The following/, /Mochitest/, /Special Powers/]
      }
    },
    {
      setup: 'addon list locale',
      check: {
        input:  'addon list locale',
        hints:                   '',
        markup: 'VVVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: 'There are no add-ons of that type installed.'
      }
    },
    {
      setup: 'addon list plugin',
      check: {
        input:  'addon list plugin',
        hints:                   '',
        markup: 'VVVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: [/Test Plug-in/, /Second Test Plug-in/]
      }
    },
    {
      setup: 'addon list theme',
      check: {
        input:  'addon list theme',
        hints:                  '',
        markup: 'VVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: [/following themes/, /Default/]
      }
    },
    {
      setup: 'addon list all',
      check: {
        input:  'addon list all',
        hints:                '',
        markup: 'VVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: [/The following/, /Default/, /Mochitest/, /Test Plug-in/,
                 /Second Test Plug-in/, /Special Powers/]
      }
    },
    {
      setup: 'addon disable Test_Plug-in_1.0.0.0',
      check: {
        input:  'addon disable Test_Plug-in_1.0.0.0',
        hints:                                    '',
        markup: 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV',
        status: 'VALID'
      },
      exec: {
        output: 'Test Plug-in 1.0.0.0 disabled.'
      }
    },
    {
      setup: 'addon disable WRONG',
      check: {
        input:  'addon disable WRONG',
        hints:                     '',
        markup: 'VVVVVVVVVVVVVVEEEEE',
        status: 'ERROR'
      }
    },
    {
      setup: 'addon enable Test_Plug-in_1.0.0.0',
      check: {
        input:  'addon enable Test_Plug-in_1.0.0.0',
        hints:                                   '',
        markup: 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV',
        status: 'VALID',
        args: {
          command: { name: 'addon enable' },
          addon: {
            value: function(addon) {
              is(addon.name, 'Test Plug-in', 'test plugin name');
            },
            status: 'VALID'
          }
        }
      },
      exec: {
        output: 'Test Plug-in 1.0.0.0 enabled.'
      }
    }
  ]);

  yield helpers.closeToolbar(options);
  yield helpers.closeTab(options);
}
