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

"""Tests for test."""

import unittest, sys, os

import common
from autotest_lib.cli import cli_mock, topic_common, test
from autotest_lib.client.common_lib import control_data

CLIENT = control_data.CONTROL_TYPE_NAMES.CLIENT
SERVER = control_data.CONTROL_TYPE_NAMES.SERVER

class test_list_unittest(cli_mock.cli_unittest):
    values = [{u'description': u'unknown',
               u'test_type': CLIENT,
               u'test_class': u'Canned Test Sets',
               u'path': u'client/tests/test0/control',
               u'synch_type': u'Asynchronous',
               u'id': 138,
               u'name': u'test0',
               u'experimental': False},
              {u'description': u'unknown',
               u'test_type': SERVER,
               u'test_class': u'Kernel',
               u'path': u'server/tests/test1/control',
               u'synch_type': u'Asynchronous',
               u'id': 139,
               u'name': u'test1',
               u'experimental': False},
              {u'description': u'unknown',
               u'test_type': CLIENT,
               u'test_class': u'Canned Test Sets',
               u'path': u'client/tests/test2/control.readprofile',
               u'synch_type': u'Asynchronous',
               u'id': 140,
               u'name': u'test2',
               u'experimental': False},
              {u'description': u'unknown',
               u'test_type': SERVER,
               u'test_class': u'Canned Test Sets',
               u'path': u'server/tests/test3/control',
               u'synch_type': u'Asynchronous',
               u'id': 142,
               u'name': u'test3',
               u'experimental': False},
              {u'description': u'Random stuff to check that things are ok',
               u'test_type': CLIENT,
               u'test_class': u'Hardware',
               u'path': u'client/tests/test4/control.export',
               u'synch_type': u'Asynchronous',
               u'id': 143,
               u'name': u'test4',
               u'experimental': True}]


    def test_test_list_tests_default(self):
        self.run_cmd(argv=['atest', 'test', 'list'],
                     rpcs=[('get_tests', {'experimental': False},
                            True, self.values)],
                     out_words_ok=['test0', 'test1', 'test2',
                                   'test3', 'test4'],
                     out_words_no=['Random', 'control.export'])


    def test_test_list_tests_all(self):
        self.run_cmd(argv=['atest', 'test', 'list', '--all'],
                     rpcs=[('get_tests', {},
                            True, self.values)],
                     out_words_ok=['test0', 'test1', 'test2',
                                   'test3', 'test4'],
                     out_words_no=['Random', 'control.export'])


    def test_test_list_tests_exp(self):
        self.run_cmd(argv=['atest', 'test', 'list', '--experimental'],
                     rpcs=[('get_tests', {'experimental': True},
                            True,
                            [{u'description': u'Random stuff',
                              u'test_type': CLIENT,
                              u'test_class': u'Hardware',
                              u'path': u'client/tests/test4/control.export',
                              u'synch_type': u'Asynchronous',
                              u'id': 143,
                              u'name': u'test4',
                              u'experimental': True}])],
                     out_words_ok=['test4'],
                     out_words_no=['Random', 'control.export'])


    def test_test_list_tests_select_one(self):
        filtered = [val for val in self.values if val['name'] in ['test3']]
        self.run_cmd(argv=['atest', 'test', 'list', 'test3'],
                     rpcs=[('get_tests', {'name__in': ['test3'],
                                          'experimental': False},
                            True, filtered)],
                     out_words_ok=['test3'],
                     out_words_no=['test0', 'test1', 'test2', 'test4',
                                   'unknown'])


    def test_test_list_tests_select_two(self):
        filtered = [val for val in self.values
                    if val['name'] in ['test3', 'test1']]
        self.run_cmd(argv=['atest', 'test', 'list', 'test3,test1'],
                     rpcs=[('get_tests', {'name__in': ['test1', 'test3'],
                                          'experimental': False},
                            True, filtered)],
                     out_words_ok=['test3', 'test1', SERVER],
                     out_words_no=['test0', 'test2', 'test4',
                                   'unknown', CLIENT])


    def test_test_list_tests_select_two_space(self):
        filtered = [val for val in self.values
                    if val['name'] in ['test3', 'test1']]
        self.run_cmd(argv=['atest', 'test', 'list', 'test3', 'test1'],
                     rpcs=[('get_tests', {'name__in': ['test1', 'test3'],
                                          'experimental': False},
                            True, filtered)],
                     out_words_ok=['test3', 'test1', SERVER],
                     out_words_no=['test0', 'test2', 'test4',
                                   'unknown', CLIENT])


    def test_test_list_tests_all_verbose(self):
        self.run_cmd(argv=['atest', 'test', 'list', '-v'],
                     rpcs=[('get_tests', {'experimental': False},
                            True, self.values)],
                     out_words_ok=['test0', 'test1', 'test2',
                                   'test3', 'test4', 'client/tests',
                                   'server/tests'],
                     out_words_no=['Random'])


    def test_test_list_tests_all_desc(self):
        self.run_cmd(argv=['atest', 'test', 'list', '-d'],
                     rpcs=[('get_tests', {'experimental': False},
                            True, self.values)],
                     out_words_ok=['test0', 'test1', 'test2',
                                   'test3', 'test4', 'unknown', 'Random'],
                     out_words_no=['client/tests', 'server/tests'])


    def test_test_list_tests_all_desc_verbose(self):
        self.run_cmd(argv=['atest', 'test', 'list', '-d', '-v'],
                     rpcs=[('get_tests', {'experimental': False},
                            True, self.values)],
                     out_words_ok=['test0', 'test1', 'test2',
                                   'test3', 'test4', 'client/tests',
                                   'server/tests', 'unknown', 'Random' ])


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