import unittest

from util.format import *

class format(unittest.TestCase):
    def test_int_from_string(self):
        self.assertEqual(100, asint('100'))
        self.assertEqual(-100, asint('-100'))
        self.assertEqual(0, asint('0'))

    def test_int_from_none(self):
        self.assertEqual(0, asint(None))

    def test_int_from_int(self):
        self.assertEqual(100, asint(100))
        self.assertEqual(-100, asint(-100))
        self.assertEqual(0, asint(0))

    def test_int_minimum(self):
        self.assertEqual(100, asint(100, minimum=10))
        self.assertEqual(100, asint(100, minimum=100))
        self.assertEqual(10, asint(5, minimum=10))

    def test_int_maximum(self):
        self.assertEqual(100, asint(100, maximum=200))
        self.assertEqual(100, asint(100, maximum=100))
        self.assertEqual(100, asint(200, maximum=100))

    def test_true_from_str(self):
        self.assertTrue(asbool('true'))
        self.assertTrue(asbool(True))
        self.assertTrue(asbool('t'))
        self.assertTrue(asbool('1'))
        self.assertTrue(asbool('yes'))
        self.assertTrue(asbool('y'))
        self.assertTrue(asbool('on'))

    def test_false_from_str(self):
        self.assertFalse(asbool('false'))
        self.assertFalse(asbool(False))
        self.assertFalse(asbool('f'))
        self.assertFalse(asbool('0'))
        self.assertFalse(asbool('no'))
        self.assertFalse(asbool('n'))
        self.assertFalse(asbool('off'))
        self.assertFalse(asbool(None))

    def test_list_from_None(self):
        self.assertEqual([], aslist(None))

    def test_list_from_list(self):
        self.assertEqual([1,2,3], aslist([1,2,3]))

    def test_list_from_str(self):
        self.assertEqual(['12', '13', '14'], aslist('12,13,14'))

    def test_byteformat(self):
        self.assertEqual('500.00B', byte(500))
        self.assertEqual('1.00KiB', byte(1024))
        self.assertEqual('1KiB', byte(1024, '{:.0f}'))
        self.assertEqual('1.50KiB', byte(1024+512))
        self.assertEqual('2.50MiB', byte(1024*1024*2 + 1024*512))
        self.assertEqual('4.50GiB', byte(1024*1024*1024*4 + 1024*1024*512))
        self.assertEqual('2048.00GiB', byte(1024*1024*1024*1024*2))

    def test_duration(self):
        self.assertEqual('04:20:00', duration(4*60*60+20*60))
        self.assertEqual('04:20:00h', duration(4*60*60+20*60, unit=True))
        self.assertEqual('04:20h', duration(4*60*60+20*60, compact=True, unit=True))

        self.assertEqual('20:00', duration(20*60))
        self.assertEqual('20:00m', duration(20*60, unit=True))
        self.assertEqual('20:00m', duration(20*60, compact=True, unit=True))

        self.assertEqual('00:20', duration(20))
        self.assertEqual('00:20m', duration(20, unit=True))
        self.assertEqual('00:20m', duration(20, compact=True, unit=True))

# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4