├── .npmrc ├── .gitattributes ├── .editorconfig ├── .github └── workflows │ └── node.js.yml ├── .eslintrc.json ├── .npmignore ├── package.json ├── test ├── .gitignore ├── README.md ├── test.js └── index.js /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 4 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [8.x, 9.x, 10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x, 17.x, 18.x, 19.x, 20.x, 21.x, 22.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Use Node.js ${{ matrix.node-version }} 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | - run: npm i --also=dev --verbose 24 | - run: npm ls -a 25 | - run: npm test 26 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": false, 4 | "commonjs": true, 5 | "node":true, 6 | "es6": true 7 | }, 8 | "extends": "eslint:recommended", 9 | "globals": { 10 | "Atomics": "readonly", 11 | "SharedArrayBuffer": "readonly" 12 | }, 13 | "parserOptions": { 14 | "ecmaVersion": 2018 15 | }, 16 | "rules": { 17 | "indent": [ 18 | "error", 19 | 4 20 | ], 21 | "linebreak-style": [ 22 | "error", 23 | "unix" 24 | ], 25 | "quotes": [ 26 | "error", 27 | "single" 28 | ], 29 | "semi": [ 30 | "error", 31 | "always" 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | 2 | logs 3 | *.log 4 | *.swp 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | .yarn-integrity 9 | lerna-debug.log* 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | lib-cov 16 | coverage 17 | *.lcov 18 | .nyc_output 19 | .grunt 20 | bower_components 21 | .lock-wscript 22 | build/Release 23 | demo/ 24 | node_modules/ 25 | jspm_packages/ 26 | typings/ 27 | *.tsbuildinfo 28 | .eslintcache 29 | .rpt2_cache/ 30 | .rts2_cache_cjs/ 31 | .rts2_cache_es/ 32 | .rts2_cache_umd/ 33 | .node_repl_history 34 | *.tgz 35 | *.tar.gz 36 | *.tbz2 37 | *.tar.bz2 38 | *.txz 39 | *.tar.xz 40 | test 41 | .npm 42 | .yarn-integrity 43 | .env 44 | .env.test 45 | .cache 46 | .next 47 | .nuxt 48 | dist 49 | .git 50 | .npmignore 51 | .gitignore 52 | .github/ 53 | .editorconfig 54 | .eslintrc.json 55 | .jshintrc 56 | .travis.yml 57 | .gitattributes 58 | eslint.sh 59 | 60 | .vuepress/dist 61 | .serverless/ 62 | 63 | .dynamodb/ 64 | .fusebox/ 65 | .tern-port 66 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nanoTest", 3 | "version": "0.9.9-beta32", 4 | "description": "nano size unit test toolkit.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "node test.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/Soldy/nanoTest" 12 | }, 13 | "dependencies": { 14 | "assertrc": "1.0.7", 15 | "nano-test-output-cli": "0.9.9-beta28", 16 | "sandboxrc": "0.9.9-beta23", 17 | "setuprc": "0.9.9-beta20" 18 | }, 19 | "keywords": [ 20 | "unit", 21 | "test", 22 | "test", 23 | "simple", 24 | "unit", 25 | "test", 26 | "ultra", 27 | "fast", 28 | "unit", 29 | "test", 30 | "unittest", 31 | "nanotest", 32 | "simpletest" 33 | ], 34 | "author": "Soldy (http://gidigi.com)", 35 | "license": "GPL-3.0-or-later", 36 | "bugs": { 37 | "url": "https://github.com/Soldy/nanoTest/issues" 38 | }, 39 | "homepage": "https://github.com/Soldy/nanoTest#readme" 40 | } 41 | -------------------------------------------------------------------------------- /test: -------------------------------------------------------------------------------- 1 | #!/usr/bin/nodejs 2 | 3 | 4 | let nanoTestFull=()=>{ 5 | let nanotest = require('./index.js').test; 6 | let nanoTest = new nanotest( 7 | { 8 | 'debugPrint':'normal' 9 | } 10 | ); 11 | let testTest = nanoTest.add('"1. ", (()=>{return "0"})(), "!==", "1"', ()=>{return '0';}, '!==', '1'); 12 | nanoTest.add('"1. ", (()=>{return "0"})(), "===", "1"', ()=>{return (nanoTest.value(testTest));}, '===', '0'); 13 | nanoTest.add('"2. ", (()=>{return "0"})(), "!=", 1', ()=>{return nanoTest.value('ta');}, '===', false); 14 | nanoTest.add('"3. ", (()=>{return "0"})(), "==", "0"', ()=>{return nanoTest.setup().get('debugPrint');}, '===', 'normal'); 15 | nanoTest.add('"4. ", (()=>{return "0"})(), "!==", "0"', ()=>{return '0';}, '!==', 0); 16 | nanoTest.add('"5. ", (()=>{return "0"})(), "===", 0', ()=>{return 0;}, '===', 0); 17 | nanoTest.add('"6. ", (()=>{return "0"})(), "<", 1', ()=>{return '0';}, '<', 1); 18 | nanoTest.add('"7. ", (()=>{return "0"})(), ">", -1', ()=>{return '0';}, '>', -1); 19 | nanoTest.add('"8. ", (()=>{return "1"})(), "==", "1"', ()=>{return '1';}, '==', '1'); 20 | nanoTest.add('"9. ", (()=>{return "0"})(), "==", 1', ()=>{return '0';}, '!=', 1); 21 | nanoTest.add('"10.", (()=>{return "0"})(), "<", "1"', ()=>{return '0';}, '<', '1'); 22 | nanoTest.add('"11.", (()=>{return "1"})(), ">", "0"', ()=>{return '1';}, '>', '0'); 23 | nanoTest.add('"12.", (()=>{return {0:1}})(), "j===", {0:1}', ()=>{return {0:1};}, 'j===', {0:1}); 24 | nanoTest.add('"13.", (()=>{return {0:1}})(), "j==", {0:1}', ()=>{return {0:1};}, 'j==', {0:1}); 25 | nanoTest.add('"14.", (()=>{return {0:1}})(), "!=", {0:1}', ()=>{return {0:1};}, '!=', {0:1}); 26 | nanoTest.run(); 27 | }; 28 | nanoTestFull(); 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Super simple, fast, actively maintened test tool kit. 2 | 3 | ## nano unit test 4 | 5 | Ultra mini unit test. 6 | 7 | ### install 8 | 9 | ```bash 10 | npm install nanoTest 11 | ``` 12 | 13 | ### usage 14 | 15 | ```javascript 16 | const functest = require("nanoTest"); 17 | 18 | const test = new funtest(); 19 | 20 | test.add ( 21 | "example test", 22 | ()=>{ 23 | return 93 24 | }, 25 | "==", 26 | "93" 27 | ); 28 | 29 | test.add ( 30 | "example test 2", 31 | ()=>{ 32 | return 93 33 | }, 34 | "==", 35 | 93 36 | ); 37 | 38 | 39 | test.add ( 40 | "example test 3", 41 | { 42 | "function" : (n)=>{ 43 | return 93 +n 44 | }, 45 | "options" : [ 46 | 1 47 | ] 48 | }, 49 | ">", 50 | 93 51 | ); 52 | 53 | test.add ( 54 | "example test 4", 55 | { 56 | 'function' : (n,p)=>{ 57 | return { 58 | 'number': 93 +n, 59 | 'string': p 60 | }, 61 | 'options' : [ 62 | 1, 63 | 'something' 64 | ] 65 | "j==", 66 | { 67 | 'number' : 94, 68 | 'string' : 'something' 69 | } 70 | ); 71 | ``` 72 | ### add expected fail 73 | 74 | ```javascript 75 | test.add ( 76 | 'expected fail', 77 | { 78 | 'function' : ()=>{ 79 | just_fail(); 80 | }, 81 | 'options' : [] 82 | 'error' 83 | ); 84 | ``` 85 | 86 | 87 | 88 | ## run test 89 | 90 | ```javascript 91 | test.run(); 92 | ``` 93 | 94 | 95 | ## control variables 96 | 97 | 98 | 99 | | name | type | default | comment 100 | |-------------------------|---------|---------|----------------------------- 101 | | ```expected_ok``` | integer | -1 | test number expected ok 102 | | ```expected_fail``` | integer | -1 | test number expected fail 103 | | ```expected_error``` | integer | -1 | test number expected throw error 104 | | ```expected_missing``` | integer | -1 | test number expected missing 105 | | ```exit_code_fail``` | boolean | true | 106 | | ```exit_code_error``` | boolean | true | 107 | | ```exit_code_missing``` | boolean | true | 108 | | ```progress_bar``` | boolean | true | enable/disable progress bar 109 | | ```serialize``` | boolean | false | enable test list index visualization 110 | | ```debug_print``` | string | long | error message format options : short,long 111 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const missingFunction = new (function(){}); 4 | const errorFunction = function(){ return subidubibu();}; 5 | 6 | let nanoTestFull=async ()=>{ 7 | let nanotest = require('./index.js').test; 8 | let nanoTest = new nanotest({ 9 | 'progress_bar':false, 10 | 'debug_print':'short', 11 | 'exit_code_missing':false, 12 | 'exit_code_fail':false, 13 | 'exit_code_error':false 14 | }); 15 | nanoTest.add('"0. ", partly function test', ()=>{return true;}, '===', true); 16 | await nanoTest.partly(); 17 | nanoTest.add('"1. ", (()=>{return "0"})(), "!=", "1"', ()=>{return '0';}, '!=', '1'); 18 | nanoTest.add('"2. ", (()=>{return "0"})(), "!=", 1', ()=>{return '0';}, '!=', 1); 19 | nanoTest.add('"3. ", (()=>{return "0"})(), "==", "0"', ()=>{return '0';}, '==', '0'); 20 | nanoTest.add('"4. ", (()=>{return "0"})(), "!==", "0"', ()=>{return '0';}, '!==', 0); 21 | nanoTest.add('"5. ", (()=>{return "0"})(), "===", 0', ()=>{return 0;}, '===', 0); 22 | nanoTest.add('"6. ", (()=>{return "0"})(), "<", 1', ()=>{return '0';}, '<', 1); 23 | nanoTest.add('"7. ", (()=>{return "0"})(), ">", -1', ()=>{return '0';}, '>', -1); 24 | nanoTest.add('"8. ", (()=>{return "1"})(), "==", "1"', ()=>{return '1';}, '==', '1'); 25 | nanoTest.add('"9. ", (()=>{return "0"})(), "==", 1', ()=>{return '0';}, '!=', 1); 26 | nanoTest.add('"10.", (()=>{return "0"})(), "<", "1"', ()=>{return '0';}, '<', '1'); 27 | nanoTest.add('"11.", (()=>{return "1"})(), ">", "0"', ()=>{return '1';}, '>', '0'); 28 | nanoTest.add('"12.", (()=>{return {0:1}})(), "j===", {0:1}', ()=>{return {0:1};}, 'j===', {0:1}); 29 | nanoTest.add('"13.", (()=>{return {0:1}})(), "j==", {0:1}', ()=>{return {0:1};}, 'j==', {0:1}); 30 | nanoTest.add('"14.", (()=>{return {0:1}})(), "!=", {0:1}', ()=>{return {0:1};}, '!=', {0:1}); 31 | nanoTest.add( 32 | '"15.", errorFunctior, "!=", {0:1}', 33 | { 34 | 'function':errorFunction, 35 | 'options':[] 36 | }, 37 | '!=', {0:1} 38 | ); 39 | nanoTest.add( 40 | '"16.", missingFunction, "!=", {0:1}', 41 | { 42 | 'function':missingFunction.a, 43 | 'options':[] 44 | }, 45 | '!=', {0:1} 46 | ); 47 | nanoTest.add( 48 | '"17.", errorFunctior, "error"', 49 | { 50 | 'function':errorFunction, 51 | 'options':[] 52 | }, 53 | 'error' 54 | ); 55 | nanoTest.add( 56 | '"18.", errorFunctior withouth "error"', 57 | { 58 | 'function':()=>{return undefined;}, 59 | 'options':[] 60 | }, 61 | 'error' 62 | ); 63 | nanoTest.add( 64 | '"19.", no error result test', 65 | { 66 | 'function':()=>{return 'can be anything';}, 67 | 'options':[] 68 | }, 69 | '!error' 70 | ); 71 | nanoTest.run({ 72 | expected_ok:7, 73 | expected_fail:11, 74 | expected_error:1, 75 | expected_missing:1 76 | }); 77 | }; 78 | 79 | nanoTestFull(); 80 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Soldy\nanoTest\2021.02.04\GPL3 3 | */ 4 | 'use strict'; 5 | const $setuprc = (require('setuprc')).base; 6 | const $screen = (require('nano-test-output-cli')).base; 7 | const $sandboxrc = require('sandboxrc').base; 8 | const $assertrc = new (require('assertrc')).base(); 9 | 10 | /* 11 | * @param {setuprc} settings 12 | * @prototype 13 | */ 14 | const masterBase = function(settings){ 15 | /* 16 | * Add new test 17 | * 18 | * @param {string} name 19 | * @param {object} test 20 | * @param {string} rule 21 | * @param {any} sample 22 | * @public 23 | * @return {string} id 24 | * 25 | */ 26 | this.add = function (name, test, rule, sample) { 27 | let id = 't'+_serial+'t'; 28 | _serial++; 29 | _tests[id] = { 30 | 'name' : name, 31 | 'test' : test, 32 | 'rule' : rule, 33 | 'sample' : sample, 34 | 'ready' : false, 35 | 'startTime': 0, 36 | 'endTime' : 0, 37 | 'time' : 0, 38 | 'result' : 0, 39 | 'error' : '', 40 | 'value' : '', 41 | 'check' : false, 42 | 'debug' : '', 43 | 'willfail' : false 44 | }; 45 | if(rule === 'error') 46 | _tests[id].willfail = true; 47 | _sandboxes[id] = new $sandboxrc( 48 | _tests[id] 49 | ); 50 | return id; 51 | }; 52 | /* 53 | * get test function output 54 | * 55 | * @param {string} id 56 | * @public 57 | * @return {string} id 58 | * 59 | */ 60 | this.value = function(id){ 61 | if(typeof _tests[id] === 'undefined') 62 | return false; 63 | return _tests[id].value; 64 | }; 65 | /* 66 | * call the setup object 67 | * 68 | * @public 69 | * @return {object} setup 70 | * 71 | */ 72 | this.setup = function(){ 73 | return _setup; 74 | }; 75 | /* 76 | * test runner 77 | * @public 78 | * 79 | */ 80 | this.partly = async function(){ 81 | _screenInit(); 82 | for (let t in _tests){ 83 | if(_tests[t].startTime === 0) 84 | await _run(t); 85 | } 86 | }; 87 | /* 88 | * test runner 89 | * @public 90 | * @return {boolean} 91 | * 92 | */ 93 | this.run = async function(){ 94 | _start_time = (+new Date); 95 | _count(); 96 | _screenInit(); 97 | for (let t in _tests){ 98 | if(_tests[t].startTime === 0) 99 | await _run(t); 100 | } 101 | _end_time = (Date.now()); 102 | _count(); 103 | _screen.change(_result); 104 | return _end(); 105 | }; 106 | /* 107 | * setup helper 108 | * @private 109 | */ 110 | let _setup = new $setuprc({ 111 | 'debug_print':{ 112 | 'type' : 'select', 113 | 'list' : [ 114 | 'normal', 115 | 'long', 116 | 'short' 117 | ], 118 | 'default' : 'long' 119 | }, 120 | 'progress_bar':{ 121 | 'type' : 'bool', 122 | 'default' : true 123 | }, 124 | 'exit_code_fail':{ 125 | 'type' : 'bool', 126 | 'default' : true 127 | }, 128 | 'exit_code_error':{ 129 | 'type' : 'bool', 130 | 'default' : true 131 | }, 132 | 'exit_code_missing':{ 133 | 'type' : 'bool', 134 | 'default' : true 135 | }, 136 | 'expected_ok' : { 137 | 'type' : 'integer', 138 | 'default' : -1 139 | }, 140 | 'expected_fail' : { 141 | 'type' : 'integer', 142 | 'default' : -1 143 | }, 144 | 'expected_error' : { 145 | 'type' : 'integer', 146 | 'default' : -1 147 | }, 148 | 'expected_missing' : { 149 | 'type' : 'integer', 150 | 'default' : -1 151 | }, 152 | 'serialize':{ 153 | 'type' : 'bool', 154 | 'default' : false 155 | } 156 | }); 157 | /* 158 | * screen or output 159 | * @private 160 | * 161 | */ 162 | let _screen = ''; 163 | /* 164 | * result type list 165 | * @private 166 | * @var {array} 167 | * 168 | */ 169 | let _result_type = [ 170 | 'not tested', 171 | 'ok', 172 | 'fail', 173 | 'error', 174 | 'missing' 175 | ]; 176 | /* 177 | * result counter 178 | * @private 179 | * @var {object} 180 | * 181 | */ 182 | let _result = { 183 | ok: 0, 184 | fail: 0, 185 | error: 0, 186 | missing: 0 187 | }; 188 | /* 189 | * test start time 190 | * @private 191 | * @var {integer} 192 | * 193 | */ 194 | let _start_time = 0; 195 | /* 196 | * test finish time 197 | * @private 198 | * @var {integer} 199 | * 200 | */ 201 | let _end_time = 0; 202 | /* 203 | * @private 204 | * @var {integer} 205 | * 206 | */ 207 | let _size = 0; 208 | /* 209 | * @private 210 | * @var {integer} 211 | * 212 | */ 213 | let _serial = 0; 214 | /* 215 | * @private 216 | * @var {integer} 217 | * 218 | */ 219 | let _tests = {}; 220 | /* 221 | * @private 222 | * @var {integer} 223 | * 224 | */ 225 | let _sandboxes = {}; 226 | /* 227 | * status counter 228 | * @private 229 | * @return {integer} 230 | * 231 | */ 232 | const _count = function(){ 233 | let newSize = 0; 234 | let newResult = { 235 | start:_start_time, 236 | end:_end_time, 237 | time:(Date.now())-_start_time, 238 | all:0, 239 | ok: 0, 240 | fail: 0, 241 | error: 0, 242 | missing: 0 243 | }; 244 | for (let i in _tests){ 245 | newSize++; 246 | if(_tests[i].ready === true) 247 | newResult[_result_type[_tests[i].result]]++; 248 | } 249 | _size = newSize; 250 | newResult.all = _size; 251 | _result = newResult; 252 | return _size; 253 | }; 254 | /* 255 | * @private 256 | * @return {void} 257 | * 258 | */ 259 | const _screenInit = function(){ 260 | if(typeof _screen.change === 'undefined') 261 | _screen = new $screen(_result, _setup); 262 | } 263 | /* 264 | * @param {object} 265 | * @private 266 | * 267 | */ 268 | const _run = async function(test){ 269 | const result = await _sandboxes[test].check(_tests); 270 | _tests[test].startTime = result.startTime; 271 | _tests[test].endTime = result.endTime; 272 | _tests[test].time = result.time; 273 | _tests[test].result = result.result; 274 | _tests[test].ready = true; 275 | _tests[test].value = result.value; 276 | _tests[test].error = result.error; 277 | if(_tests[test].willfail === false) 278 | _tests[test].check = $assertrc.check( 279 | _tests[test].value, 280 | _tests[test].rule, 281 | _tests[test].sample 282 | ); 283 | if( 284 | (_tests[test].willfail === true)&& 285 | (_tests[test].error !== '')&& 286 | (_tests[test].error !== false) 287 | ){ 288 | if( 289 | (typeof _tests[test].sample === 'undefined')|| 290 | (_tests[test].sample === _tests[test].error.message) 291 | ){ 292 | _tests[test].check = true; 293 | _tests[test].result = 0; 294 | _tests[test].error = false; 295 | result.error = false; 296 | } 297 | 298 | } 299 | if( 300 | (_tests[test].willfail === true)&& 301 | (_tests[test].error.length === 0) 302 | ){ 303 | _tests[test].check = false; 304 | _tests[test].result = 0 ; 305 | } 306 | if(_tests[test].result === 0){ 307 | if(_tests[test].check === true){ 308 | _tests[test].result = 1; 309 | }else{ 310 | _tests[test].result = 2; 311 | } 312 | } 313 | _count(); 314 | _screen.change(_result, _tests[test]); 315 | 316 | }; 317 | /* 318 | * @private 319 | * 320 | */ 321 | const _end = function(){ 322 | let exit_code = 0; 323 | if( 324 | (_setup.get('exit_code_missing') === true)&& 325 | (_result.missing >0) 326 | ) 327 | exit_code =1; 328 | if( 329 | (_setup.get('exit_code_error') === true)&& 330 | (_result.error >0) 331 | ) 332 | exit_code =1; 333 | if( 334 | (_setup.get('exit_code_fail') === true)&& 335 | (_result.fail >0) 336 | ) 337 | exit_code =1; 338 | if( 339 | (_setup.get('expected_ok') > -1)&& 340 | (_setup.get('expected_ok') !== _result.ok ) 341 | ) 342 | exit_code =1; 343 | if( 344 | (_setup.get('expected_fail') > -1)&& 345 | (_setup.get('expected_fail') !== _result.fail ) 346 | ) 347 | exit_code =1; 348 | if( 349 | (_setup.get('expected_error') > -1)&& 350 | (_setup.get('expected_error') !== _result.error ) 351 | ) 352 | exit_code =1; 353 | if( 354 | (_setup.get('expected_missing') > -1)&& 355 | (_setup.get('expected_missing') !== _result.missing ) 356 | ) 357 | exit_code =1; 358 | if(exit_code > 0){ 359 | _screen.end(false); 360 | }else{ 361 | _screen.end(true); 362 | } 363 | return process.exit(exit_code); 364 | }; 365 | /* 366 | * 367 | * setup init 368 | * 369 | */ 370 | if(typeof settings !== 'undefined') 371 | _setup.setup(settings); 372 | }; 373 | 374 | 375 | exports.base = masterBase; 376 | exports.test = masterBase; 377 | --------------------------------------------------------------------------------