1b05a65a748bd2e2542e7b05f629d3bc69c8d8135Amin Hassani#!/usr/bin/python2
2553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold#
3553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
4553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold# Use of this source code is governed by a BSD-style license that can be
5553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold# found in the LICENSE file.
6553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
7553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold"""Unit tests for histogram.py."""
8553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
9553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnoldimport unittest
10553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
11b05a65a748bd2e2542e7b05f629d3bc69c8d8135Amin Hassanifrom update_payload import format_utils
12b05a65a748bd2e2542e7b05f629d3bc69c8d8135Amin Hassanifrom update_payload import histogram
13553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
14553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
15553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnoldclass HistogramTest(unittest.TestCase):
16b05a65a748bd2e2542e7b05f629d3bc69c8d8135Amin Hassani  """ Tests histogram"""
17553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
18553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  @staticmethod
19553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def AddHumanReadableSize(size):
20553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    fmt = format_utils.BytesToHumanReadable(size)
21553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    return '%s (%s)' % (size, fmt) if fmt else str(size)
22553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
23553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def CompareToExpectedDefault(self, actual_str):
24553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    expected_str = (
25553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'Yes |################    | 5 (83.3%)\n'
26553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'No  |###                 | 1 (16.6%)'
27553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    )
28553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.assertEqual(actual_str, expected_str)
29553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
30553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def testExampleHistogram(self):
31553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.CompareToExpectedDefault(str(histogram.Histogram(
32553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        [('Yes', 5), ('No', 1)])))
33553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
34553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def testFromCountDict(self):
35553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.CompareToExpectedDefault(str(histogram.Histogram.FromCountDict(
36553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        {'Yes': 5, 'No': 1})))
37553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
38553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def testFromKeyList(self):
39553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.CompareToExpectedDefault(str(histogram.Histogram.FromKeyList(
40553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        ['Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes'])))
41553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
42553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def testCustomScale(self):
43553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    expected_str = (
44553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'Yes |#### | 5 (83.3%)\n'
45553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'No  |     | 1 (16.6%)'
46553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    )
47553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    actual_str = str(histogram.Histogram([('Yes', 5), ('No', 1)], scale=5))
48553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.assertEqual(actual_str, expected_str)
49553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
50553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  def testCustomFormatter(self):
51553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    expected_str = (
52553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'Yes |################    | 5000 (4.8 KiB) (83.3%)\n'
53553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        'No  |###                 | 1000 (16.6%)'
54553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    )
55553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    actual_str = str(histogram.Histogram(
56553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold        [('Yes', 5000), ('No', 1000)], formatter=self.AddHumanReadableSize))
57553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold    self.assertEqual(actual_str, expected_str)
58553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
59553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold
60553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnoldif __name__ == '__main__':
61553b0ec49bc64fc4b7df4358cd31396a87276d2bGilad Arnold  unittest.main()
62