| # Copyright 2020 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Test suite for pprint.py""" |
| |
| import datetime |
| import io |
| import os |
| |
| from chromite.lib import cros_test_lib |
| from chromite.lib import osutils |
| from chromite.utils import pformat |
| |
| |
| class TestPPrintTimedelta(cros_test_lib.TestCase): |
| """Tests PPrintTimedelta.""" |
| |
| def testDays(self) -> None: |
| delta = datetime.timedelta(days=1, hours=2, minutes=3, seconds=4) |
| pretty_delta = pformat.timedelta(delta) |
| self.assertEqual(pretty_delta, "1d2h3m4.000s") |
| |
| def testSeconds(self) -> None: |
| delta = datetime.timedelta(seconds=12, microseconds=345678) |
| pretty_delta = pformat.timedelta(delta) |
| self.assertEqual(pretty_delta, "12.345s") |
| |
| def testManySeconds(self) -> None: |
| delta = datetime.timedelta(seconds=200000) |
| pretty_delta = pformat.timedelta(delta) |
| self.assertEqual(pretty_delta, "2d7h33m20.000s") |
| |
| def testOnlyDaysAndSeconds(self) -> None: |
| delta = datetime.timedelta(days=1, seconds=23) |
| pretty_delta = pformat.timedelta(delta) |
| self.assertEqual(pretty_delta, "1d23.000s") |
| |
| |
| class TestJson(cros_test_lib.TempDirTestCase): |
| """Tests pformat.json.""" |
| |
| TESTS = ( |
| ([1, 2], "[\n 1,\n 2\n]\n", "[1,2]"), |
| ( |
| {"z": 1, "a": "カ"}, |
| '{\n "a": "カ",\n "z": 1\n}\n', |
| '{"a":"カ","z":1}', |
| ), |
| ) |
| |
| def testStrHuman(self) -> None: |
| """Test returning a string for humans.""" |
| for obj, exp, _ in self.TESTS: |
| result = pformat.json(obj) |
| self.assertEqual(exp, result) |
| |
| def testStrCompact(self) -> None: |
| """Test returning a string for machines.""" |
| for obj, _, exp in self.TESTS: |
| result = pformat.json(obj, compact=True) |
| self.assertEqual(exp, result) |
| |
| def testFileHuman(self) -> None: |
| """Test writing a file for humans.""" |
| for obj, exp, _ in self.TESTS: |
| fp = io.StringIO() |
| self.assertIsNone(pformat.json(obj, fp=fp)) |
| self.assertEqual(exp, fp.getvalue()) |
| |
| def testFileCompact(self) -> None: |
| """Test writing a file for machines.""" |
| for obj, _, exp in self.TESTS: |
| fp = io.StringIO() |
| self.assertIsNone(pformat.json(obj, fp=fp, compact=True)) |
| self.assertEqual(exp, fp.getvalue()) |
| |
| def testStrPathHuman(self) -> None: |
| """Test writing a string path for humans.""" |
| for obj, exp, _ in self.TESTS: |
| path = os.path.join(self.tempdir, "x") |
| self.assertIsNone(pformat.json(obj, fp=path)) |
| self.assertEqual(exp, osutils.ReadFile(path)) |
| |
| def testStringPathCompact(self) -> None: |
| """Test writing a string path for machines.""" |
| for obj, _, exp in self.TESTS: |
| path = os.path.join(self.tempdir, "x") |
| self.assertIsNone(pformat.json(obj, fp=path, compact=True)) |
| self.assertEqual(exp, osutils.ReadFile(path)) |
| |
| |
| class TestSize(cros_test_lib.TestCase): |
| """Tests pformat.size.""" |
| |
| def testBytes(self) -> None: |
| self.assertEqual(pformat.size(100), "100B") |
| |
| def testKilobytes(self) -> None: |
| self.assertEqual(pformat.size(340216), "332.2KiB") |
| |
| def testMegabytes(self) -> None: |
| self.assertEqual(pformat.size(1930135), "1.8MiB") |
| |
| def testGigabytes(self) -> None: |
| self.assertEqual(pformat.size(30040023123), "28.0GiB") |