1#!/usr/bin/python
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 histogram.py."""
8
9import unittest
10
11import format_utils
12import histogram
13
14
15class HistogramTest(unittest.TestCase):
16
17  @staticmethod
18  def AddHumanReadableSize(size):
19    fmt = format_utils.BytesToHumanReadable(size)
20    return '%s (%s)' % (size, fmt) if fmt else str(size)
21
22  def CompareToExpectedDefault(self, actual_str):
23    expected_str = (
24        'Yes |################    | 5 (83.3%)\n'
25        'No  |###                 | 1 (16.6%)'
26    )
27    self.assertEqual(actual_str, expected_str)
28
29  def testExampleHistogram(self):
30    self.CompareToExpectedDefault(str(histogram.Histogram(
31        [('Yes', 5), ('No', 1)])))
32
33  def testFromCountDict(self):
34    self.CompareToExpectedDefault(str(histogram.Histogram.FromCountDict(
35        {'Yes': 5, 'No': 1})))
36
37  def testFromKeyList(self):
38    self.CompareToExpectedDefault(str(histogram.Histogram.FromKeyList(
39        ['Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes'])))
40
41  def testCustomScale(self):
42    expected_str = (
43        'Yes |#### | 5 (83.3%)\n'
44        'No  |     | 1 (16.6%)'
45    )
46    actual_str = str(histogram.Histogram([('Yes', 5), ('No', 1)], scale=5))
47    self.assertEqual(actual_str, expected_str)
48
49  def testCustomFormatter(self):
50    expected_str = (
51        'Yes |################    | 5000 (4.8 KiB) (83.3%)\n'
52        'No  |###                 | 1000 (16.6%)'
53    )
54    actual_str = str(histogram.Histogram(
55        [('Yes', 5000), ('No', 1000)], formatter=self.AddHumanReadableSize))
56    self.assertEqual(actual_str, expected_str)
57
58
59if __name__ == '__main__':
60  unittest.main()
61