1'use strict';
2
3const assert = require('assert');
4const common = require('./');
5
6// The formats could change when V8 is updated, then the tests should be
7// updated accordingly.
8function assertResultShape(result) {
9  assert.strictEqual(typeof result.jsMemoryEstimate, 'number');
10  assert.strictEqual(typeof result.jsMemoryRange[0], 'number');
11  assert.strictEqual(typeof result.jsMemoryRange[1], 'number');
12}
13
14function assertSummaryShape(result) {
15  assert.strictEqual(typeof result, 'object');
16  assert.strictEqual(typeof result.total, 'object');
17  assertResultShape(result.total);
18}
19
20function assertDetailedShape(result, contexts = 0) {
21  assert.strictEqual(typeof result, 'object');
22  assert.strictEqual(typeof result.total, 'object');
23  assert.strictEqual(typeof result.current, 'object');
24  assertResultShape(result.total);
25  assertResultShape(result.current);
26  if (contexts === 0) {
27    assert.deepStrictEqual(result.other, []);
28  } else {
29    assert.strictEqual(result.other.length, contexts);
30    for (const item of result.other) {
31      assertResultShape(item);
32    }
33  }
34}
35
36function assertSingleDetailedShape(result) {
37  assert.strictEqual(typeof result, 'object');
38  assert.strictEqual(typeof result.total, 'object');
39  assert.strictEqual(typeof result.current, 'object');
40  assert.deepStrictEqual(result.other, []);
41  assertResultShape(result.total);
42  assertResultShape(result.current);
43}
44
45function expectExperimentalWarning() {
46  common.expectWarning(
47    'ExperimentalWarning',
48    'vm.measureMemory is an experimental feature and might change at any time',
49  );
50}
51
52module.exports = {
53  assertSummaryShape,
54  assertDetailedShape,
55  assertSingleDetailedShape,
56  expectExperimentalWarning,
57};
58