1'use strict';
2
3const common = require('../common');
4const assert = require('assert');
5const domain = require('domain');
6const fs = require('fs');
7const isEnumerable = Function.call.bind(Object.prototype.propertyIsEnumerable);
8
9process.on('warning', common.mustNotCall());
10
11{
12  const d = new domain.Domain();
13
14  d.on('error', common.mustCall((err) => {
15    assert.strictEqual(err.message, 'foobar');
16    assert.strictEqual(err.domain, d);
17    assert.strictEqual(isEnumerable(err, 'domain'), false);
18    assert.strictEqual(err.domainEmitter, undefined);
19    assert.strictEqual(err.domainBound, undefined);
20    assert.strictEqual(err.domainThrown, true);
21  }));
22
23  d.run(common.mustCall(() => {
24    process.nextTick(common.mustCall(() => {
25      const i = setInterval(common.mustCall(() => {
26        clearInterval(i);
27        setTimeout(common.mustCall(() => {
28          fs.stat('this file does not exist', common.mustCall((er, stat) => {
29            throw new Error('foobar');
30          }));
31        }), 1);
32      }), 1);
33    }));
34  }));
35}
36