67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
|
#include <stdio.h>
|
||
|
#include <cpm.h>
|
||
|
#include "test.h"
|
||
|
|
||
|
struct testcase
|
||
|
{
|
||
|
const char* input;
|
||
|
uint8_t drive;
|
||
|
uint8_t user;
|
||
|
const char filename[11];
|
||
|
};
|
||
|
|
||
|
struct testcase tests[] =
|
||
|
{
|
||
|
{ "12345678.ABC", 'A', 0, "12345678ABC" },
|
||
|
{ "12345678.A", 'A', 0, "12345678A " },
|
||
|
{ "12345678", 'A', 0, "12345678 " },
|
||
|
{ "1", 'A', 0, "1 " },
|
||
|
{ ".X", 'A', 0, " X " },
|
||
|
|
||
|
{ "B:FOO", 'B', 0, "FOO " },
|
||
|
{ "Z:FOO", 'Z', 0, "FOO " },
|
||
|
{ "1Z:FOO", 'Z', 1, "FOO " },
|
||
|
{ "23Z:FOO", 'Z', 23, "FOO " },
|
||
|
|
||
|
{ "*.*", 'A', 0, "???????????" },
|
||
|
{ "FOO*.*", 'A', 0, "FOO????????" },
|
||
|
{ "FOO*", 'A', 0, "FOO????? " },
|
||
|
{ "FOO.*", 'A', 0, "FOO ???" },
|
||
|
};
|
||
|
|
||
|
static int failed = 0;
|
||
|
|
||
|
static void do_test(int i, struct testcase* test)
|
||
|
{
|
||
|
static FCB fcb;
|
||
|
uint8_t got_user = cpm_parse_filename(&fcb, test->input);
|
||
|
|
||
|
if ((got_user == test->user)
|
||
|
&& (fcb.dr == (test->drive - '@'))
|
||
|
&& (memcmp(fcb.f, test->filename, 11) == 0))
|
||
|
return;
|
||
|
|
||
|
printf("Want: %s -> %d%c:'%.11s' but got %d%c:'%.11s'\n",
|
||
|
test->input,
|
||
|
test->user, test->drive, test->filename,
|
||
|
got_user, fcb.dr+'@', fcb.f);
|
||
|
|
||
|
failed = 1;
|
||
|
}
|
||
|
|
||
|
int main(int argc, const char* argv[])
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
failed = 0;
|
||
|
cpm_select_drive(0); /* A: */
|
||
|
cpm_set_user(0);
|
||
|
|
||
|
for (i=0; i<sizeof(tests)/sizeof(*tests); i++)
|
||
|
do_test(i, &tests[i]);
|
||
|
|
||
|
if (failed)
|
||
|
fail(0);
|
||
|
finished();
|
||
|
}
|