arnaucube
arnaucube/comunicationLeapPublic Self-hosted repository
comunicationLeap/node_modules/ws/test/Sender.hixie.test.js
node_modules/ws/test/Sender.hixie.test.jsRaw
  1var assert = require('assert')
  2  , Sender = require('../lib/Sender.hixie');
  3require('should');
  4require('./hybi-common');
  5
  6describe('Sender', function() {
  7  describe('#send', function() {
  8    it('frames and sends a text message', function(done) {
  9      var message = 'Hello world';
 10      var received;
 11      var socket = {
 12        write: function(data, encoding, cb) {
 13          received = data;
 14          process.nextTick(cb);
 15        }
 16      };
 17      var sender = new Sender(socket, {});
 18      sender.send(message, {}, function() {
 19        received.toString('utf8').should.eql('\u0000' + message + '\ufffd');
 20        done();
 21      });
 22    });
 23
 24    it('frames and sends an empty message', function(done) {
 25      var socket = {
 26        write: function(data, encoding, cb) {
 27          done();
 28        }
 29      };
 30      var sender = new Sender(socket, {});
 31      sender.send('', {}, function() {});
 32    });
 33
 34    it('frames and sends a buffer', function(done) {
 35      var received;
 36      var socket = {
 37        write: function(data, encoding, cb) {
 38          received = data;
 39          process.nextTick(cb);
 40        }
 41      };
 42      var sender = new Sender(socket, {});
 43      sender.send(new Buffer('foobar'), {}, function() {
 44        received.toString('utf8').should.eql('\u0000foobar\ufffd');
 45        done();
 46      });
 47    });
 48
 49    it('frames and sends a binary message', function(done) {
 50      var message = 'Hello world';
 51      var received;
 52      var socket = {
 53        write: function(data, encoding, cb) {
 54          received = data;
 55          process.nextTick(cb);
 56        }
 57      };
 58      var sender = new Sender(socket, {});
 59      sender.send(message, {binary: true}, function() {
 60        received.toString('hex').should.eql(
 61	// 0x80 0x0b H e l l o <sp> w o r l d
 62	'800b48656c6c6f20776f726c64');
 63        done();
 64      });
 65    });
 66/*
 67    it('throws an exception for binary data', function(done) {
 68      var socket = {
 69        write: function(data, encoding, cb) {
 70          process.nextTick(cb);
 71        }
 72      };
 73      var sender = new Sender(socket, {});
 74      sender.on('error', function() {
 75        done();
 76      });
 77      sender.send(new Buffer(100), {binary: true}, function() {});
 78    });
 79*/
 80    it('can fauxe stream data', function(done) {
 81      var received = [];
 82      var socket = {
 83        write: function(data, encoding, cb) {
 84          received.push(data);
 85          process.nextTick(cb);
 86        }
 87      };
 88      var sender = new Sender(socket, {});
 89      sender.send(new Buffer('foobar'), { fin: false }, function() {});
 90      sender.send('bazbar', { fin: false }, function() {});
 91      sender.send(new Buffer('end'), { fin: true }, function() {
 92        received[0].toString('utf8').should.eql('\u0000foobar');
 93        received[1].toString('utf8').should.eql('bazbar');
 94        received[2].toString('utf8').should.eql('end\ufffd');
 95        done();
 96      });
 97    });
 98  });
 99
100  describe('#close', function() {
101    it('sends a hixie close frame', function(done) {
102      var received;
103      var socket = {
104        write: function(data, encoding, cb) {
105          received = data;
106          process.nextTick(cb);
107        }
108      };
109      var sender = new Sender(socket, {});
110      sender.close(null, null, null, function() {
111        received.toString('utf8').should.eql('\ufffd\u0000');
112        done();
113      });
114    });
115
116    it('sends a message end marker if fauxe streaming has started, before hixie close frame', function(done) {
117      var received = [];
118      var socket = {
119        write: function(data, encoding, cb) {
120          received.push(data);
121          if (cb) process.nextTick(cb);
122        }
123      };
124      var sender = new Sender(socket, {});
125      sender.send(new Buffer('foobar'), { fin: false }, function() {});
126      sender.close(null, null, null, function() {
127        received[0].toString('utf8').should.eql('\u0000foobar');
128        received[1].toString('utf8').should.eql('\ufffd');
129        received[2].toString('utf8').should.eql('\ufffd\u0000');
130        done();
131      });
132    });
133  });
134});