mirror of
https://github.com/Wessel/lumah.git
synced 2026-06-08 14:19:00 +02:00
🎊 Add all main files
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
tmp/
|
||||||
5
LICENSE
5
LICENSE
@@ -1,6 +1,7 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2019 Wessel T
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2019-present Wessel "wesselgame" T
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
42
README.md
Normal file
42
README.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<div align="center">
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
<a href="https://github.com/PassTheWessel/lumah"><img src="media/logo.png" alt="lumah" /></a>
|
||||||
|
</p>
|
||||||
|
<br />
|
||||||
|
<p>
|
||||||
|
<a href="#"><img src="https://packagephobia.now.sh/badge?p=lumah" alt="Install Size" /></a>
|
||||||
|
<a href="https://discord.gg/SV7DAE9"><img src="https://discordapp.com/api/guilds/107131083958538240/embed.png" alt="Discord" /></a>
|
||||||
|
<a href="https://www.npmjs.com/package/lumah"><img src="https://img.shields.io/npm/v/lumah.svg?maxAge=3600" alt="NPM version" /></a>
|
||||||
|
<a href="https://www.npmjs.com/package/lumah"><img src="https://img.shields.io/npm/dt/lumah.svg?maxAge=3600" alt="NPM version" /></a>
|
||||||
|
<a href="https://www.patreon.com/wessel"><img src="https://img.shields.io/badge/donate-patreon-F96854.svg" alt="Patreon" /></a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://nodei.co/npm/lumah/"><img src="https://nodei.co/npm/lumah.png?downloads=true&stars=true" alt="npm installnfo" /></a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
> A simple and lightweight testing framework for Node.js
|
||||||
|
|
||||||
|
> [GitHub](https://www.github.com/PassTheWessel/Kirbe) **|** [NPM](https://www.npmjs.com/package/kirbe)
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
```sh
|
||||||
|
$ yarn add lumah # Install w/ Yarn (the superior package manager)
|
||||||
|
$ npm i lumah # Install w/ NPM
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
```js
|
||||||
|
const l = require( 'lumah' ); // Define lumah
|
||||||
|
|
||||||
|
l.register( 'Hello', ( res ) => res( true, 'Danceboye' ) ); // Register a test with the name "Hello" and succeed with the message "Danceboye"
|
||||||
|
l.register( 'This is so sad', ( res ) => res( false, 'Sadcat' ) ); // Fail with the message "sadcat"
|
||||||
|
l.register( 'Late ;_;', ( res ) => setTimeout( () => res( true, 'I\'ve came!' ), 500 ) ); // Succeed after 500ms
|
||||||
|
l.register( 'memes', ( res ) => {
|
||||||
|
if ( process.env.MEMES ) res( true, 'You are a true memester' ) // Success if process.env has the value "MEMES"
|
||||||
|
res( false, 'Well, that\'s a shame :(' ) // Fail otherwise
|
||||||
|
});
|
||||||
|
|
||||||
|
l.start(); // Run all tests
|
||||||
|
```
|
||||||
5
lib/index.js
Normal file
5
lib/index.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const run = require( './runTests' );
|
||||||
|
let tests = [];
|
||||||
|
|
||||||
|
exports.register = ( name, method ) => tests.push({ method, name });
|
||||||
|
exports.start = () => run( tests );
|
||||||
24
lib/result.js
Normal file
24
lib/result.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
module.exports = ( tests ) => {
|
||||||
|
process.stdout.write( '\r\n' );
|
||||||
|
|
||||||
|
let totals = { 'fail': 0, 'pass': 0 };
|
||||||
|
|
||||||
|
for( let i = 0; i < tests.length; i++ ) {
|
||||||
|
if( tests[ i ].result.success ) totals.pass++;
|
||||||
|
else totals.fail++;
|
||||||
|
}
|
||||||
|
|
||||||
|
process.stdout.write([
|
||||||
|
`\x1b[33mA total of \x1b[32m${totals.pass} \x1b[33m( \x1b[32m${( ( totals.pass / tests.length ) *100 ).toFixed( 2 )}% \x1b[33m) test(s) \x1b[32mpassed \x1b[33mand`,
|
||||||
|
`${totals.fail <= 0 ? `\x1b[32m0 \x1b[33m( \x1b[32m0% \x1b[33m)` : `\x1b[31m${totals.fail} \x1b[33m( \x1b[31m${( ( totals.fail / tests.length ) *100 ).toFixed( 2 )}% \x1b[33m)`} test(s) \x1b[31mfailed\x1b\x1b[33m:\x1b[0m\r\n`
|
||||||
|
].join( ' ' ));
|
||||||
|
|
||||||
|
for( let i = 0; i < tests.length; i++ ) {
|
||||||
|
if ( tests[ i ].result.success )
|
||||||
|
process.stdout.write(` \x1b[32m✓ \x1b[34m${tests[ i ].name} \x1b[32mpassed \x1b[33min \x1b[32m${tests[ i ].extData.timeTaken}ms ${( tests[ i ].result.info ? `\x1b[33m>> \x1b[34m${tests[ i ].result.info}\x1b[0m\x1b[0m` : `\x1b[0m` )}\r\n`);
|
||||||
|
else
|
||||||
|
process.stdout.write(` \x1b[31m✗ \x1b[34m${tests[ i ].name} \x1b[31mfailed \x1b[33min \x1b[32m${tests[ i ].extData.timeTaken}ms ${( tests[ i ].result.info ? `\x1b[33m>> \x1b[34m${tests[ i ].result.info}\x1b[0m\x1b[0m` : `\x1b[0m` )}\r\n`);
|
||||||
|
}
|
||||||
|
|
||||||
|
process.stdout.write( '\r\n' );
|
||||||
|
};
|
||||||
27
lib/runTests.js
Normal file
27
lib/runTests.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
const ui = require( './result' );
|
||||||
|
|
||||||
|
module.exports = ( testData ) => {
|
||||||
|
let tests = testData;
|
||||||
|
let completed = 0;
|
||||||
|
|
||||||
|
process.stdout.write( '\x1B[2J\x1B[0f\u001b[0;0H\r\n' );
|
||||||
|
process.stdout.write( `\x1b[33mExecuting \x1b[32m${tests.length} \x1b[33mtest(s)...\x1b[0m\r\n` );
|
||||||
|
|
||||||
|
for ( let i = 0; i < tests.length; i++ ) {
|
||||||
|
tests[ i ].extData = { startTime : new Date().getTime() };
|
||||||
|
|
||||||
|
const testCompleted = ( success, info ) => {
|
||||||
|
tests[ i ].result = { executed: true, success: success, info: info };
|
||||||
|
tests[ i ].extData.endTime = new Date().getTime();
|
||||||
|
|
||||||
|
tests[ i ].extData.timeTaken = tests[ i ].extData.endTime - tests[ i ].extData.startTime;
|
||||||
|
process.stdout.write( ` \x1b[33mTask \x1b[34m${tests[ i ].name} ${( success ? `\x1b[32mpassed` : `\x1b[31mfailed` )}\x1b[0m\r\n` );
|
||||||
|
completed++;
|
||||||
|
|
||||||
|
if ( completed >= tests.length ) ui( tests );
|
||||||
|
};
|
||||||
|
|
||||||
|
try { tests[ i ].method( testCompleted ); }
|
||||||
|
catch( ex ) { testCompleted( false, ex.toString() ); }
|
||||||
|
}
|
||||||
|
};
|
||||||
BIN
media/logo.png
Normal file
BIN
media/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
16
package.json
Normal file
16
package.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "lumah",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "🔩 A simple and lightweight testing framework for Node.js",
|
||||||
|
"author": "Wessel \"wesselgame\" T <discord@go2it.eu>",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"files": [ "lib", "LICENSE" ],
|
||||||
|
"bugs": { "url": "https://www.github.com/PassTheWessel/lumah/issues" },
|
||||||
|
"homepage": "https://www.github.com/PassTheWessel/lumah#readme",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://www.github.com/PassTheWessel/lumah"
|
||||||
|
},
|
||||||
|
"keywords": [ "test", "console", "lumah", "testing", "framework", "async", "lightweight" ]
|
||||||
|
}
|
||||||
7
test.js
Normal file
7
test.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
const l = require( './lib' );
|
||||||
|
|
||||||
|
l.register( 'Hello', ( res ) => res( true, 'Danceboye' ) );
|
||||||
|
l.register( 'This is so sad', ( res ) => res( false, 'Sadcat' ) );
|
||||||
|
l.register( 'Late ;_;', ( res ) => setTimeout( () => res( true, 'I\'ve came!' ), 500 ) );
|
||||||
|
|
||||||
|
l.start();
|
||||||
Reference in New Issue
Block a user