test_cli.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. """Tests for dulwich.cli utilities."""
  2. from unittest import TestCase
  3. from dulwich.cli import format_bytes, parse_relative_time
  4. class FormatBytesTestCase(TestCase):
  5. """Tests for format_bytes function."""
  6. def test_bytes(self):
  7. """Test formatting bytes."""
  8. self.assertEqual("0.0 B", format_bytes(0))
  9. self.assertEqual("1.0 B", format_bytes(1))
  10. self.assertEqual("512.0 B", format_bytes(512))
  11. self.assertEqual("1023.0 B", format_bytes(1023))
  12. def test_kilobytes(self):
  13. """Test formatting kilobytes."""
  14. self.assertEqual("1.0 KB", format_bytes(1024))
  15. self.assertEqual("1.5 KB", format_bytes(1536))
  16. self.assertEqual("2.0 KB", format_bytes(2048))
  17. self.assertEqual("1023.0 KB", format_bytes(1024 * 1023))
  18. def test_megabytes(self):
  19. """Test formatting megabytes."""
  20. self.assertEqual("1.0 MB", format_bytes(1024 * 1024))
  21. self.assertEqual("1.5 MB", format_bytes(1024 * 1024 * 1.5))
  22. self.assertEqual("10.0 MB", format_bytes(1024 * 1024 * 10))
  23. self.assertEqual("1023.0 MB", format_bytes(1024 * 1024 * 1023))
  24. def test_gigabytes(self):
  25. """Test formatting gigabytes."""
  26. self.assertEqual("1.0 GB", format_bytes(1024 * 1024 * 1024))
  27. self.assertEqual("2.5 GB", format_bytes(1024 * 1024 * 1024 * 2.5))
  28. self.assertEqual("1023.0 GB", format_bytes(1024 * 1024 * 1024 * 1023))
  29. def test_terabytes(self):
  30. """Test formatting terabytes."""
  31. self.assertEqual("1.0 TB", format_bytes(1024 * 1024 * 1024 * 1024))
  32. self.assertEqual("5.0 TB", format_bytes(1024 * 1024 * 1024 * 1024 * 5))
  33. self.assertEqual("1000.0 TB", format_bytes(1024 * 1024 * 1024 * 1024 * 1000))
  34. class ParseRelativeTimeTestCase(TestCase):
  35. """Tests for parse_relative_time function."""
  36. def test_now(self):
  37. """Test parsing 'now'."""
  38. self.assertEqual(0, parse_relative_time("now"))
  39. def test_seconds(self):
  40. """Test parsing seconds."""
  41. self.assertEqual(1, parse_relative_time("1 second ago"))
  42. self.assertEqual(5, parse_relative_time("5 seconds ago"))
  43. self.assertEqual(30, parse_relative_time("30 seconds ago"))
  44. def test_minutes(self):
  45. """Test parsing minutes."""
  46. self.assertEqual(60, parse_relative_time("1 minute ago"))
  47. self.assertEqual(300, parse_relative_time("5 minutes ago"))
  48. self.assertEqual(1800, parse_relative_time("30 minutes ago"))
  49. def test_hours(self):
  50. """Test parsing hours."""
  51. self.assertEqual(3600, parse_relative_time("1 hour ago"))
  52. self.assertEqual(7200, parse_relative_time("2 hours ago"))
  53. self.assertEqual(86400, parse_relative_time("24 hours ago"))
  54. def test_days(self):
  55. """Test parsing days."""
  56. self.assertEqual(86400, parse_relative_time("1 day ago"))
  57. self.assertEqual(604800, parse_relative_time("7 days ago"))
  58. self.assertEqual(2592000, parse_relative_time("30 days ago"))
  59. def test_weeks(self):
  60. """Test parsing weeks."""
  61. self.assertEqual(604800, parse_relative_time("1 week ago"))
  62. self.assertEqual(1209600, parse_relative_time("2 weeks ago"))
  63. self.assertEqual(
  64. 36288000, parse_relative_time("60 weeks ago")
  65. ) # 60 * 7 * 24 * 60 * 60
  66. def test_invalid_format(self):
  67. """Test invalid time formats."""
  68. with self.assertRaises(ValueError) as cm:
  69. parse_relative_time("invalid")
  70. self.assertIn("Invalid relative time format", str(cm.exception))
  71. with self.assertRaises(ValueError) as cm:
  72. parse_relative_time("2 weeks")
  73. self.assertIn("Invalid relative time format", str(cm.exception))
  74. with self.assertRaises(ValueError) as cm:
  75. parse_relative_time("ago")
  76. self.assertIn("Invalid relative time format", str(cm.exception))
  77. with self.assertRaises(ValueError) as cm:
  78. parse_relative_time("two weeks ago")
  79. self.assertIn("Invalid number in relative time", str(cm.exception))
  80. def test_invalid_unit(self):
  81. """Test invalid time units."""
  82. with self.assertRaises(ValueError) as cm:
  83. parse_relative_time("5 months ago")
  84. self.assertIn("Unknown time unit: months", str(cm.exception))
  85. with self.assertRaises(ValueError) as cm:
  86. parse_relative_time("2 years ago")
  87. self.assertIn("Unknown time unit: years", str(cm.exception))
  88. def test_singular_plural(self):
  89. """Test that both singular and plural forms work."""
  90. self.assertEqual(
  91. parse_relative_time("1 second ago"), parse_relative_time("1 seconds ago")
  92. )
  93. self.assertEqual(
  94. parse_relative_time("1 minute ago"), parse_relative_time("1 minutes ago")
  95. )
  96. self.assertEqual(
  97. parse_relative_time("1 hour ago"), parse_relative_time("1 hours ago")
  98. )
  99. self.assertEqual(
  100. parse_relative_time("1 day ago"), parse_relative_time("1 days ago")
  101. )
  102. self.assertEqual(
  103. parse_relative_time("1 week ago"), parse_relative_time("1 weeks ago")
  104. )