'use strict';

/*
 * This test is aimed at making sure that unref timers queued with
 * timers._unrefActive work correctly.
 *
 * Basically, it queues one timer in the unref queue, and then queues
 * it again each time its timeout callback is fired until the callback
 * has been called ten times.
 *
 * At that point, it unenrolls the unref timer so that its timeout callback
 * is not fired ever again.
 *
 * Finally, a ref timeout is used with a delay large enough to make sure that
 * all 10 timeouts had the time to expire.
 */

require('../common');
const timers = require('timers');
const assert = require('assert');

const someObject = {};
let nbTimeouts = 0;

/*
 * libuv 0.10.x uses GetTickCount on Windows to implement timers, which uses
 * system's timers whose resolution is between 10 and 16ms. See
 * http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408.aspx
 * for more information. That's the lowest resolution for timers across all
 * supported platforms. We're using it as the lowest common denominator,
 * and thus expect 5 timers to be able to fire in under 100 ms.
 */
const N = 5;
const TEST_DURATION = 1000;

timers.unenroll(someObject);
timers.enroll(someObject, 1);

someObject._onTimeout = function _onTimeout() {
  ++nbTimeouts;

  if (nbTimeouts === N) timers.unenroll(someObject);

  timers._unrefActive(someObject);
};

timers._unrefActive(someObject);

setTimeout(function() {
  assert.strictEqual(nbTimeouts, N);
}, TEST_DURATION);
