dosemu2/test/func_mfs_findfile.py
geos_one 91736529d5
Some checks failed
Master / Scheduled (FULL) (push) Has been cancelled
Master / Triggered (push) Has been cancelled
Master / Triggered (ASAN) (push) Has been cancelled
Master / Triggered (FULL) (push) Has been cancelled
New upstream version 2.0pre9.2
2025-08-10 12:35:43 +02:00

99 lines
2.2 KiB
Python

from os import makedirs
from os.path import join
from common_framework import (setup_vfat_mounted_image,
teardown_vfat_mounted_image, VFAT_MNTPNT)
def mfs_findfile(self, fstype, nametype, tests):
if nametype == "LFN":
disablelfn = ""
elif nametype == "SFN":
disablelfn = "set LFN=n"
else:
self.fail("Incorrect argument")
if fstype == "UFS":
testdir = "test-imagedir/dXXXXs/d"
makedirs(testdir, exist_ok=True)
batchfile = """\
%s
d:
c:\\mfsfind
rem end
""" % disablelfn
config = """\
$_hdimage = "dXXXXs/c:hdtype1 dXXXXs/d:hdtype1 +1"
$_floppy_a = ""
"""
elif fstype == "VFAT":
testdir = VFAT_MNTPNT
setup_vfat_mounted_image(self)
batchfile = """\
lredir X: /mnt/dosemu
lredir
%s
x:
c:\\mfsfind
rem end
""" % disablelfn
config = """\
$_hdimage = "dXXXXs/c:hdtype1 +1"
$_floppy_a = ""
$_lredir_paths = "/mnt/dosemu"
"""
else:
self.fail("Incorrect argument")
# common
# Make test files and directory names
for i in tests:
if i[0] == "FILE":
with open(join(testdir, i[1]), "w") as f:
f.write("Some data")
elif i[0] == "DIR":
makedirs(join(testdir, i[1]), exist_ok=True)
# Extract names to find
names = [i[2] for i in tests]
# common
self.mkfile("testit.bat", batchfile, newline="\r\n")
self.mkexe_with_djgpp("mfsfind", r"""
#include <dir.h>
#include <stdio.h>
int main(void) {
struct ffblk f;
int done = findfirst("*.*", &f, FA_HIDDEN | FA_SYSTEM | FA_DIREC);
while (!done) {
printf("%10u %2u:%02u:%02u %2u/%02u/%4u %s\n", f.ff_fsize,
(f.ff_ftime >> 11) & 0x1f, (f.ff_ftime >> 5) & 0x3f,
(f.ff_ftime & 0x1f) * 2, (f.ff_fdate >> 5) & 0x0f,
(f.ff_fdate & 0x1f), ((f.ff_fdate >> 9) & 0x7f) + 1980, f.ff_name);
done = findnext(&f);
}
return 0;
}
""")
results = self.runDosemu("testit.bat", config=config)
if fstype == "VFAT":
teardown_vfat_mounted_image(self)
self.assertRegex(results, r"X: = .*LINUX\\FS/mnt/dosemu")
for name in names:
with self.subTest(t=name):
self.assertIn(name, results)