testing/mochitest/MochiKit/Test.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/testing/mochitest/MochiKit/Test.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,181 @@
     1.4 +/***
     1.5 +
     1.6 +MochiKit.Test 1.4
     1.7 +
     1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc.
     1.9 +
    1.10 +(c) 2005 Bob Ippolito.  All rights Reserved.
    1.11 +
    1.12 +***/
    1.13 +
    1.14 +if (typeof(dojo) != 'undefined') {
    1.15 +    dojo.provide('MochiKit.Test');
    1.16 +    dojo.require('MochiKit.Base');
    1.17 +}
    1.18 +
    1.19 +if (typeof(JSAN) != 'undefined') {
    1.20 +    JSAN.use("MochiKit.Base", []);
    1.21 +}
    1.22 +
    1.23 +try {
    1.24 +    if (typeof(MochiKit.Base) == 'undefined') {
    1.25 +        throw "";
    1.26 +    }
    1.27 +} catch (e) {
    1.28 +    throw "MochiKit.Test depends on MochiKit.Base!";
    1.29 +}
    1.30 +
    1.31 +if (typeof(MochiKit.Test) == 'undefined') {
    1.32 +    MochiKit.Test = {};
    1.33 +}
    1.34 +
    1.35 +MochiKit.Test.NAME = "MochiKit.Test";
    1.36 +MochiKit.Test.VERSION = "1.4";
    1.37 +MochiKit.Test.__repr__ = function () {
    1.38 +    return "[" + this.NAME + " " + this.VERSION + "]";
    1.39 +};
    1.40 +
    1.41 +MochiKit.Test.toString = function () {
    1.42 +    return this.__repr__();
    1.43 +};
    1.44 +
    1.45 +
    1.46 +MochiKit.Test.EXPORT = ["runTests"];
    1.47 +MochiKit.Test.EXPORT_OK = [];
    1.48 +
    1.49 +MochiKit.Test.runTests = function (obj) {
    1.50 +    if (typeof(obj) == "string") {
    1.51 +        obj = JSAN.use(obj);
    1.52 +    }
    1.53 +    var suite = new MochiKit.Test.Suite();
    1.54 +    suite.run(obj);
    1.55 +};
    1.56 +
    1.57 +MochiKit.Test.Suite = function () {
    1.58 +    this.testIndex = 0;
    1.59 +    MochiKit.Base.bindMethods(this);
    1.60 +};
    1.61 +
    1.62 +MochiKit.Test.Suite.prototype = {
    1.63 +    run: function (obj) {
    1.64 +        try {
    1.65 +            obj(this);
    1.66 +        } catch (e) {
    1.67 +            this.traceback(e);
    1.68 +        }
    1.69 +    },
    1.70 +    traceback: function (e) {
    1.71 +        var items = MochiKit.Iter.sorted(MochiKit.Base.items(e));
    1.72 +        print("not ok " + this.testIndex + " - Error thrown");
    1.73 +        for (var i = 0; i < items.length; i++) {
    1.74 +            var kv = items[i];
    1.75 +            if (kv[0] == "stack") {
    1.76 +                kv[1] = kv[1].split(/\n/)[0];
    1.77 +            }
    1.78 +            this.print("# " + kv.join(": "));
    1.79 +        }
    1.80 +    },
    1.81 +    print: function (s) {
    1.82 +        print(s);
    1.83 +    },
    1.84 +    is: function (got, expected, /* optional */message) {
    1.85 +        var res = 1;
    1.86 +        var msg = null;
    1.87 +        try {
    1.88 +            res = MochiKit.Base.compare(got, expected);
    1.89 +        } catch (e) {
    1.90 +            msg = "Can not compare " + typeof(got) + ":" + typeof(expected);
    1.91 +        }
    1.92 +        if (res) {
    1.93 +            msg = "Expected value did not compare equal";
    1.94 +        }
    1.95 +        if (!res) {
    1.96 +            return this.testResult(true, message);
    1.97 +        }
    1.98 +        return this.testResult(false, message,
    1.99 +            [[msg], ["got:", got], ["expected:", expected]]);
   1.100 +    },
   1.101 +
   1.102 +    testResult: function (pass, msg, failures) {
   1.103 +        this.testIndex += 1;
   1.104 +        if (pass) {
   1.105 +            this.print("ok " + this.testIndex + " - " + msg); 
   1.106 +            return;
   1.107 +        }
   1.108 +        this.print("not ok " + this.testIndex + " - " + msg);
   1.109 +        if (failures) {
   1.110 +            for (var i = 0; i < failures.length; i++) {
   1.111 +                this.print("# " + failures[i].join(" "));
   1.112 +            }
   1.113 +        }
   1.114 +    },
   1.115 +            
   1.116 +    isDeeply: function (got, expected, /* optional */message) {
   1.117 +        var m = MochiKit.Base;
   1.118 +        var res = 1;
   1.119 +        try {
   1.120 +            res = m.compare(got, expected);
   1.121 +        } catch (e) { 
   1.122 +            // pass
   1.123 +        }
   1.124 +        if (res === 0) {
   1.125 +            return this.ok(true, message);
   1.126 +        }
   1.127 +        var gk = m.keys(got);
   1.128 +        var ek = m.keys(expected);
   1.129 +        gk.sort();
   1.130 +        ek.sort();
   1.131 +        if (m.compare(gk, ek)) {
   1.132 +            // differing keys
   1.133 +            var cmp = {};
   1.134 +            var i;
   1.135 +            for (i = 0; i < gk.length; i++) {
   1.136 +                cmp[gk[i]] = "got";
   1.137 +            }
   1.138 +            for (i = 0; i < ek.length; i++) {
   1.139 +                if (ek[i] in cmp) {
   1.140 +                    delete cmp[ek[i]];
   1.141 +                } else {
   1.142 +                    cmp[ek[i]] = "expected";
   1.143 +                }
   1.144 +            }
   1.145 +            var diffkeys = m.keys(cmp);
   1.146 +            diffkeys.sort();
   1.147 +            var gotkeys = [];
   1.148 +            var expkeys = [];
   1.149 +            while (diffkeys.length) {
   1.150 +                var k = diffkeys.shift();
   1.151 +                if (k in Object.prototype) {
   1.152 +                    continue;
   1.153 +                }
   1.154 +                (cmp[k] == "got" ? gotkeys : expkeys).push(k);
   1.155 +            }
   1.156 +
   1.157 +
   1.158 +        }
   1.159 +        
   1.160 +        return this.testResult((!res), msg,
   1.161 +            (msg ? [["got:", got], ["expected:", expected]] : undefined)
   1.162 +        );
   1.163 +    },
   1.164 +    
   1.165 +    ok: function (res, message) {
   1.166 +        return this.testResult(res, message);
   1.167 +    }
   1.168 +};
   1.169 +
   1.170 +MochiKit.Test.__new__ = function () {
   1.171 +    var m = MochiKit.Base;
   1.172 +
   1.173 +    this.EXPORT_TAGS = {
   1.174 +        ":common": this.EXPORT,
   1.175 +        ":all": m.concat(this.EXPORT, this.EXPORT_OK)
   1.176 +    };
   1.177 +
   1.178 +    m.nameFunctions(this);
   1.179 +
   1.180 +};
   1.181 +
   1.182 +MochiKit.Test.__new__();
   1.183 +
   1.184 +MochiKit.Base._exportSymbols(this, MochiKit.Test);

mercurial