瀏覽代碼

add file size tests, failing

the tests are failing because 1KB gets displayed as 1000 bytes, but also because higher prefixes are missing
Antoine Beaupré 10 年之前
父節點
當前提交
de390b1ca6
共有 1 個文件被更改,包括 26 次插入1 次删除
  1. 26 1
      borg/testsuite/helpers.py

+ 26 - 1
borg/testsuite/helpers.py

@@ -8,7 +8,7 @@ import pytest
 import sys
 import sys
 import msgpack
 import msgpack
 
 
-from ..helpers import adjust_patterns, exclude_path, Location, format_timedelta, IncludePattern, ExcludePattern, make_path_safe, \
+from ..helpers import adjust_patterns, exclude_path, Location, format_file_size, format_timedelta, IncludePattern, ExcludePattern, make_path_safe, \
     prune_within, prune_split, get_cache_dir, Statistics, \
     prune_within, prune_split, get_cache_dir, Statistics, \
     StableDict, int_to_bigint, bigint_to_int, parse_timestamp, CompressionSpec, ChunkerParams
     StableDict, int_to_bigint, bigint_to_int, parse_timestamp, CompressionSpec, ChunkerParams
 from . import BaseTestCase
 from . import BaseTestCase
@@ -443,3 +443,28 @@ This archive:                   20 B                 10 B                 10 B""
     assert s == "20 B"
     assert s == "20 B"
     # kind of redundant, but id is variable so we can't match reliably
     # kind of redundant, but id is variable so we can't match reliably
     assert repr(stats) == '<Statistics object at {:#x} (20, 10, 10)>'.format(id(stats))
     assert repr(stats) == '<Statistics object at {:#x} (20, 10, 10)>'.format(id(stats))
+
+def test_size():
+    """test the size formatting routines"""
+    si_size_map = { 0: '0 B',
+                    1: '1 B',
+                    142: '142 B',
+                    999: '999 B',
+                    1000: '1000 B', # XXX: fail
+                    1001: '1.00 kB',
+                    1234: '1.23 kB',
+                    10**6: '1.00 MB',
+                    10**6 + 10*10**3: '1.01 MB',
+                    10**9: '1.00 GB',
+                    10**9+1: '1.00 GB',
+                    10**9-1: '1.00 GB',
+                    10**9-10*10**3: '999.99 MB',
+                    10**9-10*10**3+1: '1.00 GB',
+                    10**12+1: '1.00 TB',
+                    10**15+1: '1.00 PB',
+                    10**18+1: '1.00 EB',
+                    10**21+1: '1.00 ZB',
+                    10**24+1: '1.00 YB',
+                }
+    for size, fmt in si_size_map.items():
+        assert format_file_size(size) == fmt