file: Finish updating the new file test

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2014-04-26 14:06:20 -04:00
parent 55f3f06ded
commit 7b358259bd
4 changed files with 60 additions and 274 deletions

View File

@ -50,21 +50,17 @@ const unsigned int File :: get_version()
bool File :: exists()
{
return g_file_test(filename.c_str(), G_FILE_TEST_EXISTS);
return g_file_test(get_filepath(), G_FILE_TEST_EXISTS);
}
bool File :: open_read()
{
if (!exists()) {
dprint("ERROR: File does not exist\n");
if (!exists())
return false;
}
std::fstream::open(get_filepath(), std::fstream::in);
if (std::fstream::fail()) {
dprint("ERROR: File could not be opened for reading\n");
if (std::fstream::fail())
return false;
}
mode = OPEN_READ;
std::fstream::operator>>(version);
@ -74,16 +70,12 @@ bool File :: open_read()
bool File :: open_write()
{
if (g_mkdir_with_parents(find_dir(), 0755) != 0) {
dprint("ERROR: Could not make directory\n");
if (g_mkdir_with_parents(find_dir(), 0755) != 0)
return false;
}
std::fstream::open(get_filepath(), std::fstream::out);
if (std::fstream::fail()) {
dprint("ERROR: Could not open file for writing\n");
if (std::fstream::fail())
return false;
}
mode = OPEN_WRITE;
std::fstream::operator<<(FILE_VERSION) << std::endl;
@ -92,16 +84,8 @@ bool File :: open_write()
bool File :: open(OpenMode m)
{
if (filename == "") {
dprint("ERROR: No filename specified\n");
if ((filename == "") || (m == NOT_OPEN) || (mode != NOT_OPEN))
return false;
} else if (m == NOT_OPEN) {
dprint("ERROR: NOT_OPEN is not a legal OpenMode\n");
return false;
} else if (mode != NOT_OPEN) {
dprint("ERROR: File is already open\n");
return false;
}
else if (m == OPEN_READ)
return open_read();

View File

@ -1,112 +0,0 @@
#!/bin/bash
# Copyright 2014 (c) Anna Schumaker
. $(dirname $0)/_functions
function test_file
{
test_equal "./src/file.run $1" "$2"
}
function test_chmod
{
touch $2
chmod $1 $2
}
###
#
# Test filepaths
#
new_test "Filepath Test"
test_file -D INVALID
test_file "-D file.txt" "$DATA_DIR/file.txt"
test_file "file.txt" INVALID
test_file "-D -v file.txt" "0"
if [ -d $DATA_DIR ]; then
echo "ERROR: $DATA_DIR should not exist!"
exit 1
fi
###
#
# Test opening files
#
echo
new_test "File Open Test"
# Generic open testing
test_file "-o N file.txt" "ERROR: A file with hint = FILE_TYPE_INVALID cannot be opened"
test_file "-D -o N file.txt" "ERROR: NOT_OPEN is not a legal OpenMode"
test_file "-D -o W -O file.txt" "ERROR: File is already open" # This test creates a file
test_file "-D -o R -O file.txt" "ERROR: File is already open"
rm $DATA_DIR/*
# Test opening for read
test_file "-D -o R file.txt" "ERROR: File does not exist"
test_chmod -r $DATA_DIR/file.txt
test_file "-D -o R file.txt" "ERROR: File could not be opened for reading"
rm -r $DATA_DIR
# Test opening for write
touch $DATA_DIR
test_file "-D -o W file.txt" "ERROR: Could not make directory"
rm $DATA_DIR
mkdir -p $DATA_DIR
test_chmod -w $DATA_DIR/file.txt
test_file "-D -o W file.txt" "ERROR: Could not open file for writing"
rm -rf $DATA_DIR
###
#
# Test closing files
#
echo
new_test "File Close Test"
test_file "-D -c file.txt" ""
###
#
# Test FILE IO
#
data="ABCDE FGHIJ KLMNO PQRST UVWXYZ"
echo
new_test "File IO Test"
# Write to file
./src/file.run -D -w file.txt "$data"
start_test
assert_equal "$(cat $DATA_DIR/file.txt)" "0
$data"
# Read data back from file
test_file "-D -r file.txt" "ABCDE
FGHIJ
KLMNO
PQRST
UVWXYZ"
# Write different data to file
./src/file.run -D -w file.txt " $data"
start_test
assert_equal "$(cat $DATA_DIR/file.txt)" "0
$data"
# Read data back in a single line
test_file "-D -r -g file.txt" "$data"

View File

@ -1,23 +1,7 @@
/*
* Copyright 2014 (c) Anna Schumaker.
* Do stuff with files
*
* Usage: files -D|-L [-c -g -o {R, W, N} -O -r -v -w] name [DATA]
*
* -D: FILE_TYPE_DATA
* -L: FILE_TYPE_LEGACY
*
* -c: Test closing the file
* -g: Read file using getline()
* -o: Open the file for READ, WRITE, or NOT_OPEN
* -O: Open the file a second time
* -r: Read data from file
* -v: Print version and exit
* -w: Write data to file
*
*/
#include <file.h>
#include <print.h>
#include "test.h"
@ -37,132 +21,50 @@ static void test_filepath()
test_equal(test :: data_dir_exists(), false);
}
static void test_open()
{
File a("");
test_equal(a.open(OPEN_READ), false);
test_equal(a.open(OPEN_WRITE), false);
File b("file.txt");
test_equal(b.open(NOT_OPEN), false);
test_equal(b.open(OPEN_READ), false);
test_equal(b.open(OPEN_WRITE), true);
test_equal(b.open(OPEN_WRITE), false);
b.close();
test_equal(test :: data_file_exists("file.txt"), true);
}
static void test_io()
{
File a("file.txt");
test_equal(a.open(OPEN_WRITE), true);
a << "ABCDE FGHIJ KLMNO PQRST UVWXYZ" << std::endl;
a.close();
test_equal(a.exists(), true);
File b("file.txt");
std::string res;
test_equal(b.open(OPEN_READ), true);
b >> res;
test_equal(res, (std::string)"ABCDE");
b >> res;
test_equal(res, (std::string)"FGHIJ");
res = b.getline();
test_equal(res, (std::string)"KLMNO PQRST UVWXYZ");
}
int main(int argc, char **argv)
{
test :: rm_data_dir();
run_test("File Constructor Test", test_filepath);
run_test("File Open Test", test_open);
run_test("File I/O Test", test_io);
return 0;
}
/*#include <unistd.h>
enum action_t { CLOSE, OPEN, PATHS, READ, VERSION, WRITE };
int print_version(File &f)
{
print("%u\n", f.get_version());
return 0;
}
int print_filepath(File &f)
{
print("%s\n", f.get_filepath());
return 0;
}
int open_file(File &f, OpenMode mode)
{
if (f.open(mode) == true)
return 0;
return 1;
}
int main(int argc, char **argv)
{
int c, ret;
action_t action = PATHS;
FileLocHint hint = FILE_TYPE_INVALID;
OpenMode mode = NOT_OPEN;
bool second_open = false;
bool getline = false;
std::string file;
std::string data;
while ((c = getopt(argc, argv, "cDgo:Orvw")) != -1) {
switch (c) {
case 'c':
action = CLOSE;
break;
case 'D':
hint = FILE_TYPE_DATA;
break;
case 'g':
getline = true;
break;
case 'o':
action = OPEN;
switch (optarg[0]) {
case 'R':
mode = OPEN_READ;
break;
case 'W':
mode = OPEN_WRITE;
break;
case 'N':
mode = NOT_OPEN;
break;
default:
print("Invalid open mode\n");
return 1;
}
break;
case 'O':
second_open = true;
break;
case 'r':
action = READ;
break;
case 'v':
action = VERSION;
break;
case 'w':
action = WRITE;
break;
default:
return 1;
}
}
if (optind < argc)
file = argv[optind++];
if (optind < argc)
data = argv[optind++];
File f(file, hint);
switch (action) {
case CLOSE:
ret = open_file(f, OPEN_WRITE);
if (ret == 0) {
f.close();
ret = open_file(f, OPEN_WRITE);
}
return ret;
case OPEN:
ret = open_file(f, mode);
if ((ret == 0) && (second_open == true))
ret = open_file(f, mode);
return ret;
case PATHS:
return print_filepath(f);
case READ:
ret = open_file(f, OPEN_READ);
if (ret == 0) {
do {
if (getline == true)
data = f.getline();
else
f >> data;
if (f.good() == false)
break;
print("%s\n", data.c_str());
} while (true);
}
return ret;
case VERSION:
return print_version(f);
case WRITE:
ret = open_file(f, OPEN_WRITE);
if (ret == 0)
f << data << std::endl;
return ret;
}
}*/

View File

@ -72,6 +72,18 @@ namespace test
{
return g_file_test(data_dir().c_str(), G_FILE_TEST_IS_DIR);
}
bool data_file_exists(const std::string &name)
{
return g_file_test(data_file(name).c_str(), G_FILE_TEST_EXISTS);
}
void rm_data_dir()
{
std::string cmd = "rm -r " + data_dir() + " 2>/dev/null";
if (data_dir_exists())
system(cmd.c_str());
}
}
#define run_test(name, func, ...) \