blob: f437d6d947f2e8f81c997c9765029833574a581f [file] [log] [blame]
# 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")