11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../common');
31cb0ef41Sopenharmony_ci
41cb0ef41Sopenharmony_ciconst { MessageChannel } = require('worker_threads');
51cb0ef41Sopenharmony_ciconst { createHook } = require('async_hooks');
61cb0ef41Sopenharmony_ciconst { strictEqual } = require('assert');
71cb0ef41Sopenharmony_ci
81cb0ef41Sopenharmony_ciconst handles = [];
91cb0ef41Sopenharmony_ci
101cb0ef41Sopenharmony_cicreateHook({
111cb0ef41Sopenharmony_ci  init(asyncId, type, triggerAsyncId, resource) {
121cb0ef41Sopenharmony_ci    if (type === 'MESSAGEPORT') {
131cb0ef41Sopenharmony_ci      handles.push(resource);
141cb0ef41Sopenharmony_ci    }
151cb0ef41Sopenharmony_ci  }
161cb0ef41Sopenharmony_ci}).enable();
171cb0ef41Sopenharmony_ci
181cb0ef41Sopenharmony_ciconst { port1, port2 } = new MessageChannel();
191cb0ef41Sopenharmony_cistrictEqual(handles[0], port1);
201cb0ef41Sopenharmony_cistrictEqual(handles[1], port2);
211cb0ef41Sopenharmony_ci
221cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), false);
231cb0ef41Sopenharmony_cistrictEqual(handles[1].hasRef(), false);
241cb0ef41Sopenharmony_ci
251cb0ef41Sopenharmony_ciport1.unref();
261cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), false);
271cb0ef41Sopenharmony_ci
281cb0ef41Sopenharmony_ciport1.ref();
291cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), true);
301cb0ef41Sopenharmony_ci
311cb0ef41Sopenharmony_ciport1.unref();
321cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), false);
331cb0ef41Sopenharmony_ci
341cb0ef41Sopenharmony_ciport1.on('message', () => {});
351cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), true);
361cb0ef41Sopenharmony_ci
371cb0ef41Sopenharmony_ciport2.unref();
381cb0ef41Sopenharmony_cistrictEqual(handles[1].hasRef(), false);
391cb0ef41Sopenharmony_ci
401cb0ef41Sopenharmony_ciport2.ref();
411cb0ef41Sopenharmony_cistrictEqual(handles[1].hasRef(), true);
421cb0ef41Sopenharmony_ci
431cb0ef41Sopenharmony_ciport2.unref();
441cb0ef41Sopenharmony_cistrictEqual(handles[1].hasRef(), false);
451cb0ef41Sopenharmony_ci
461cb0ef41Sopenharmony_ciport2.on('message', () => {});
471cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), true);
481cb0ef41Sopenharmony_ci
491cb0ef41Sopenharmony_ciport1.on('close', common.mustCall(() => {
501cb0ef41Sopenharmony_ci  strictEqual(handles[0].hasRef(), false);
511cb0ef41Sopenharmony_ci  strictEqual(handles[1].hasRef(), false);
521cb0ef41Sopenharmony_ci}));
531cb0ef41Sopenharmony_ci
541cb0ef41Sopenharmony_ciport2.close();
551cb0ef41Sopenharmony_ci
561cb0ef41Sopenharmony_cistrictEqual(handles[0].hasRef(), true);
571cb0ef41Sopenharmony_cistrictEqual(handles[1].hasRef(), true);
58