# -*- coding: utf-8 -*-
'''
unittests for table outputter
'''

# Import Python Libs
from __future__ import absolute_import, print_function, unicode_literals

# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import TestCase

# Import Salt Libs
import salt.output.table_out as table_out
import salt.utils.stringutils


class TableTestCase(TestCase, LoaderModuleMockMixin):
    '''
    Test cases for salt.output.table_out
    '''
    def setup_loader_modules(self):
        return {table_out: {}}

    # The test data should include unicode chars, and in Python 2 there should
    # be an example both of an encoded str type and an actual unicode type.
    # Since unicode_literals is imported, we will achieve the former using
    # salt.utils.stringutils.to_str and the latter by simply using a string
    # literal.
    data = [
        {'Food': salt.utils.stringutils.to_str('яйца, бекон, колбаса и спам'),
         'Price': 5.99},
        {'Food': 'спам, спам, спам, яйца и спам',
         'Price': 3.99},
    ]

    def test_output(self):
        ret = table_out.output(self.data)
        self.assertEqual(
            ret,
            ('    -----------------------------------------\n'
             '    |              Food             | Price |\n'
             '    -----------------------------------------\n'
             '    |  яйца, бекон, колбаса и спам  |  5.99 |\n'
             '    -----------------------------------------\n'
             '    | спам, спам, спам, яйца и спам |  3.99 |\n'
             '    -----------------------------------------')
        )
