]> pd.if.org Git - pdclib/blobdiff - functions/stdio/rename.c
Added preliminary test drivers.
[pdclib] / functions / stdio / rename.c
index 66ba2b8fbfce0b0c0905f6b27166129c43121c3c..f3ff01ee604a44ba46fc65c4802d8c17ef22ba9a 100644 (file)
@@ -20,15 +20,50 @@ int rename( const char * old, const char * new )
 #endif
 
 #ifdef TEST
+/* TODO: Work around the following undef */
+#undef SEEK_SET
 #include <_PDCLIB_test.h>
 
+#include <stdlib.h>
+
 int main( void )
 {
+    /* TODO: Extend to internal testing (buffer etc.) */
+    char filename1[] = "touch testfile1";
+    char filename2[] = "testfile2";
+    /* check that neither file exists */
+    TESTCASE( fopen( filename1 + 6, "r" ) == NULL );
+    TESTCASE( fopen( filename2, "r" ) == NULL );
+    /* rename file 1 to file 2 - expected to fail */
+    TESTCASE( rename( filename1 + 6, filename2 ) == -1 );
+    /* create file 1 */
+    system( filename1 );
+    /* check that file 1 exists */
+    TESTCASE( fopen( filename1 + 6, "r" ) != NULL );
+    /* rename file 1 to file 2 */
+    TESTCASE( rename( filename1 + 6, filename2 ) == 0 );
+    /* check that file 2 exists, file 1 does not */
+    TESTCASE( fopen( filename1 + 6, "r" ) == NULL );
+    TESTCASE( fopen( filename2, "r" ) != NULL );
+    /* create another file 1 */
+    system( filename1 );
+    /* check that file 1 exists */
+    TESTCASE( fopen( filename1 + 6, "r" ) != NULL );
+    /* rename file 1 to file 2 - expected to fail, see comment in
+       _PDCLIB_rename() itself.
+    */
 #ifndef REGTEST
-    TESTCASE( NO_TESTDRIVER );
+    TESTCASE( rename( filename1 + 6, filename2 ) == -1 );
 #else
-    puts( " NOTEST rename() test driver is PDCLib-specific." );
+    /* glibc rename() overwrites existing destination file. */
+    TESTCASE( rename( filename1 + 6, filename2 ) == 0 );
 #endif
+    /* remove both files */
+    remove( filename1 + 6 );
+    remove( filename2 );
+    /* check that they're gone */
+    TESTCASE( fopen( filename1 + 6, "r" ) == NULL );
+    TESTCASE( fopen( filename2, "r" ) == NULL );
     return TEST_RESULTS;
 }