summaryrefslogtreecommitdiff
path: root/tests/node_compat/test/parallel/test-stream-transform-final.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/node_compat/test/parallel/test-stream-transform-final.js')
-rw-r--r--tests/node_compat/test/parallel/test-stream-transform-final.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/tests/node_compat/test/parallel/test-stream-transform-final.js b/tests/node_compat/test/parallel/test-stream-transform-final.js
new file mode 100644
index 000000000..1d14adf6b
--- /dev/null
+++ b/tests/node_compat/test/parallel/test-stream-transform-final.js
@@ -0,0 +1,119 @@
+// 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 assert = require('assert');
+
+const stream = require('stream');
+let state = 0;
+
+
+// What you do:
+//
+// const stream = new stream.Transform({
+// transform: function transformCallback(chunk, _, next) {
+// // part 1
+// this.push(chunk);
+// //part 2
+// next();
+// },
+// final: function endCallback(done) {
+// // part 1
+// process.nextTick(function () {
+// // part 2
+// done();
+// });
+// },
+// flush: function flushCallback(done) {
+// // part 1
+// process.nextTick(function () {
+// // part 2
+// done();
+// });
+// }
+// });
+// t.on('data', dataListener);
+// t.on('end', endListener);
+// t.on('finish', finishListener);
+// t.write(1);
+// t.write(4);
+// t.end(7, endMethodCallback);
+//
+// The order things are called
+
+// 1. transformCallback part 1
+// 2. dataListener
+// 3. transformCallback part 2
+// 4. transformCallback part 1
+// 5. dataListener
+// 6. transformCallback part 2
+// 7. transformCallback part 1
+// 8. dataListener
+// 9. transformCallback part 2
+// 10. finalCallback part 1
+// 11. finalCallback part 2
+// 12. flushCallback part 1
+// 13. finishListener
+// 14. endMethodCallback
+// 15. flushCallback part 2
+// 16. endListener
+
+const t = new stream.Transform({
+ objectMode: true,
+ transform: common.mustCall(function(chunk, _, next) {
+ // transformCallback part 1
+ assert.strictEqual(++state, chunk);
+ this.push(state);
+ // transformCallback part 2
+ assert.strictEqual(++state, chunk + 2);
+ process.nextTick(next);
+ }, 3),
+ final: common.mustCall(function(done) {
+ state++;
+ // finalCallback part 1
+ assert.strictEqual(state, 10);
+ setTimeout(function() {
+ state++;
+ // finalCallback part 2
+ assert.strictEqual(state, 11);
+ done();
+ }, 100);
+ }, 1),
+ flush: common.mustCall(function(done) {
+ state++;
+ // flushCallback part 1
+ assert.strictEqual(state, 12);
+ process.nextTick(function() {
+ state++;
+ // flushCallback part 2
+ assert.strictEqual(state, 13);
+ done();
+ });
+ }, 1)
+});
+t.on('finish', common.mustCall(function() {
+ state++;
+ // finishListener
+ assert.strictEqual(state, 15);
+}, 1));
+t.on('end', common.mustCall(function() {
+ state++;
+ // end event
+ assert.strictEqual(state, 16);
+}, 1));
+t.on('data', common.mustCall(function(d) {
+ // dataListener
+ assert.strictEqual(++state, d + 1);
+}, 3));
+t.write(1);
+t.write(4);
+t.end(7, common.mustCall(function() {
+ state++;
+ // endMethodCallback
+ assert.strictEqual(state, 14);
+}, 1));