Jared K. Smith a259a9c
'use strict';
Jared K. Smith a259a9c
var assert = require('assert');
Jared K. Smith a259a9c
var prettyMs = require('./');
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should prettify milliseconds', function () {
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(0), '0ms');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(0.1), '1ms');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1), '1ms');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 + 400), '1.4s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 2 + 400), '2.4s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 55), '55s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 67), '1m 7s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 5), '5m');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 67), '1h 7m');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 60 * 12), '12h');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 60 * 40), '1d 16h');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 60 * 999), '41d 15h');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should have a compact option', function () {
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 + 4, {compact: true}), '~1s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(1000 * 60 * 60 * 999, {compact: true}), '~41d');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should have a secDecimalDigits option', function () {
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33333), '33.3s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33333, {secDecimalDigits: 0}), '33s');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33333, {secDecimalDigits: 4}), '33.3330s');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should have a msDecimalDigits option', function () {
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33.333), '34ms');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33.333, {msDecimalDigits: 0}), '34ms');
Jared K. Smith a259a9c
	assert.strictEqual(prettyMs(33.333, {msDecimalDigits: 4}), '33.3330ms');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should have a verbose option', function () {
Jared K. Smith a259a9c
	var fn = function (ms) {
Jared K. Smith a259a9c
		return prettyMs(ms, {verbose: true});
Jared K. Smith a259a9c
	};
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.strictEqual(fn(0), '0 milliseconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(0.1), '1 millisecond');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1), '1 millisecond');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000), '1 second');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 + 400), '1.4 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 2 + 400), '2.4 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 5), '5 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 55), '55 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 67), '1 minute 7 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 5), '5 minutes');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 67), '1 hour 7 minutes');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 12), '12 hours');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 40), '1 day 16 hours');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 999), '41 days 15 hours');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should work with verbose and compact options', function () {
Jared K. Smith a259a9c
	var fn = function (ms) {
Jared K. Smith a259a9c
		return prettyMs(ms, {
Jared K. Smith a259a9c
			verbose: true,
Jared K. Smith a259a9c
			compact: true
Jared K. Smith a259a9c
		});
Jared K. Smith a259a9c
	};
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000), '~1 second');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 + 400), '~1 second');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 2 + 400), '~2 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 5), '~5 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 55), '~55 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 67), '~1 minute');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 5), '~5 minutes');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 67), '~1 hour');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 12), '~12 hours');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 40), '~1 day');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 60 * 60 * 999), '~41 days');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should work with verbose and secDecimalDigits options', function () {
Jared K. Smith a259a9c
	var fn = function (ms) {
Jared K. Smith a259a9c
		return prettyMs(ms, {
Jared K. Smith a259a9c
			verbose: true,
Jared K. Smith a259a9c
			secDecimalDigits: 4
Jared K. Smith a259a9c
		});
Jared K. Smith a259a9c
	};
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000), '1.0000 second');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 + 400), '1.4000 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 2 + 400), '2.4000 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1000 * 5 + 254), '5.2540 seconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(33333), '33.3330 seconds');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should work with verbose and msDecimalDigits options', function () {
Jared K. Smith a259a9c
	var fn = function (ms) {
Jared K. Smith a259a9c
		return prettyMs(ms, {
Jared K. Smith a259a9c
			verbose: true,
Jared K. Smith a259a9c
			msDecimalDigits: 4
Jared K. Smith a259a9c
		});
Jared K. Smith a259a9c
	};
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.strictEqual(fn(1), '1.0000 millisecond');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1 + .4), '1.4000 milliseconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1 * 2 + .400), '2.4000 milliseconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(1 * 5 + .254), '5.2540 milliseconds');
Jared K. Smith a259a9c
	assert.strictEqual(fn(33.333), '33.3330 milliseconds');
Jared K. Smith a259a9c
});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
it('should throw on invalid', function () {
Jared K. Smith a259a9c
	assert.throws(function () {
Jared K. Smith a259a9c
		prettyMs('foo');
Jared K. Smith a259a9c
	});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.throws(function () {
Jared K. Smith a259a9c
		prettyMs(NaN);
Jared K. Smith a259a9c
	});
Jared K. Smith a259a9c
Jared K. Smith a259a9c
	assert.throws(function () {
Jared K. Smith a259a9c
		prettyMs(Infinity);
Jared K. Smith a259a9c
	});
Jared K. Smith a259a9c
});