Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Featuer/befor all a test #99

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 52 additions & 21 deletions libraries/std/src/ATest.af
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,50 @@ import {printString, print} from "String" under str;
int passes = 0;
int failures = 0;

int requires = 0;
int requiresPass = 0;
int requiresFail = 0;

export bool case(adr foo, adr _arg) {
io.print("Test Case "); io.print(_arg); io.print(": ");

bool result = foo(_arg);

if result {
io.print("OK\n", 'g');
passes = passes + 1;
io.print("\n----------------------------------------------------\n");
return true;
} else {
io.print("FAIL\n", 'r');
// print ' ' to stdErr
sys_write(2, " ", 1);
failures = failures + 1;
io.print("\n----------------------------------------------------\n");
return false;
};
requires = 0;

if requiresPass > 0
str.print(`{requiresPass} requires passed.\n`);

if requiresFail > 0
str.print(`{requiresFail} requires failed.\n`);

for int i = 0; i < requiresFail; i++ {
io.print("-", 'r');
};

for int i = 0; i < requiresPass; i++ {
io.print("+", 'g');
};

io.print("\n----------------------------------------------------\n");
requiresPass = 0;
requiresFail = 0;
return result;
};

export bool require(bool result, string describe) {
if result {
passes = passes + 1;
requiresPass = requiresPass + 1;
return true;
} else {
io.fPrint("\n\tTest require: %s: ", {describe});
io.print("FAIL\n", 'r');
// print ' ' to stdErr
sys_write(2, " ", 1);
failures = failures + 1;
requiresFail = requiresFail + 1;
return false;
};
requires = requires + 1;
};

export int report() {
Expand All @@ -61,38 +69,61 @@ export int report() {
io.print("\n");

if failures > 0 {
sys_write(2, " ", 1);
return 1;
} else {
return 0;
};
};

class TestSuite {
LinkedList cases = new LinkedList();
LinkedList args = new LinkedList();
private LinkedList cases = new LinkedList();
private LinkedList args = new LinkedList();
private adr beforeAll = beforeAll;
private adr cleanup = cleanup;
adr fixture = NULL;

String name = new String(name);
string name = new string(name);

TestSuite init(adr name) {
TestSuite init(adr name, * adr beforeAll, * adr cleanup) {
return my;
};

void setFixture(adr fixture) {
my.fixture = fixture;
};

int addCase(adr foo, adr _arg) {
my.cases.append(foo);
my.args.append(_arg);
return 0;
};

int run() {
io.print("\n\nRunning test suite: "); str.printString(my.name); io.print("\n\n\n");
str.print(`\n\nRunning test suite: {my.name}\n\n\n`);
for int i = 0; i < my.cases.size(); i++ {
adr foo = my.cases.get(i);
adr _arg = my.args.get(i);
foo(_arg);
str.print(`Running test case: {_arg}: `);
if my.beforeAll != NULL {
let beforeAll = my.beforeAll;
beforeAll(my.fixture);
};

foo(my.fixture);
};
return 0;
};

void del() {
delete my.cases;
delete my.args;
if my.cleanup != NULL {
let cleanup = my.cleanup;
cleanup(my.fixture);
};
};

};

class Mockable {
Expand Down