all files / tests/ testsWrapper.js

79.22% Statements 61/77
100% Branches 12/12
100% Functions 16/16
78.95% Lines 60/76
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112       17× 17×     237× 236× 236× 236× 236× 236×   237×   38× 38× 236×     35× 224× 224× 224×   35×     47× 47× 47×     17×   17× 232× 232× 232× 232×   232× 232× 232× 232× 232× 232× 232×           232× 232× 232× 232× 232×           232× 232× 232× 232×                 232× 232× 232× 232× 232×             232× 232×   232× 232× 232×           232× 232×            
define(['../js/main', 'lodash', 'jquery-3.1.1'], function(rb, _, $) {
    'use strict';
 
    function TestsWrapper(name) {
        this.name = name;
        this.tests = {};
    }
 
    TestsWrapper.prototype.addTest = function (name, init, action, checker, doClear) {
        if (Array.isArray(name)) {
            doClear = name[4];
            checker = name[3];
            action = name[2];
            init = name[1];
            name = name[0];
        }
        this.tests[name] = [init, action, checker, doClear !== false];
    };
    TestsWrapper.prototype.addTests = function (arr) {
        var self = this;
        _.forEach(arr, function (val) {
            self.addTest(val);
        });
    };
    TestsWrapper.prototype.addTestsSerial = function(name, init, tests) {
        tests = _.map(tests, function(test, index) {
            var initFn = index === 0 ? init : undefined;
            var isClear = index === (tests.length - 1);
            return [name + '_' + index, initFn, test[0], test[1], isClear];
        });
        this.addTests(tests);
    };
    TestsWrapper.prototype.start = function (initEach) {
        function clear() {
            rb.Batch.removeAll();
            $('.rb-wrapper').remove();
            rb.Screen._length = 1;
        }
 
        var self = this, prevClear = true;
 
        _.forEach(this.tests, function (testCheck, key) {
            var init = testCheck[0],
                action = testCheck[1],
                check = testCheck[2],
                doClear = testCheck[3];
 
            describe(self.name, function () {
                beforeEach(function (done) {
                    $(function () {
                        try {
                            window.describeName = self.name;
                            window.testName = key;
                            prevClear && initEach && initEach();
                        } catch (e) {
                            console.log('initEach failed');
                            console.error(e);
                            done(e);
                        }
                        rb.start(function () {
                            try {
                                window.describeName = self.name;
                                window.testName = key;
                                prevClear && init && init();
                            } catch (e) {
                                console.log('init failed');
                                console.error(e);
                                done(e);
                            }
                            try {
                                window.describeName = self.name;
                                window.testName = key;
                                action(done);
                            } catch (e) {
                                console.log('action failed');
                                console.error(e);
                                done(e);
                            }
                        });
                    });
                });
                it(key, function (done) {
                    try {
                        window.describeName = self.name;
                        window.testName = key;
                        var res = check();
                    } catch (e) {
                        console.log('check failed');
                        console.error(e);
                        expect(false).toBe(true);
                        done(e);
                    }
                    expect(res).toBe(true);
                    done();
                });
                afterEach(function (done) {
                    try {
                        doClear && clear();
                    } catch (e) {
                        console.log('clear failed');
                        console.error(e);
                        done(e);
                    }
                    prevClear = doClear;
                    done();
                });
            });
        });
    };
 
    return TestsWrapper;
});