Repository navigation
Expand file tree
/
Copy pathtest_sort_integration.py
More file actions
85 lines (72 loc) · 3.31 KB
/
Copy pathtest_sort_integration.py
File metadata and controls
85 lines (72 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import os
import tempfile
import time
from pathlib import Path
from cedarmapper.cli.main import run_cli
def _extract_basename_order(output: str):
"""Return list of basenames (files/dirs) in the order they appear in output lines."""
names = []
for line in output.splitlines():
line = line.strip()
if not line:
continue
# path is last whitespace-separated field
parts = line.split()
last = parts[-1]
# extract basename from full path
if "/" in last:
basename = last.split("/")[-1]
else:
basename = last
names.append(basename)
return names
def test_flat_sort_by_size_desc_and_asc():
with tempfile.TemporaryDirectory() as tmpdir:
root = Path(tmpdir)
# create files with controlled sizes
(root / "a.txt").write_bytes(b"a" * 10) # size 10
(root / "b.txt").write_bytes(b"b" * 5) # size 5
sub = root / "sub"
sub.mkdir()
(sub / "c.txt").write_bytes(b"c" * 20) # size 20
# global flat sort by size descending
code, out = run_cli([str(root), "--max-depth", "2", "--sort", "-s"])
assert code == 0
names = _extract_basename_order(out)
# verify relative order of files by size desc: c.txt (20) before a.txt (10) before b.txt (5)
assert "c.txt" in names and "a.txt" in names and "b.txt" in names
assert names.index("c.txt") < names.index("a.txt") < names.index("b.txt")
# now sort ascending (smallest first)
code, out = run_cli([str(root), "--max-depth", "2", "--sort", "s"])
assert code == 0
names = _extract_basename_order(out)
assert names.index("b.txt") < names.index("a.txt") < names.index("c.txt")
def test_tree_sibling_sort_by_name_reverse():
with tempfile.TemporaryDirectory() as tmpdir:
root = Path(tmpdir)
sd = root / "sd"
sd.mkdir()
# create two sibling files, alpha then beta (beta newer)
f_alpha = sd / "alpha.txt"
f_beta = sd / "beta.txt"
f_alpha.write_text("x")
f_beta.write_text("y")
# Ensure beta is strictly newer than alpha for mtime sort tests
# (CI filesystems might have coarse mtime resolution or be too fast)
now = time.time()
os.utime(f_alpha, (now - 10, now - 10))
os.utime(f_beta, (now, now))
# default tree (no sort) should list more-recent files first (beta before alpha)
code, out_default = run_cli([str(root), "--max-depth", "2", "--tree"])
assert code == 0
names_default = _extract_basename_order(out_default)
# explicit reverse name sort should invert the alphabetical sibling order
code, out_rev = run_cli([str(root), "--max-depth", "2", "--tree", "--sort", "-n"])
assert code == 0
names_rev = _extract_basename_order(out_rev)
# With new default sort (mtime desc), beta (newer) should appear before alpha
if "alpha.txt" in names_default and "beta.txt" in names_default:
assert names_default.index("beta.txt") < names_default.index("alpha.txt")
# reverse name sort should put 'beta' before 'alpha' in reverse alphabetical too
if "alpha.txt" in names_rev and "beta.txt" in names_rev:
assert names_rev.index("beta.txt") < names_rev.index("alpha.txt")