dosemu2/test/func_mfs_truename.py
geos_one 17bb5d7efa
Some checks failed
Build / build (push) Has been cancelled
New upstream version 2.0-0.9
2025-08-14 09:28:49 +02:00

147 lines
2.9 KiB
Python

from os import makedirs
from os.path import join
from common_framework import (VFAT_MNTPNT,
setup_vfat_mounted_image, teardown_vfat_mounted_image)
def mfs_truename(self, fstype, tocreate, nametype, instring, expected):
ename = "mfstruen"
if fstype == "UFS":
testdir = "test-imagedir/dXXXXs/d"
makedirs(testdir, exist_ok=True)
batchfile = """\
%s
rem end
""" % ename
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
x:
c:\\%s
rem end
""" % ename
config = """\
$_hdimage = "dXXXXs/c:hdtype1 +1"
$_floppy_a = ""
$_lredir_paths = "/mnt/dosemu"
"""
else:
self.fail("Incorrect argument")
# Make test files and directory names
for i in tocreate:
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)
if nametype == "LFN0":
intnum = "0x7160"
qtype = "0"
elif nametype == "LFN1":
intnum = "0x7160"
qtype = "1"
elif nametype == "LFN2":
intnum = "0x7160"
qtype = "2"
elif nametype == "SFN":
intnum = "0x6000"
qtype = "0"
else:
self.fail("Incorrect argument")
# common
self.mkfile("testit.bat", batchfile, newline="\r\n")
# compile sources
self.mkcom_with_gas(ename, r"""
.text
.code16
.globl _start16
_start16:
push %%cs
pop %%ds
push %%cs
pop %%es
movw $%s, %%ax
movw $%s, %%cx
movw $src, %%si
movw $dst, %%di
int $0x21
movw $128, %%cx
movb $0, %%al
cld
repne scasb
movb $')', -1(%%di)
movb $'$', (%%di)
jnc prsucc
prfail:
movw $failmsg, %%dx
movb $0x9, %%ah
int $0x21
jmp exit
prsucc:
movw $succmsg, %%dx
movb $0x9, %%ah
int $0x21
prresult:
movb $0x9, %%ah
movw $pdst, %%dx
int $0x21
exit:
movb $0x4c, %%ah
int $0x21
src:
.asciz "%s"
succmsg:
.ascii "Directory Operation Success\r\n$"
failmsg:
.ascii "Directory Operation Failed\r\n$"
pdst:
.byte '('
dst:
.fill 128, 1, '$'
""" % (intnum, qtype, instring.replace("\\", "\\\\")))
results = self.runDosemu("testit.bat", config=config)
if fstype == "VFAT":
teardown_vfat_mounted_image(self)
self.assertRegex(results, r"X: = .*LINUX\\FS/mnt/dosemu")
if expected is None:
self.assertIn("Directory Operation Failed", results)
else:
self.assertIn("Directory Operation Success", results)
self.assertIn("(" + expected + ")", results)