test-subscribe.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. 'use strict';
  2. var PubSub = require('../src/pubsub'),
  3. TestHelper = require('../test/helper'),
  4. assert = require('referee').assert,
  5. refute = require('referee').refute;
  6. describe( 'subscribe method', function() {
  7. it('should return token as String', function(){
  8. var func = function(){ return undefined; },
  9. message = TestHelper.getUniqueString(),
  10. token = PubSub.subscribe( message , func );
  11. assert.isString( token );
  12. });
  13. it('should return new token for several subscriptions with same function', function(){
  14. var func = function(){ return undefined; },
  15. tokens = [],
  16. iterations = 10,
  17. message = TestHelper.getUniqueString(),
  18. i;
  19. // build an array of tokens
  20. for ( i = 0; i < iterations; i++ ){
  21. tokens.push( PubSub.subscribe( message, func ) );
  22. }
  23. // make sure all tokens are different
  24. TestHelper.assertAllTokensDifferent( tokens );
  25. });
  26. it('should return unique tokens for each namespaced subscription', function(){
  27. var func = function(){ return undefined; },
  28. tokens = [],
  29. messages = ['library', 'library.music', 'library.music.jazz'],
  30. i;
  31. // build an array of tokens
  32. for ( i = 0; i < messages.length; i++ ){
  33. tokens.push( PubSub.subscribe( messages[i], func ) );
  34. }
  35. // make sure all tokens are different
  36. TestHelper.assertAllTokensDifferent( tokens );
  37. });
  38. it('should return unique token for unique functions', function(){
  39. var tokens = [],
  40. iterations = 10,
  41. message = TestHelper.getUniqueString(),
  42. i;
  43. function bakeFunc( value ){
  44. return function(){
  45. return value;
  46. };
  47. }
  48. // build an array of tokens, passing in a different function for each subscription
  49. for ( i = 0; i < iterations; i++ ){
  50. tokens.push( PubSub.subscribe( message, bakeFunc( i ) ) );
  51. }
  52. // make sure all tokens are different
  53. TestHelper.assertAllTokensDifferent( tokens );
  54. });
  55. it('should return false when subscriber argument is not a function', function(){
  56. var invalidSubscribers = [undefined, null, 'a string', 123, [], {}, new Date()],
  57. topic = TestHelper.getUniqueString(),
  58. i;
  59. for ( i = 0; i < invalidSubscribers.length; i++ ){
  60. assert.equals(PubSub.subscribe(topic, invalidSubscribers[i]), false);
  61. }
  62. assert.equals(i, invalidSubscribers.length);
  63. });
  64. it('must not throw errors when publishing with invalid subscribers', function(){
  65. var invalidSubscribers = [undefined, null, 'a string', 123, [], {}, new Date()],
  66. topic = TestHelper.getUniqueString(),
  67. i;
  68. for (i = 0; i < invalidSubscribers.length; i++){
  69. PubSub.subscribe(topic, invalidSubscribers[i]);
  70. }
  71. refute.exception(function(){
  72. PubSub.publish(topic, TestHelper.getUniqueString());
  73. });
  74. });
  75. });