#!/usr/bin/python
#
# Copyright 2008 Google Inc. All Rights Reserved.

"""Test for atest."""

import unittest

try:
    import autotest.common as common  # pylint: disable=W0611
except ImportError:
    import common  # pylint: disable=W0611
from autotest.cli import cli_mock


class main_unittest(cli_mock.cli_unittest):

    def _test_help(self, argv, out_words_ok, err_words_ok):
        saved_outputs = None
        for help in ['-h', '--help', 'help']:
            outputs = self.run_cmd(argv + [help], exit_code=0,
                                   out_words_ok=out_words_ok,
                                   err_words_ok=err_words_ok)
            if not saved_outputs:
                saved_outputs = outputs
            else:
                self.assertEqual(outputs, saved_outputs)

    def test_main_help(self):
        """Main help level"""
        self._test_help(argv=['atest'],
                        out_words_ok=['atest [acl|host|job|label|atomicgroup'
                                      '|test|user] [action] [options]'],
                        err_words_ok=[])

    def test_main_help_topic(self):
        """Topic level help"""
        self._test_help(argv=['atest', 'host'],
                        out_words_ok=['atest host ',
                                      '[create|delete|list|stat|mod|jobs]'
                                      ' [options]'],
                        err_words_ok=[])

    def test_main_help_action(self):
        """Action level help"""
        self._test_help(argv=['atest', 'host', 'mod'],
                        out_words_ok=['atest host mod [options]'],
                        err_words_ok=[])

    def test_main_no_topic(self):
        self.run_cmd(['atest'], exit_code=1,
                     out_words_ok=['atest '
                                   '[acl|host|job|label|atomicgroup|test|user] '
                                   '[action] [options]'],
                     err_words_ok=['No topic argument'])

    def test_main_bad_topic(self):
        self.run_cmd(['atest', 'bad_topic'], exit_code=1,
                     out_words_ok=['atest [acl|host|job|label|atomicgroup'
                                   '|test|user] [action] [options]'],
                     err_words_ok=['Invalid topic bad_topic\n'])

    def test_main_bad_action(self):
        self.run_cmd(['atest', 'host', 'bad_action'], exit_code=1,
                     out_words_ok=['atest host [create|delete|list|stat|'
                                   'mod|jobs] [options]'],
                     err_words_ok=['Invalid action bad_action'])


if __name__ == '__main__':
    unittest.main()
