Nasal Unit Testing Framework: Difference between revisions

m
Fill in the sanitize function (you can remove the security if you want). Also, it is okay for getprop to return nil for non-existent properties.
m (Fill in the sanitize function (you can remove the security if you want). Also, it is okay for getprop to return nil for non-existent properties.)
Line 92: Line 92:


var sanitize = func(p) {
var sanitize = func(p) {
return p; # TODO: use a regex here to clean up strings i.e. trailing slashes, and property indices in the form of foo[b]/bar[n]/
    if (!p) die();
    parts = split(p, "/");
    for (var i=0; i<size(parts); i+=1) {
        if (parts[i] == "") {
            parts = parts[:i-1] ~ parts[i+1:];
            i-=1;
        }
        for (j=0; j<size(parts[i]); j+=1)
            if (parts[i][j] == "[") break;
            if (parts[i][j] != `-` and !isalpha(parts[i][j]) and
                parts[i][j] != `_` and !isdigit(parts[i][j]) and
                parts[i][j] != `.`) die("bad character in name "~parts[i]~" at index "~j);
        if (j == size(parts[i]))
            parts[i] ~= "[0]";
        elsif (parts[i][-1] != "]") die("bad index specifier")
    }
    var p = "/";
    foreach (var part; parts)
        p ~= part;
    return p;
}
}


# wrappers for the FG setprop/getprop APIs:
# wrappers for the FG setprop/getprop APIs:
var setprop = func(p, value) tree[ sanitize(p) ] = value;
var setprop = func(p, value) tree[ sanitize(p) ] = value;
var getprop = func(p) return tree[ sanitize(p) ] or 0.00;
var getprop = func(p) return tree[ sanitize(p) ];


# init your tree:
# init your tree:
395

edits