text: var assert = require('assert');
  
  var _ = require('underscore');
  
  var dateFormat = require('../lib/dateformat');
  
  var expects = {
      'default': 'Wed Nov 26 2014 13:19:44',
      'shortDate': '11/26/14',
      'mediumDate': 'Nov 26, 2014',
      'longDate': 'November 26, 2014',
      'fullDate': 'Wednesday, November 26, 2014',
      'shortTime': '1:19 PM',
      'mediumTime': '1:19:44 PM',
      'longTime': '1:19:44 PM %TZ_PREFIX%%TZ_OFFSET%',
      'isoDate': '2014-11-26',
      'isoTime': '13:19:44',
      'isoDateTime': '2014-11-26T13:19:44%TZ_OFFSET%',
      'isoUtcDateTime': '',
      'expiresHeaderFormat': 'Wed, 26 Nov 2014 13:19:44 %TZ_PREFIX%%TZ_OFFSET%'
  };
  
  function pad(num, size) {
      var s = num + '';
      while (s.length < size) {
          s = '0' + s;
      }
      return s;
  }
  
  function parseOffset(date) {
      var offset = date.getTimezoneOffset();
      var hours = Math.floor(-1 * offset / 60);
      var minutes = (-1 * offset) - (hours * 60);
      var sign = offset > 0 ? '-' : '+';
      return {
          offset: offset,
          hours: hours,
          minutes: minutes,
          sign: sign,
      };
  }
  
  function timezoneOffset(date) {
      var offset = parseOffset(date);
      return offset.sign + pad(offset.hours, 2) + pad(offset.minutes, 2);
  }
  
  describe('dateformat([now], [mask])', function () {
      _.each(dateFormat.masks, function (value, key) {
          it('should format `' + key + '` mask', function (done) {
              var now = new Date(2014, 10, 26, 13, 19, 44);
              var tzOffset = timezoneOffset(now);
              var expected = expects[key].replace(/%TZ_PREFIX%/, 'GMT')
                  .replace(/%TZ_OFFSET%/g, tzOffset)
                  .replace(/GMT\+0000/g, 'UTC');
              if (key === 'isoUtcDateTime') {
                  var offset = parseOffset(now);
                  now.setHours(now.getHours() - offset.hours,
                      now.getMinutes() - offset.minutes);
                  var expected = now.toISOString().replace(/\.000/g, '');
              }
              var actual = dateFormat(now, key);
              assert.strictEqual(actual, expected);
              done();
          });
      });
      it('should use `default` mask, when `mask` is empty', function (done) {
          var now = new Date(2014, 10, 26, 13, 19, 44);
          var expected = expects['default'];
          var actual = dateFormat(now);
  
          assert.strictEqual(actual, expected);
          done();
      });
  });
  