7 changed files with 127 additions and 4 deletions
			
			
		@ -0,0 +1,62 @@ | 
				
			|||
# Gunner | 
				
			|||
 | 
				
			|||
<img alt="Django Unchained" src="assets/gun.jpeg" height="350" /> | 
				
			|||
 | 
				
			|||
#### _Tiny, but fully loaded._ | 
				
			|||
 | 
				
			|||
> Gunner is a zero magic, fast test-runner and assertion framework. There are no magic globals or CLI specific interface. | 
				
			|||
 | 
				
			|||
## Usage | 
				
			|||
 | 
				
			|||
Create a new `Gunner` instance and simply write your tests. The assertion methods are passed in as the callback to the test function. | 
				
			|||
 | 
				
			|||
```JavaScript | 
				
			|||
const gunner = new Gunner(); | 
				
			|||
 | 
				
			|||
gunner.test('arrays are equal', expect => { | 
				
			|||
	return expect([1, 2,]).deepEqual([1 ,2]); | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
gunner.run(); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
## API | 
				
			|||
 | 
				
			|||
--- | 
				
			|||
### [new Gunner(options)](#gunner-constructor) | 
				
			|||
### [Gunner#test(title, implementation)](#gunnertest) | 
				
			|||
### [Gunner#run(options)](#gunnerrun) | 
				
			|||
--- | 
				
			|||
 | 
				
			|||
### Gunner constructor | 
				
			|||
 | 
				
			|||
Creates a new Gunner instance. | 
				
			|||
 | 
				
			|||
#### Usage | 
				
			|||
 | 
				
			|||
```JavaScript | 
				
			|||
const gunner = new Gunner(options); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### Gunner#test | 
				
			|||
 | 
				
			|||
Registers a new test. | 
				
			|||
 | 
				
			|||
#### Usage | 
				
			|||
 | 
				
			|||
```JavaScript | 
				
			|||
gunner.test('sum should equal 3', expect => { | 
				
			|||
	const sum = 1 + 2; | 
				
			|||
	return expect(sum).equal(3); | 
				
			|||
}); | 
				
			|||
``` | 
				
			|||
 | 
				
			|||
### Gunner#run | 
				
			|||
 | 
				
			|||
Starts running Gunner tests. | 
				
			|||
 | 
				
			|||
#### Usage | 
				
			|||
 | 
				
			|||
```JavaScript | 
				
			|||
gunner.run(options); | 
				
			|||
``` | 
				
			|||
| 
		 After Width: | Height: | Size: 67 KiB  | 
@ -0,0 +1 @@ | 
				
			|||
module.exports = require('./gunner'); | 
				
			|||
@ -0,0 +1,55 @@ | 
				
			|||
module.exports = { | 
				
			|||
 | 
				
			|||
	/* Flattens an array of arrays to an array */ | 
				
			|||
	flatten : arrData => [].concat.apply([], arrData), | 
				
			|||
 | 
				
			|||
	/* Maps a function over an array */ | 
				
			|||
	map : fn => x => x.map(fn), | 
				
			|||
 | 
				
			|||
	/* Returns identity */ | 
				
			|||
	identity : x => x, | 
				
			|||
 | 
				
			|||
	/* Wraps a value in an object with given key */ | 
				
			|||
	wrapWith : x => y => ({ [x] : y }), | 
				
			|||
 | 
				
			|||
	/* Unwraps a value from an object with given key */ | 
				
			|||
	unwrapFrom : x => y => y[x], | 
				
			|||
 | 
				
			|||
	/* Resolves an array of Promises */ | 
				
			|||
	promiseAll : x => Promise.all(x), | 
				
			|||
 | 
				
			|||
	/* Pipe a value or promise through any number of unary functions */ | 
				
			|||
	pipe: (...fns) => | 
				
			|||
		arg => fns.reduce((acc, fn) => | 
				
			|||
			typeof acc.then === 'function' | 
				
			|||
				? acc.then(fn) | 
				
			|||
				: fn(acc), arg), | 
				
			|||
 | 
				
			|||
	/* Pass partial arguments and return a function that accepts the rest */ | 
				
			|||
	partial: (fn, ...args) => (...rest) => fn(...args, ...rest), | 
				
			|||
 | 
				
			|||
	/* Item is in collection */ | 
				
			|||
	isIn : (collection, item) => collection.indexOf(item) !== -1, | 
				
			|||
 | 
				
			|||
	/* Collection contains given path */ | 
				
			|||
	containsPath : (collection, path) => collection.some( | 
				
			|||
		x => path.match(new RegExp(`/${x}/?$`)) | 
				
			|||
	), | 
				
			|||
 | 
				
			|||
	/* Lift promises into a function */ | 
				
			|||
	liftPromise : (fn, thing) => | 
				
			|||
		typeof thing.then === 'function' | 
				
			|||
			? thing.then(fn) | 
				
			|||
			: fn(thing), | 
				
			|||
 | 
				
			|||
	/* Stringifies object or coerces to string */ | 
				
			|||
	stringify : obj => | 
				
			|||
		typeof obj === 'object' | 
				
			|||
			? (obj.stack || JSON.stringify(obj)) | 
				
			|||
			: obj, | 
				
			|||
 | 
				
			|||
	/* Short circuits with given value on pred. Else calls function */ | 
				
			|||
	short : (pred, shorter) => | 
				
			|||
		fn => value => pred(value) ? shorter(value) : fn(value), | 
				
			|||
 | 
				
			|||
}; | 
				
			|||
					Loading…
					
					
				
		Reference in new issue