67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <string.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();
 | |
| }
 |