
var files = {};

function lookup(filename, line) {
    var f = files[filename];
    if (!f) {
	f = files[filename] = read(filename).split('\n');
    }
    return f[line-1]; // file line numbers are 1-based
}


function trace() {
    var FILELINE_RE = /[\b\s]\(?([^:\s]+):(\d+)/;
    var out = [];
    var e = Error().stack;
    var lines = e.split('\n');
    for (i in lines) {
	if (i > 2) {
	    g = lines[i].match(FILELINE_RE);
	    if (g) {
		out.push([g[1], parseInt(g[2])]);
	    } else {
		out.push(['UNKNOWN', 0]);
	    }
	}
    }
    return out;
}


function _pad(len, s) {
    s += '';
    while (s.length < len) {
	s += ' ';
    }
    return s;
}


function _check(cond, trace, condstr) {
    print('!', _pad(15, trace[0] + ':' + trace[1]),
	  _pad(54, condstr),
	  cond ? 'ok' : 'FAILED');
}


function _content(trace) {
    var WV_RE = /WV[\w_]+\((.*)\)/;
    var line = lookup(trace[0], trace[1]);
    var g = line.match(WV_RE);
    return g ? g[1] : '...';
}


function WVPASS(cond) {
    var t = trace()[1];
    if (arguments.length >= 1) {
	var condstr = _content(t);
	return _check(cond, t, condstr);
    } else {
	// WVPASS() with no arguments is a pass, although cond would
	// default to false
	return _check(true, t, '');
    }
}


function WVFAIL(cond) {
    var t = trace()[1];
    if (arguments.length >= 1) {
	var condstr = 'NOT(' + _content(t) + ')';
	return _check(!cond, t, condstr);
    } else {
	// WVFAIL() with no arguments is a fail, although cond would
	// default to false (which is a pass)
	return _check(false, t, 'NOT()')
    }
}


function WVEXCEPT(etype, func) {
    var t = trace()[1];
    try {
	func();
    } catch (e) {
	return _check(e instanceof etype, t, e);
    }
    return _check(false, t, 'no exception: ' + etype);
}


function WVPASSEQ(a, b, precision) {
    var t = trace()[1];
    var cond = precision ? Math.abs(a-b) < precision : (a == b);
    return _check(cond, t, '' + a + ' == ' + b);
}


function WVPASSNE(a, b, precision) {
    var t = trace()[1];
    var cond = precision ? Math.abs(a-b) >= precision : (a != b);
    return _check(a != b, t, '' + a + ' != ' + b);
}


function WVPASSLT(a, b) {
    var t = trace()[1];
    return _check(a < b, t, '' + a + ' < ' + b);
}


function WVPASSGT(a, b) {
    var t = trace()[1];
    return _check(a > b, t, '' + a + ' > ' + b);
}


function WVPASSLE(a, b) {
    var t = trace()[1];
    return _check(a <= b, t, '' + a + ' <= ' + b);
}


function WVPASSGE(a, b) {
    var t = trace()[1];
    return _check(a >= b, t, '' + a + ' >= ' + b);
}


function wvtest(name, f) {
    print('\nTesting "' + name + '" in ' + trace()[1][0] + ':');
    return f();
}


function print_trace() {
    print(trace())
}


function x() {
    print("x()");
    y(1);
}

function y(a) {
    print("y(", a, ")");
    z(a+5, a+6);
}

function z(a,b) {
    print("z(", a, b, ")");
    print_trace();
}

print("Hello world");
x();


wvtest('selftests', function() {
    WVPASS('yes');
    WVFAIL(false);
    WVFAIL(1 == 2);
    WVPASS();
    WVFAIL(false);
    WVEXCEPT(ReferenceError, function() { does_not_exist });
    WVEXCEPT(TypeError, null);
    WVPASSEQ('5', 5);
    WVPASSNE('5', 6);
    WVPASSNE(0.3, 1/3);
    WVPASSEQ(0.3, 1/3, 0.04);
    WVPASSNE(0.3, 1/3, 0.03);
    WVPASSLT('5', 6);
    WVPASSGT('6', '5');
    WVPASSLE('5', '6');
    WVPASSGE('5', 4);
});
