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);
 | 
						|
}
 |