90 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| /* testsuite.cc
 | |
| 
 | |
|    Copyright 2008 Red Hat, Inc.
 | |
| 
 | |
| This file is part of Cygwin.
 | |
| 
 | |
| This software is a copyrighted work licensed under the terms of the
 | |
| Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | |
| details. */
 | |
| 
 | |
| /* This file implements a driver for performing tests on the file/path
 | |
|    translation code in path.cc.  This file is meant to be generic, all
 | |
|    test harness data is in testsuite.h.  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <unistd.h>
 | |
| #define WIN32_LEAN_AND_MEAN
 | |
| #include <windows.h>
 | |
| #define TESTSUITE
 | |
| #include "testsuite.h"
 | |
| 
 | |
| typedef struct
 | |
|   {
 | |
|     const char *cwd;    /* in win32 form, as if by GetCurrentDirectory */
 | |
|     const char *posix;  /* input */
 | |
|     const char *win32;  /* expected output */
 | |
|   } test_t;
 | |
| 
 | |
| #define TESTSUITE_TESTS
 | |
| #include "testsuite.h"
 | |
| #undef TESTSUITE_TESTS
 | |
| 
 | |
| static int curtest;
 | |
| 
 | |
| /* A replacement for the w32api GetCurrentDirectory() that returns
 | |
|    the cwd that the current test specifies.  */
 | |
| DWORD
 | |
| testsuite_getcwd (DWORD nBufferLength, LPSTR lpBuffer)
 | |
| {
 | |
|   unsigned len = strlen (testsuite_tests[curtest].cwd) + 1;
 | |
| 
 | |
|   /* If the test specified NO_CWD, then it means we should not have
 | |
|      needed the CWD for that test as the test was for an absolute path,
 | |
|      and so if we see that here return 0, simulating a
 | |
|      GetCurrentDirectory() error.  */
 | |
|   if (strcmp (testsuite_tests[curtest].cwd, NO_CWD) == 0)
 | |
|     return 0;
 | |
| 
 | |
|   if (nBufferLength >= len)
 | |
|     {
 | |
|       strcpy (lpBuffer, testsuite_tests[curtest].cwd);
 | |
|       return len - 1;
 | |
|     }
 | |
|   return len;
 | |
| }
 | |
| 
 | |
| extern char *cygpath (const char *s, ...);
 | |
| 
 | |
| int
 | |
| main (int argc, char **argv)
 | |
| {
 | |
|   int numpass = 0;
 | |
| 
 | |
|   for (test_t &t = testsuite_tests[curtest]; t.posix; t = testsuite_tests[++curtest])
 | |
|     {
 | |
|       char *result = cygpath (t.posix, NULL);
 | |
|       bool pass = (strcmp (result, t.win32) == 0);
 | |
|       
 | |
|       if (pass)
 | |
|         {
 | |
|           numpass++;
 | |
|           printf ("test %03d: PASS cwd=%-18s input=%-22s expected+actual=%s\n",
 | |
|                   curtest, t.cwd, t.posix, result);
 | |
|         }
 | |
|       else
 | |
|         {
 | |
|           printf ("test %03d: FAIL cwd=%-18s input=%-29s expected=%-25s actual=%s\n",
 | |
|                   curtest, t.cwd, t.posix, t.win32, result);
 | |
|         }
 | |
|     }
 | |
|   printf ("\n"
 | |
|           "total tests: %d\n"
 | |
|           "pass       : %d (%.1f%%)\n"
 | |
|           "fail       : %d (%.1f%%)\n",
 | |
|           curtest, numpass, ((float)numpass)/curtest * 100.0F, curtest - numpass,
 | |
|           ((float)curtest - numpass)/curtest * 100.0F);
 | |
|   return (numpass < curtest ? 1 : 0);
 | |
| }
 |