'use strict';

/*
 * This test is a regression test for joyent/node#8897.
 *
 * It tests some private implementation details that should not be
 * considered public interface.
 */
const common = require('../common');
const timers = require('timers');

const foo = {
  _onTimeout: common.mustNotCall('_onTimeout should not be called')
};

const bar = {
  _onTimeout: common.mustCall(function() {
    timers.unenroll(foo);
  })
};

// We use timers with expiration times that are sufficiently apart to make
// sure that they're not fired at the same time on platforms where the timer
// resolution is a bit coarse (e.g Windows with a default resolution of ~15ms).
timers.enroll(bar, 1);
timers._unrefActive(bar);

timers.enroll(foo, 50);
timers._unrefActive(foo);

// Keep the process open.
setTimeout(() => {}, 100);
