summaryrefslogtreecommitdiff
path: root/tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js')
-rw-r--r--tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js b/tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js
new file mode 100644
index 000000000..00b786582
--- /dev/null
+++ b/tests/node_compat/test/parallel/test-diagnostics-channel-object-channel-pub-sub.js
@@ -0,0 +1,53 @@
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+
+// Copyright Joyent and Node contributors. All rights reserved. MIT license.
+// Taken from Node 18.12.1
+// This file is automatically generated by `tools/node_compat/setup.ts`. Do not modify this file manually.
+
+'use strict';
+
+const common = require('../common');
+const dc = require('diagnostics_channel');
+const assert = require('assert');
+const { Channel } = dc;
+
+const input = {
+ foo: 'bar'
+};
+
+// Should not have named channel
+assert.ok(!dc.hasSubscribers('test'));
+
+// Individual channel objects can be created to avoid future lookups
+const channel = dc.channel('test');
+assert.ok(channel instanceof Channel);
+
+// No subscribers yet, should not publish
+assert.ok(!channel.hasSubscribers);
+
+const subscriber = common.mustCall((message, name) => {
+ assert.strictEqual(name, channel.name);
+ assert.deepStrictEqual(message, input);
+});
+
+// Now there's a subscriber, should publish
+channel.subscribe(subscriber);
+assert.ok(channel.hasSubscribers);
+
+// The ActiveChannel prototype swap should not fail instanceof
+assert.ok(channel instanceof Channel);
+
+// Should trigger the subscriber once
+channel.publish(input);
+
+// Should not publish after subscriber is unsubscribed
+assert.ok(channel.unsubscribe(subscriber));
+assert.ok(!channel.hasSubscribers);
+
+// unsubscribe() should return false when subscriber is not found
+assert.ok(!channel.unsubscribe(subscriber));
+
+assert.throws(() => {
+ channel.subscribe(null);
+}, { code: 'ERR_INVALID_ARG_TYPE' });