#include "Config.h"

#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <limits.h>
#include <time.h>
#include <stdarg.h>

#include "Bootstrap.h"
#include "Str.h"
#include "system/Time.h"
#include "File.h"
#include "Dir.h"

/**
 * Dir.c unity tests. 
 */


int main(void) {
        Bootstrap(); // Need to initialize library
        
        printf("============> Start Dir Tests\n\n");
        
        printf("=> Test1: mkdir\n");
        {
                File_setUmask(022);
                assert(Dir_mkdir("X", 0));
                printf("\tResult: Dir X created with default perm = %#o\n", File_mod("X"));
                assert(File_mod("X") & 755);
                assert(Dir_mkdir("Y", 0700));
                printf("\tResult: Dir Y created with perm = %#o\n", File_mod("Y"));
                assert(File_mod("Y") & 700);
        }
        printf("=> Test1: OK\n\n");

        printf("=> Test2: chdir\n");
        {
                printf("\tResult: Changing working dir to X\n");
                assert(Dir_chdir("X"));
                printf("\tResult: Changing working dir to Y\n");
                assert(Dir_chdir("../Y"));
        }
        printf("=> Test2: OK\n\n");

        printf("=> Test3: getwd\n");
        {
                char cwd[STRLEN];
                assert(Dir_cwd(cwd, STRLEN));
                printf("\tResult: Current working dir is: %s\n", cwd);
                assert(Str_endsWith(cwd, "Y"));
                assert(Dir_chdir(".."));
                assert(Dir_cwd(cwd, STRLEN));
                printf("\tResult: Current working dir is: %s\n", cwd);
        }
        printf("=> Test3: OK\n\n");
                 
        printf("=> Test4: delete\n");
        {
                printf("\tResult: deleting dir X.. ");
                assert(Dir_delete("X"));
                printf("ok\n");
                printf("\tResult: deleting dir Y.. ");
                assert(Dir_delete("Y"));
                printf("ok\n");
        }
        printf("=> Test4: OK\n\n");
                 
        printf("============> Dir Tests: OK\n\n");
                 
        return 0;
}
