1#!/usr/bin/python2
2#
3# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7"""Unit tests for format_utils.py."""
8
9import unittest
10
11from update_payload import format_utils
12
13
14class NumToPercentTest(unittest.TestCase):
15  """ Tests number conversion to percentage format."""
16  def testHundredPercent(self):
17    self.assertEqual(format_utils.NumToPercent(1, 1), '100%')
18
19  def testOverHundredPercent(self):
20    self.assertEqual(format_utils.NumToPercent(5, 2), '250%')
21
22  def testWholePercent(self):
23    self.assertEqual(format_utils.NumToPercent(3, 10), '30%')
24
25  def testDefaultMinPrecision(self):
26    self.assertEqual(format_utils.NumToPercent(3, 9), '33.3%')
27    self.assertEqual(format_utils.NumToPercent(3, 900), '0.3%')
28
29  def testDefaultMaxPrecision(self):
30    self.assertEqual(format_utils.NumToPercent(3, 9000000), '0.00003%')
31    self.assertEqual(format_utils.NumToPercent(3, 90000000), '0%')
32
33  def testCustomMinPrecision(self):
34    self.assertEqual(format_utils.NumToPercent(3, 9, min_precision=3),
35                     '33.333%')
36    self.assertEqual(format_utils.NumToPercent(3, 9, min_precision=0),
37                     '33%')
38
39  def testCustomMaxPrecision(self):
40    self.assertEqual(format_utils.NumToPercent(3, 900, max_precision=1),
41                     '0.3%')
42    self.assertEqual(format_utils.NumToPercent(3, 9000, max_precision=1),
43                     '0%')
44
45
46class BytesToHumanReadableTest(unittest.TestCase):
47  """ Tests number conversion to human readable format."""
48  def testBaseTwo(self):
49    self.assertEqual(format_utils.BytesToHumanReadable(0x1000), '4 KiB')
50    self.assertEqual(format_utils.BytesToHumanReadable(0x400000), '4 MiB')
51    self.assertEqual(format_utils.BytesToHumanReadable(0x100000000), '4 GiB')
52    self.assertEqual(format_utils.BytesToHumanReadable(0x40000000000), '4 TiB')
53
54  def testDecimal(self):
55    self.assertEqual(format_utils.BytesToHumanReadable(5000, decimal=True),
56                     '5 kB')
57    self.assertEqual(format_utils.BytesToHumanReadable(5000000, decimal=True),
58                     '5 MB')
59    self.assertEqual(format_utils.BytesToHumanReadable(5000000000,
60                                                       decimal=True),
61                     '5 GB')
62
63  def testDefaultPrecision(self):
64    self.assertEqual(format_utils.BytesToHumanReadable(5000), '4.8 KiB')
65    self.assertEqual(format_utils.BytesToHumanReadable(500000), '488.2 KiB')
66    self.assertEqual(format_utils.BytesToHumanReadable(5000000), '4.7 MiB')
67
68  def testCustomPrecision(self):
69    self.assertEqual(format_utils.BytesToHumanReadable(5000, precision=3),
70                     '4.882 KiB')
71    self.assertEqual(format_utils.BytesToHumanReadable(500000, precision=0),
72                     '488 KiB')
73    self.assertEqual(format_utils.BytesToHumanReadable(5000000, precision=5),
74                     '4.76837 MiB')
75
76
77if __name__ == '__main__':
78  unittest.main()
79