#!/usr/bin/python2

"""Tests for autoserv_parser."""

import sys
import unittest

import common
from autotest_lib.server import autoserv_parser


class autoserv_parser_test(unittest.TestCase):
    """Test autoserv_parser can parse command line correctly.
    """

    def setUp(self):
        self.orig_sys_argv = sys.argv

    def tearDown(self):
        sys.argv = self.orig_sys_argv

    def _get_parser(self):
        """Get the parser class.
        """
        # We resort to this vile hack because autoserv_parser is bad
        # enough to instantiate itself and replace its own class definition
        # with its instance at module import time.  Disgusting.
        return autoserv_parser.autoserv_parser.__class__()

    def test_control_file_args(self):
        """Test the parser can parse args and unknown args correctly.
        """
        sys.argv = ['autoserv', '--args', '-y  -z foo --hello', 'controlfile']
        parser = self._get_parser()
        parser.parse_args()
        self.assertEqual(['controlfile', '-y', '-z', 'foo', '--hello'],
                         parser.args)

        sys.argv = ['autoserv', '--args', '-y  -z foo --hello', '--unknown_arg',
                    'unknown_arg_val', 'controlfile']
        parser = self._get_parser()
        parser.parse_args()
        self.assertEqual(['controlfile', '-y', '-z', 'foo', '--hello'],
                         parser.args)


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