flok 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (867) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -4
  3. data/Rakefile +76 -10
  4. data/app/drivers/chrome/README.md +37 -22
  5. data/app/drivers/chrome/Rakefile +77 -3
  6. data/app/drivers/chrome/build_context.rb +17 -0
  7. data/app/drivers/chrome/cakery/spec.js.erb +11 -0
  8. data/app/drivers/chrome/config.yml +18 -3
  9. data/app/drivers/chrome/pipe.rb +70 -0
  10. data/app/drivers/chrome/spec/config/config.js +39 -0
  11. data/app/drivers/chrome/spec/init/qunit.js +3828 -0
  12. data/app/drivers/chrome/spec/spec/controller_debug_spec.js +16 -0
  13. data/app/drivers/chrome/spec/spec/debug_spec.js +18 -0
  14. data/app/drivers/chrome/spec/spec/sel_scope_spec.js +160 -0
  15. data/app/drivers/chrome/spec/spec/vars_spec.js +28 -0
  16. data/app/drivers/chrome/src/bench.js +19 -0
  17. data/app/drivers/chrome/src/controller.js +164 -0
  18. data/app/drivers/chrome/src/debug.js +75 -0
  19. data/app/drivers/chrome/src/dispatch.js +52 -0
  20. data/app/drivers/chrome/src/event.js +10 -0
  21. data/app/drivers/chrome/src/helpers.js +4 -4
  22. data/app/drivers/chrome/src/net.js +8 -36
  23. data/app/drivers/chrome/src/segue.js +18 -0
  24. data/app/drivers/chrome/src/sockio.js +34 -0
  25. data/app/drivers/chrome/src/timer.js +9 -0
  26. data/app/drivers/chrome/src/ui.js +192 -87
  27. data/app/drivers/chrome/src/vendor/socket.io.js +3 -0
  28. data/app/kern/controller.js +116 -0
  29. data/app/kern/dispatch.js +171 -0
  30. data/app/kern/macro.rb +24 -0
  31. data/{output.js → app/kern/mod/controller.js} +0 -0
  32. data/app/kern/mod/debug.js +120 -0
  33. data/app/kern/mod/event.js +29 -0
  34. data/app/kern/mod/net.js +17 -0
  35. data/app/kern/mod/segue.js +36 -0
  36. data/app/kern/mod/sockio.js +1 -0
  37. data/app/kern/mod/ui.js +2 -0
  38. data/app/kern/net_cb.js +25 -0
  39. data/app/kern/services/rest.rb +310 -0
  40. data/app/kern/services/timer.rb +30 -0
  41. data/app/kern/tel.js +40 -0
  42. data/bin/flok +61 -17
  43. data/docs/architecture.md +3 -15
  44. data/docs/client_api.md +21 -0
  45. data/docs/compilation.md +31 -5
  46. data/docs/controllers.md +97 -0
  47. data/docs/datatypes.md +42 -0
  48. data/docs/debug_server.md +17 -0
  49. data/docs/drivers.md +52 -0
  50. data/docs/images/flok_arch.png +0 -0
  51. data/docs/images/ui_surface_and_views.png +0 -0
  52. data/docs/images/view_and_spot.png +0 -0
  53. data/docs/interactive.md +35 -0
  54. data/docs/kernel_api.md +37 -0
  55. data/docs/messaging.md +110 -0
  56. data/docs/mod/controller.md +35 -0
  57. data/docs/mod/debug.md +32 -0
  58. data/docs/mod/debug/dump_ui.md +64 -0
  59. data/docs/mod/event.md +16 -0
  60. data/docs/mod/net.md +21 -0
  61. data/docs/mod/persist.md +36 -0
  62. data/docs/mod/sockio.md +13 -0
  63. data/docs/mod/timer.md +8 -0
  64. data/docs/mod/ui.md +40 -0
  65. data/docs/modules.md +9 -0
  66. data/docs/project.md +40 -0
  67. data/docs/project_layout.md +8 -5
  68. data/docs/rakefile.md +13 -0
  69. data/docs/scheduling.md +45 -0
  70. data/docs/services.md +74 -0
  71. data/docs/services/rest.md +21 -0
  72. data/docs/services/timer.md +21 -0
  73. data/docs/testing.md +80 -1
  74. data/flok.gemspec +4 -0
  75. data/lib/flok.rb +6 -0
  76. data/lib/flok/build.rb +75 -26
  77. data/lib/flok/interactive.rb +58 -0
  78. data/lib/flok/platform.rb +32 -0
  79. data/lib/flok/project.rb +63 -0
  80. data/lib/flok/project_template/Gemfile.erb +2 -0
  81. data/lib/flok/project_template/app/controllers/controller.rb +1 -0
  82. data/lib/flok/service_compiler_templates/services.js.erb +13 -0
  83. data/lib/flok/services_compiler.rb +94 -0
  84. data/lib/flok/user_compiler.rb +295 -0
  85. data/lib/flok/user_compiler_templates/ctable.js.erb +33 -0
  86. data/lib/flok/utilities.rb +16 -0
  87. data/lib/flok/version.rb +1 -1
  88. data/logo.png +0 -0
  89. data/opt/clojure/compiler.jar +0 -0
  90. data/opt/clojure/flokjure +53 -0
  91. data/opt/clojure/main.js +13 -0
  92. data/spec/env/etc.rb +2 -0
  93. data/spec/env/iface.rb +64 -0
  94. data/spec/env/kern.rb +128 -0
  95. data/spec/etc/cli_spec.rb +117 -0
  96. data/spec/etc/lib/build_spec.rb +188 -0
  97. data/spec/etc/lib/platform_spec.rb +33 -0
  98. data/spec/etc/lib/project_spec.rb +25 -0
  99. data/spec/etc/macro_spec.rb +35 -0
  100. data/spec/etc/service_compiler/service0.rb +10 -0
  101. data/spec/etc/services_compiler_spec.rb +41 -0
  102. data/spec/etc/user_compiler/controller0.rb +14 -0
  103. data/spec/etc/user_compiler_spec.rb +68 -0
  104. data/spec/iface/driver/assets/debug_socket_server.js +42 -0
  105. data/spec/iface/driver/assets/node_modules/socket.io/.npmignore +4 -0
  106. data/spec/iface/driver/assets/node_modules/socket.io/.travis.yml +16 -0
  107. data/spec/iface/driver/assets/node_modules/socket.io/History.md +491 -0
  108. data/spec/iface/driver/assets/node_modules/socket.io/LICENSE +22 -0
  109. data/spec/iface/driver/assets/node_modules/socket.io/Makefile +15 -0
  110. data/spec/iface/driver/assets/node_modules/socket.io/Readme.md +374 -0
  111. data/spec/iface/driver/assets/node_modules/socket.io/index.js +2 -0
  112. data/spec/iface/driver/assets/node_modules/socket.io/lib/client.js +247 -0
  113. data/spec/iface/driver/assets/node_modules/socket.io/lib/index.js +379 -0
  114. data/spec/iface/driver/assets/node_modules/socket.io/lib/namespace.js +242 -0
  115. data/spec/iface/driver/assets/node_modules/socket.io/lib/socket.js +449 -0
  116. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/.jshintrc +3 -0
  117. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/.npmignore +6 -0
  118. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/History.md +157 -0
  119. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/Makefile +33 -0
  120. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/Readme.md +156 -0
  121. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/browser.js +147 -0
  122. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/component.json +19 -0
  123. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/debug.js +197 -0
  124. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node.js +209 -0
  125. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/.npmignore +5 -0
  126. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/README.md +33 -0
  127. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/index.js +111 -0
  128. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/package.json +46 -0
  129. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/package.json +73 -0
  130. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/.npmignore +6 -0
  131. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/.travis.yml +7 -0
  132. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/History.md +408 -0
  133. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/Makefile +23 -0
  134. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/README.md +517 -0
  135. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/index.js +4 -0
  136. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js +126 -0
  137. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/server.js +391 -0
  138. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/socket.js +393 -0
  139. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transport.js +114 -0
  140. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/index.js +36 -0
  141. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-jsonp.js +108 -0
  142. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js +101 -0
  143. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js +279 -0
  144. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/websocket.js +110 -0
  145. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/.npmignore +3 -0
  146. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/README.md +18 -0
  147. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/lib/base64id.js +103 -0
  148. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/package.json +48 -0
  149. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/.jshintrc +3 -0
  150. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/.npmignore +6 -0
  151. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/History.md +132 -0
  152. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/Makefile +33 -0
  153. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/Readme.md +153 -0
  154. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/browser.js +144 -0
  155. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/component.json +19 -0
  156. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/debug.js +197 -0
  157. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node.js +129 -0
  158. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/.npmignore +5 -0
  159. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/README.md +33 -0
  160. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/index.js +111 -0
  161. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/package.json +46 -0
  162. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/package.json +71 -0
  163. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.npmignore +17 -0
  164. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.travis.yml +45 -0
  165. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.zuul.yml +18 -0
  166. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/History.md +100 -0
  167. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/LICENSE +22 -0
  168. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Makefile +26 -0
  169. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Readme.md +202 -0
  170. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/index.js +2 -0
  171. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/browser.js +594 -0
  172. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js +467 -0
  173. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/keys.js +19 -0
  174. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.npmignore +2 -0
  175. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.travis.yml +5 -0
  176. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/LICENCE +19 -0
  177. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/README.md +75 -0
  178. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/index.js +28 -0
  179. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/package.json +62 -0
  180. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/test/after-test.js +120 -0
  181. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore +17 -0
  182. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile +8 -0
  183. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md +17 -0
  184. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js +29 -0
  185. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json +40 -0
  186. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  187. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore +1 -0
  188. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml +6 -0
  189. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT +22 -0
  190. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md +23 -0
  191. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js +39 -0
  192. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js +59 -0
  193. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json +56 -0
  194. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/test/base64-arraybuffer_test.js +72 -0
  195. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.npmignore +2 -0
  196. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.zuul.yml +8 -0
  197. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/Makefile +14 -0
  198. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/README.md +11 -0
  199. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/index.js +49 -0
  200. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/package.json +44 -0
  201. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/test/index.js +52 -0
  202. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/.npmignore +15 -0
  203. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/History.md +5 -0
  204. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/LICENSE +20 -0
  205. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/Makefile +3 -0
  206. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/README.md +4 -0
  207. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/fixtures/big.json +1 -0
  208. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/index.js +58 -0
  209. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  210. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  211. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  212. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  213. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  214. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/package.json +39 -0
  215. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/test.js +108 -0
  216. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.gitattributes +2 -0
  217. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.npmignore +20 -0
  218. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.travis.yml +19 -0
  219. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/Gruntfile.js +72 -0
  220. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/LICENSE-GPL.txt +278 -0
  221. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/LICENSE-MIT.txt +20 -0
  222. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/README.md +119 -0
  223. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/bower.json +14 -0
  224. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/component.json +16 -0
  225. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/package.json +73 -0
  226. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/generate-test-data.py +47 -0
  227. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/index.html +35 -0
  228. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/tests.js +242 -0
  229. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js +239 -0
  230. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/x.js +46 -0
  231. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/package.json +58 -0
  232. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/.npmignore +11 -0
  233. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/.travis.yml +5 -0
  234. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/History.md +322 -0
  235. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/Makefile +40 -0
  236. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/README.md +183 -0
  237. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/binding.gyp +16 -0
  238. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Makefile +355 -0
  239. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/bufferutil.node.d +1 -0
  240. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d +25 -0
  241. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/obj.target/validation/src/validation.o.d +25 -0
  242. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/validation.node.d +1 -0
  243. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/bufferutil.node +0 -0
  244. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/linker.lock +0 -0
  245. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/validation.node +0 -0
  246. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/binding.Makefile +6 -0
  247. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/bufferutil.target.mk +156 -0
  248. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/config.gypi +117 -0
  249. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/gyp-mac-tool +512 -0
  250. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/validation.target.mk +156 -0
  251. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/builderror.log +15 -0
  252. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/index.js +49 -0
  253. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferPool.js +59 -0
  254. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferUtil.fallback.js +47 -0
  255. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferUtil.js +16 -0
  256. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/ErrorCodes.js +24 -0
  257. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Receiver.hixie.js +180 -0
  258. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Receiver.js +585 -0
  259. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Sender.hixie.js +120 -0
  260. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Sender.js +229 -0
  261. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Validation.fallback.js +12 -0
  262. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Validation.js +16 -0
  263. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocket.js +879 -0
  264. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocketServer.js +467 -0
  265. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/browser.js +43 -0
  266. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/.dntrc +37 -0
  267. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/CHANGELOG.md +216 -0
  268. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/LICENSE.md +13 -0
  269. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/README.md +1208 -0
  270. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/appveyor.yml +32 -0
  271. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/include_dirs.js +1 -0
  272. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/nan.h +2428 -0
  273. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/package.json +84 -0
  274. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/.npmignore +7 -0
  275. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/Makefile +12 -0
  276. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/README.md +69 -0
  277. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/lib/options.js +86 -0
  278. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/package.json +51 -0
  279. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/.npmignore +3 -0
  280. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/.travis.yml +17 -0
  281. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/README.md +97 -0
  282. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/index.js +125 -0
  283. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/package.json +68 -0
  284. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/test.js +327 -0
  285. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/package.json +78 -0
  286. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/src/bufferutil.cc +117 -0
  287. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/src/validation.cc +145 -0
  288. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/README.md +26 -0
  289. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/bin/wscat +222 -0
  290. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/package.json +28 -0
  291. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/package.json +74 -0
  292. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/.npmignore +15 -0
  293. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/LICENSE +20 -0
  294. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/Makefile +3 -0
  295. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/README.md +4 -0
  296. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/fixtures/big.json +1 -0
  297. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/gen.js +17 -0
  298. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/index.js +57 -0
  299. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/README.md +54 -0
  300. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/build/build.js +209 -0
  301. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/component.json +19 -0
  302. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/index.js +3 -0
  303. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/package.json +53 -0
  304. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/package.json +37 -0
  305. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/test.js +108 -0
  306. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/.npmignore +1 -0
  307. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/History.md +25 -0
  308. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/Readme.md +16 -0
  309. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/index.js +144 -0
  310. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/.jshintrc +3 -0
  311. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/.npmignore +6 -0
  312. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/History.md +126 -0
  313. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/Makefile +33 -0
  314. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/Readme.md +153 -0
  315. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/browser.js +144 -0
  316. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/component.json +19 -0
  317. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/debug.js +197 -0
  318. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node.js +129 -0
  319. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/.npmignore +5 -0
  320. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/README.md +33 -0
  321. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/index.js +111 -0
  322. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/package.json +46 -0
  323. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/package.json +69 -0
  324. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.jscs.json +55 -0
  325. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.npmignore +2 -0
  326. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.travis.yml +18 -0
  327. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/CHANGELOG.md +151 -0
  328. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/LICENSE +21 -0
  329. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/README.md +76 -0
  330. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/index.js +70 -0
  331. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/isArguments.js +18 -0
  332. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/package.json +82 -0
  333. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.npmignore +5 -0
  334. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.travis.yml +11 -0
  335. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.zuul.yml +16 -0
  336. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/History.md +87 -0
  337. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/Makefile +11 -0
  338. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/Readme.md +73 -0
  339. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/bench/bench.js +10 -0
  340. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/bench/index.js +81 -0
  341. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/binary.js +141 -0
  342. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/index.js +396 -0
  343. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/is-buffer.js +13 -0
  344. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/LICENSE.txt +22 -0
  345. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/README.md +131 -0
  346. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/benchmark.js +3918 -0
  347. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/package.json +62 -0
  348. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/test/run-test.sh +9 -0
  349. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/test/test.js +2074 -0
  350. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/.npmignore +2 -0
  351. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/.travis.yml +4 -0
  352. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/History.md +52 -0
  353. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/Makefile +7 -0
  354. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md +74 -0
  355. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/bower.json +21 -0
  356. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/component.json +14 -0
  357. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/index.js +164 -0
  358. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/package.json +47 -0
  359. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/Readme.md +115 -0
  360. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/debug.js +137 -0
  361. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/index.js +5 -0
  362. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/lib/debug.js +147 -0
  363. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/package.json +64 -0
  364. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/README.md +54 -0
  365. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/build/build.js +209 -0
  366. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/component.json +19 -0
  367. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/index.js +3 -0
  368. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/package.json +53 -0
  369. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.gitmodules +6 -0
  370. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.jamignore +10 -0
  371. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.npmignore +11 -0
  372. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.travis.yml +33 -0
  373. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/LICENSE +20 -0
  374. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/README.md +126 -0
  375. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/lib/json3.js +861 -0
  376. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/lib/json3.min.js +18 -0
  377. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/package.json +102 -0
  378. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/package.json +51 -0
  379. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/package.json +41 -0
  380. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/History.md +386 -0
  381. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/LICENSE +22 -0
  382. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/README.md +173 -0
  383. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/index.js +2 -0
  384. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/index.js +87 -0
  385. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/manager.js +503 -0
  386. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/on.js +24 -0
  387. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/socket.js +385 -0
  388. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/url.js +73 -0
  389. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/.npmignore +1 -0
  390. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/History.md +12 -0
  391. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/Makefile +8 -0
  392. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/Readme.md +34 -0
  393. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/component.json +11 -0
  394. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/index.js +85 -0
  395. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/package.json +45 -0
  396. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/test/index.js +18 -0
  397. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/.npmignore +4 -0
  398. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/History.md +13 -0
  399. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/Makefile +7 -0
  400. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/Readme.md +64 -0
  401. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/component.json +13 -0
  402. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/index.js +23 -0
  403. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/package.json +47 -0
  404. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/.npmignore +2 -0
  405. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/.travis.yml +4 -0
  406. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/History.md +52 -0
  407. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/Makefile +7 -0
  408. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/Readme.md +74 -0
  409. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/bower.json +21 -0
  410. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/component.json +14 -0
  411. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/index.js +164 -0
  412. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/package.json +47 -0
  413. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/Readme.md +115 -0
  414. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/debug.js +137 -0
  415. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/index.js +5 -0
  416. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/lib/debug.js +147 -0
  417. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/package.json +64 -0
  418. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.npmignore +2 -0
  419. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.travis.yml +41 -0
  420. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.zuul.yml +20 -0
  421. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/History.md +468 -0
  422. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/Makefile +37 -0
  423. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/README.md +265 -0
  424. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/engine.io.js +4040 -0
  425. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/index.js +2 -0
  426. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/index.js +10 -0
  427. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js +705 -0
  428. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js +159 -0
  429. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/index.js +53 -0
  430. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js +233 -0
  431. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling-xhr.js +384 -0
  432. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling.js +245 -0
  433. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js +238 -0
  434. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/xmlhttprequest.js +36 -0
  435. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/.bin/wscat +190 -0
  436. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/.npmignore +3 -0
  437. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/History.md +5 -0
  438. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/Makefile +16 -0
  439. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/Readme.md +24 -0
  440. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/component.json +10 -0
  441. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/index.js +7 -0
  442. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/package.json +44 -0
  443. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/test/inherit.js +21 -0
  444. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/.jshintrc +3 -0
  445. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/.npmignore +6 -0
  446. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/History.md +144 -0
  447. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/Makefile +33 -0
  448. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/Readme.md +156 -0
  449. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/browser.js +147 -0
  450. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/component.json +19 -0
  451. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/debug.js +197 -0
  452. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node.js +129 -0
  453. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/.npmignore +5 -0
  454. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/README.md +33 -0
  455. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/index.js +111 -0
  456. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/package.json +46 -0
  457. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/package.json +71 -0
  458. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.npmignore +17 -0
  459. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.travis.yml +45 -0
  460. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.zuul.yml +18 -0
  461. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/History.md +100 -0
  462. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/LICENSE +22 -0
  463. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/Makefile +26 -0
  464. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/Readme.md +202 -0
  465. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/index.js +2 -0
  466. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/browser.js +594 -0
  467. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/index.js +467 -0
  468. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/keys.js +19 -0
  469. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/.npmignore +2 -0
  470. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/.travis.yml +5 -0
  471. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/LICENCE +19 -0
  472. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/README.md +75 -0
  473. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/index.js +28 -0
  474. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/package.json +62 -0
  475. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/test/after-test.js +120 -0
  476. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore +17 -0
  477. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile +8 -0
  478. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md +17 -0
  479. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js +29 -0
  480. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json +40 -0
  481. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  482. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore +1 -0
  483. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml +6 -0
  484. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT +22 -0
  485. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md +23 -0
  486. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js +39 -0
  487. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js +59 -0
  488. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json +56 -0
  489. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/test/base64-arraybuffer_test.js +72 -0
  490. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/.npmignore +2 -0
  491. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/.zuul.yml +8 -0
  492. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/Makefile +14 -0
  493. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/README.md +11 -0
  494. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/index.js +49 -0
  495. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/package.json +44 -0
  496. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/test/index.js +52 -0
  497. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/.npmignore +15 -0
  498. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/History.md +5 -0
  499. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/LICENSE +20 -0
  500. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/Makefile +3 -0
  501. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/README.md +4 -0
  502. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/fixtures/big.json +1 -0
  503. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/index.js +58 -0
  504. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  505. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  506. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  507. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  508. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  509. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/package.json +39 -0
  510. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/test.js +108 -0
  511. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.gitattributes +2 -0
  512. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.npmignore +20 -0
  513. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.travis.yml +19 -0
  514. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/Gruntfile.js +72 -0
  515. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/LICENSE-GPL.txt +278 -0
  516. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/LICENSE-MIT.txt +20 -0
  517. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/README.md +119 -0
  518. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/bower.json +14 -0
  519. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/component.json +16 -0
  520. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/package.json +73 -0
  521. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/generate-test-data.py +47 -0
  522. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/index.html +35 -0
  523. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/tests.js +242 -0
  524. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/utf8.js +239 -0
  525. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/x.js +46 -0
  526. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/package.json +58 -0
  527. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/.npmignore +2 -0
  528. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/History.md +16 -0
  529. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/Makefile +11 -0
  530. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/Readme.md +24 -0
  531. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/component.json +16 -0
  532. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/index.js +23 -0
  533. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/.gitignore +3 -0
  534. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/History.md +15 -0
  535. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/Makefile +11 -0
  536. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/Readme.md +20 -0
  537. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/component.json +15 -0
  538. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/index.js +8 -0
  539. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/package.json +40 -0
  540. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/index.html +17 -0
  541. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/mocha.css +199 -0
  542. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/mocha.js +4699 -0
  543. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/test.js +22 -0
  544. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/package.json +57 -0
  545. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/Makefile +3 -0
  546. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/index.js +32 -0
  547. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/.npmignore +4 -0
  548. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/History.md +15 -0
  549. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/Makefile +5 -0
  550. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/Readme.md +61 -0
  551. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/example.js +10 -0
  552. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/index.js +38 -0
  553. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  554. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  555. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  556. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  557. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  558. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  559. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/package.json +65 -0
  560. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/package.json +37 -0
  561. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/test.js +21 -0
  562. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/Makefile +3 -0
  563. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/index.js +37 -0
  564. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/.npmignore +4 -0
  565. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/History.md +15 -0
  566. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/Makefile +5 -0
  567. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/Readme.md +61 -0
  568. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/example.js +10 -0
  569. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/index.js +38 -0
  570. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  571. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  572. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  573. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  574. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  575. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  576. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/package.json +65 -0
  577. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/package.json +37 -0
  578. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/test.js +27 -0
  579. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/History.md +5 -0
  580. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/Makefile +3 -0
  581. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/index.js +39 -0
  582. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/.npmignore +4 -0
  583. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/History.md +15 -0
  584. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/Makefile +5 -0
  585. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/Readme.md +61 -0
  586. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/example.js +10 -0
  587. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/index.js +38 -0
  588. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  589. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  590. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  591. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  592. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  593. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  594. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/package.json +65 -0
  595. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/package.json +45 -0
  596. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/test.js +51 -0
  597. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/.npmignore +6 -0
  598. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/.travis.yml +6 -0
  599. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/History.md +312 -0
  600. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/Makefile +40 -0
  601. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/README.md +171 -0
  602. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/parser.benchmark.js +115 -0
  603. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/sender.benchmark.js +66 -0
  604. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/speed.js +105 -0
  605. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/util.js +105 -0
  606. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bin/wscat +190 -0
  607. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/binding.gyp +16 -0
  608. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Makefile +355 -0
  609. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/bufferutil.node.d +1 -0
  610. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d +23 -0
  611. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/obj.target/validation/src/validation.o.d +23 -0
  612. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/validation.node.d +1 -0
  613. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/bufferutil.node +0 -0
  614. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/linker.lock +0 -0
  615. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/validation.node +0 -0
  616. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/binding.Makefile +6 -0
  617. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/bufferutil.target.mk +156 -0
  618. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/config.gypi +117 -0
  619. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/gyp-mac-tool +512 -0
  620. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/validation.target.mk +156 -0
  621. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/builderror.log +1 -0
  622. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/.npmignore +1 -0
  623. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/package.json +18 -0
  624. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/app.js +39 -0
  625. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/index.html +22 -0
  626. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/uploader.js +55 -0
  627. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/server.js +103 -0
  628. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/package.json +17 -0
  629. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/public/index.html +33 -0
  630. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/server.js +21 -0
  631. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/package.json +17 -0
  632. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/public/index.html +33 -0
  633. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/server.js +19 -0
  634. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/ssl.js +59 -0
  635. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/index.js +26 -0
  636. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferPool.js +59 -0
  637. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferUtil.fallback.js +47 -0
  638. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferUtil.js +16 -0
  639. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/ErrorCodes.js +24 -0
  640. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.hixie.js +180 -0
  641. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.js +591 -0
  642. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Sender.hixie.js +123 -0
  643. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Sender.js +227 -0
  644. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Validation.fallback.js +12 -0
  645. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Validation.js +16 -0
  646. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js +818 -0
  647. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocketServer.js +460 -0
  648. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/browser.js +43 -0
  649. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/.npmignore +4 -0
  650. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/.travis.yml +4 -0
  651. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/History.md +107 -0
  652. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/Makefile +7 -0
  653. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/Readme.md +262 -0
  654. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/index.js +2 -0
  655. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/lib/commander.js +1026 -0
  656. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/package.json +60 -0
  657. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/.index.js +1 -0
  658. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/LICENSE +43 -0
  659. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/README.md +705 -0
  660. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/nan.h +884 -0
  661. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/package.json +53 -0
  662. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/.npmignore +7 -0
  663. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/Makefile +12 -0
  664. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/README.md +69 -0
  665. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/lib/options.js +86 -0
  666. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/package.json +51 -0
  667. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/.gitignore +5 -0
  668. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/README.md +3 -0
  669. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/example.js +3 -0
  670. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/package.json +48 -0
  671. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/tinycolor.js +31 -0
  672. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/package.json +82 -0
  673. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/src/bufferutil.cc +117 -0
  674. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/src/validation.cc +145 -0
  675. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/BufferPool.test.js +63 -0
  676. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Receiver.hixie.test.js +158 -0
  677. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Receiver.test.js +255 -0
  678. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Sender.hixie.test.js +134 -0
  679. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Sender.test.js +24 -0
  680. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Validation.test.js +23 -0
  681. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocket.integration.js +44 -0
  682. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocket.test.js +1724 -0
  683. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocketServer.test.js +1103 -0
  684. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/autobahn-server.js +29 -0
  685. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/autobahn.js +52 -0
  686. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/agent1-cert.pem +16 -0
  687. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/agent1-key.pem +15 -0
  688. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/ca1-cert.pem +15 -0
  689. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/ca1-key.pem +17 -0
  690. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/certificate.pem +13 -0
  691. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/key.pem +15 -0
  692. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/request.pem +11 -0
  693. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/textfile +9 -0
  694. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/hybi-common.js +99 -0
  695. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/testserver.js +180 -0
  696. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/LICENSE +22 -0
  697. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/README.md +57 -0
  698. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/autotest.watchr +8 -0
  699. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/example/demo.js +16 -0
  700. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/lib/XMLHttpRequest.js +642 -0
  701. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/package.json +42 -0
  702. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-constants.js +13 -0
  703. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-events.js +50 -0
  704. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-exceptions.js +62 -0
  705. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-headers.js +76 -0
  706. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-302.js +41 -0
  707. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-303.js +41 -0
  708. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-307.js +43 -0
  709. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-request-methods.js +62 -0
  710. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-request-protocols.js +34 -0
  711. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/testdata.txt +1 -0
  712. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/package.json +84 -0
  713. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/.npmignore +15 -0
  714. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/History.md +11 -0
  715. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/LICENSE +20 -0
  716. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/Makefile +3 -0
  717. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/README.md +4 -0
  718. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/fixtures/big.json +1 -0
  719. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/index.js +58 -0
  720. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  721. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  722. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  723. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  724. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  725. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/package.json +39 -0
  726. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/test.js +108 -0
  727. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/.npmignore +2 -0
  728. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/Makefile +11 -0
  729. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/Readme.md +15 -0
  730. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/component.json +10 -0
  731. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/index.js +10 -0
  732. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/package.json +32 -0
  733. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/.npmignore +3 -0
  734. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/History.md +10 -0
  735. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/Makefile +16 -0
  736. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/Readme.md +31 -0
  737. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/component.json +10 -0
  738. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/index.js +84 -0
  739. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/package.json +35 -0
  740. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/test/object.js +48 -0
  741. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/History.md +5 -0
  742. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/Makefile +3 -0
  743. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/index.js +25 -0
  744. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/.npmignore +4 -0
  745. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/History.md +15 -0
  746. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/Makefile +5 -0
  747. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/Readme.md +61 -0
  748. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/example.js +10 -0
  749. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/index.js +38 -0
  750. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  751. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  752. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  753. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  754. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  755. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  756. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/package.json +65 -0
  757. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/package.json +37 -0
  758. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/test.js +42 -0
  759. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/.npmignore +3 -0
  760. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/LICENCE +19 -0
  761. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/README.md +22 -0
  762. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/index.js +13 -0
  763. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/package.json +59 -0
  764. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/package.json +90 -0
  765. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/socket.io.js +7000 -0
  766. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.npmignore +5 -0
  767. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.travis.yml +11 -0
  768. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.zuul.yml +16 -0
  769. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/History.md +97 -0
  770. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/Makefile +11 -0
  771. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/Readme.md +73 -0
  772. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bench/bench.js +10 -0
  773. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bench/index.js +81 -0
  774. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bg.gif +0 -0
  775. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/binary.js +141 -0
  776. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/index.js +400 -0
  777. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/is-buffer.js +13 -0
  778. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/LICENSE.txt +22 -0
  779. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/README.md +131 -0
  780. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/benchmark.js +3918 -0
  781. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/package.json +62 -0
  782. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/test/run-test.sh +9 -0
  783. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/test/test.js +2074 -0
  784. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/.npmignore +2 -0
  785. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/.travis.yml +4 -0
  786. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/History.md +52 -0
  787. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/Makefile +7 -0
  788. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md +74 -0
  789. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/bower.json +21 -0
  790. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/component.json +14 -0
  791. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/index.js +164 -0
  792. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/package.json +47 -0
  793. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/Readme.md +115 -0
  794. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/debug.js +137 -0
  795. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/index.js +5 -0
  796. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/lib/debug.js +147 -0
  797. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/package.json +64 -0
  798. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/README.md +54 -0
  799. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/build/build.js +209 -0
  800. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/component.json +19 -0
  801. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/index.js +3 -0
  802. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/package.json +53 -0
  803. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.gitmodules +6 -0
  804. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.jamignore +10 -0
  805. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.npmignore +11 -0
  806. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.travis.yml +33 -0
  807. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/LICENSE +20 -0
  808. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/README.md +126 -0
  809. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/lib/json3.js +861 -0
  810. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/lib/json3.min.js +18 -0
  811. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/package.json +102 -0
  812. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/package.json +51 -0
  813. data/spec/iface/driver/assets/node_modules/socket.io/package.json +80 -0
  814. data/spec/iface/driver/assets/sockio_server.js +38 -0
  815. data/spec/iface/driver/controller_spec.rb +107 -0
  816. data/spec/iface/driver/debug_socketio_spec.rb +76 -0
  817. data/spec/iface/driver/debug_spec.rb +27 -0
  818. data/spec/iface/driver/net_spec.rb +80 -0
  819. data/spec/iface/driver/ping_spec.rb +53 -0
  820. data/spec/iface/driver/pipe_spec.rb +31 -0
  821. data/spec/iface/driver/sockio_spec.rb +52 -0
  822. data/spec/iface/driver/timer_spec.rb +39 -0
  823. data/spec/iface/driver/ui_spec.rb +157 -0
  824. data/spec/iface/kern/debug_spec.rb +40 -0
  825. data/spec/iface/kern/event_spec.rb +46 -0
  826. data/spec/iface/kern/net_spec.rb +27 -0
  827. data/spec/iface/kern/ping_spec.rb +123 -0
  828. data/spec/iface/kern/pipe_spec.rb +30 -0
  829. data/spec/kern/assets/controller0.rb +14 -0
  830. data/spec/kern/assets/controller1.rb +29 -0
  831. data/spec/kern/assets/controller_bare.rb +8 -0
  832. data/spec/kern/assets/controller_context.rb +9 -0
  833. data/spec/kern/assets/controller_def.rb +22 -0
  834. data/spec/kern/assets/controller_spots.rb +9 -0
  835. data/spec/kern/assets/controller_spots_embed.rb +19 -0
  836. data/spec/kern/assets/controller_spots_embed_removed.rb +28 -0
  837. data/spec/kern/assets/embed_info.rb +29 -0
  838. data/spec/kern/assets/event_gw.rb +21 -0
  839. data/spec/kern/assets/goto.rb +29 -0
  840. data/spec/kern/assets/goto2.rb +19 -0
  841. data/spec/kern/assets/lower_event.rb +30 -0
  842. data/spec/kern/assets/raise_event.rb +30 -0
  843. data/spec/kern/assets/rest_service.rb +21 -0
  844. data/spec/kern/assets/send_event.rb +14 -0
  845. data/spec/kern/assets/test_event.rb +14 -0
  846. data/spec/kern/assets/test_event2.rb +26 -0
  847. data/spec/kern/assets/test_event3.rb +21 -0
  848. data/spec/kern/assets/timer_service.rb +20 -0
  849. data/spec/kern/controller_spec.rb +500 -0
  850. data/spec/kern/debug_spec.rb +38 -0
  851. data/spec/kern/debug_ui_spec.rb +243 -0
  852. data/spec/kern/net_spec.rb +14 -0
  853. data/spec/kern/rest_service_spec.rb +45 -0
  854. data/spec/kern/timer_service_spec.rb +40 -0
  855. data/spec/lib/helpers.rb +318 -0
  856. data/spec/lib/io_extensions.rb +13 -0
  857. data/spec/lib/rspec_extensions.rb +219 -0
  858. data/spec/lib/temp_dir.rb +57 -0
  859. metadata +1664 -14
  860. data/app/drivers/iface/ui.js +0 -31
  861. data/app/kern/hello.js +0 -1
  862. data/docs/driver_interface.md +0 -61
  863. data/docs/interface.md +0 -5
  864. data/docs/platform_drivers.md +0 -36
  865. data/spec/build_valid_spec.rb +0 -61
  866. data/spec/drivers/net_spec.rb +0 -159
  867. data/spec/helpers.rb +0 -140
@@ -0,0 +1,1724 @@
1
+ var assert = require('assert')
2
+ , https = require('https')
3
+ , http = require('http')
4
+ , should = require('should')
5
+ , WebSocket = require('../')
6
+ , WebSocketServer = require('../').Server
7
+ , fs = require('fs')
8
+ , server = require('./testserver')
9
+ , crypto = require('crypto');
10
+
11
+ var port = 20000;
12
+
13
+ function getArrayBuffer(buf) {
14
+ var l = buf.length;
15
+ var arrayBuf = new ArrayBuffer(l);
16
+ var uint8View = new Uint8Array(arrayBuf);
17
+ for (var i = 0; i < l; i++) {
18
+ uint8View[i] = buf[i];
19
+ }
20
+ return uint8View.buffer;
21
+ }
22
+
23
+
24
+ function areArraysEqual(x, y) {
25
+ if (x.length != y.length) return false;
26
+ for (var i = 0, l = x.length; i < l; ++i) {
27
+ if (x[i] !== y[i]) return false;
28
+ }
29
+ return true;
30
+ }
31
+
32
+ describe('WebSocket', function() {
33
+ describe('#ctor', function() {
34
+ it('throws exception for invalid url', function(done) {
35
+ try {
36
+ var ws = new WebSocket('echo.websocket.org');
37
+ }
38
+ catch (e) {
39
+ done();
40
+ }
41
+ });
42
+ });
43
+
44
+ describe('options', function() {
45
+ it('should accept an `agent` option', function(done) {
46
+ var wss = new WebSocketServer({port: ++port}, function() {
47
+ var agent = {
48
+ addRequest: function() {
49
+ wss.close();
50
+ done();
51
+ }
52
+ };
53
+ var ws = new WebSocket('ws://localhost:' + port, { agent: agent });
54
+ });
55
+ });
56
+ // GH-227
57
+ it('should accept the `options` object as the 3rd argument', function(done) {
58
+ var wss = new WebSocketServer({port: ++port}, function() {
59
+ var agent = {
60
+ addRequest: function() {
61
+ wss.close();
62
+ done();
63
+ }
64
+ };
65
+ var ws = new WebSocket('ws://localhost:' + port, [], { agent: agent });
66
+ });
67
+ });
68
+ });
69
+
70
+ describe('properties', function() {
71
+ it('#bytesReceived exposes number of bytes received', function(done) {
72
+ var wss = new WebSocketServer({port: ++port}, function() {
73
+ var ws = new WebSocket('ws://localhost:' + port);
74
+ ws.on('message', function() {
75
+ ws.bytesReceived.should.eql(8);
76
+ wss.close();
77
+ done();
78
+ });
79
+ });
80
+ wss.on('connection', function(ws) {
81
+ ws.send('foobar');
82
+ });
83
+ });
84
+
85
+ it('#url exposes the server url', function(done) {
86
+ server.createServer(++port, function(srv) {
87
+ var url = 'ws://localhost:' + port;
88
+ var ws = new WebSocket(url);
89
+ assert.equal(url, ws.url);
90
+ ws.terminate();
91
+ ws.on('close', function() {
92
+ srv.close();
93
+ done();
94
+ });
95
+ });
96
+ });
97
+
98
+ it('#protocolVersion exposes the protocol version', function(done) {
99
+ server.createServer(++port, function(srv) {
100
+ var url = 'ws://localhost:' + port;
101
+ var ws = new WebSocket(url);
102
+ assert.equal(13, ws.protocolVersion);
103
+ ws.terminate();
104
+ ws.on('close', function() {
105
+ srv.close();
106
+ done();
107
+ });
108
+ });
109
+ });
110
+
111
+ describe('#bufferedAmount', function() {
112
+ it('defaults to zero', function(done) {
113
+ server.createServer(++port, function(srv) {
114
+ var url = 'ws://localhost:' + port;
115
+ var ws = new WebSocket(url);
116
+ assert.equal(0, ws.bufferedAmount);
117
+ ws.terminate();
118
+ ws.on('close', function() {
119
+ srv.close();
120
+ done();
121
+ });
122
+ });
123
+ });
124
+
125
+ it('defaults to zero upon "open"', function(done) {
126
+ server.createServer(++port, function(srv) {
127
+ var url = 'ws://localhost:' + port;
128
+ var ws = new WebSocket(url);
129
+ ws.onopen = function() {
130
+ assert.equal(0, ws.bufferedAmount);
131
+ ws.terminate();
132
+ ws.on('close', function() {
133
+ srv.close();
134
+ done();
135
+ });
136
+ };
137
+ });
138
+ });
139
+
140
+ it('stress kernel write buffer', function(done) {
141
+ var wss = new WebSocketServer({port: ++port}, function() {
142
+ var ws = new WebSocket('ws://localhost:' + port);
143
+ });
144
+ wss.on('connection', function(ws) {
145
+ while (true) {
146
+ if (ws.bufferedAmount > 0) break;
147
+ ws.send((new Array(10000)).join('hello'));
148
+ }
149
+ ws.terminate();
150
+ ws.on('close', function() {
151
+ wss.close();
152
+ done();
153
+ });
154
+ });
155
+ });
156
+ });
157
+
158
+ describe('Custom headers', function() {
159
+ it('request has an authorization header', function (done) {
160
+ var auth = 'test:testpass';
161
+ var srv = http.createServer(function (req, res) {});
162
+ var wss = new WebSocketServer({server: srv});
163
+ srv.listen(++port);
164
+ var ws = new WebSocket('ws://' + auth + '@localhost:' + port);
165
+ srv.on('upgrade', function (req, socket, head) {
166
+ assert(req.headers.authorization, 'auth header exists');
167
+ assert.equal(req.headers.authorization, 'Basic ' + new Buffer(auth).toString('base64'));
168
+ ws.terminate();
169
+ ws.on('close', function () {
170
+ srv.close();
171
+ wss.close();
172
+ done();
173
+ });
174
+ });
175
+ });
176
+
177
+ it('accepts custom headers', function (done) {
178
+ var srv = http.createServer(function (req, res) {});
179
+ var wss = new WebSocketServer({server: srv});
180
+ srv.listen(++port);
181
+
182
+ var ws = new WebSocket('ws://localhost:' + port, {
183
+ headers: {
184
+ 'Cookie': 'foo=bar'
185
+ }
186
+ });
187
+
188
+ srv.on('upgrade', function (req, socket, head) {
189
+ assert(req.headers.cookie, 'auth header exists');
190
+ assert.equal(req.headers.cookie, 'foo=bar');
191
+
192
+ ws.terminate();
193
+ ws.on('close', function () {
194
+ srv.close();
195
+ wss.close();
196
+ done();
197
+ });
198
+ });
199
+ });
200
+ });
201
+
202
+ describe('#readyState', function() {
203
+ it('defaults to connecting', function(done) {
204
+ server.createServer(++port, function(srv) {
205
+ var ws = new WebSocket('ws://localhost:' + port);
206
+ assert.equal(WebSocket.CONNECTING, ws.readyState);
207
+ ws.terminate();
208
+ ws.on('close', function() {
209
+ srv.close();
210
+ done();
211
+ });
212
+ });
213
+ });
214
+
215
+ it('set to open once connection is established', function(done) {
216
+ server.createServer(++port, function(srv) {
217
+ var ws = new WebSocket('ws://localhost:' + port);
218
+ ws.on('open', function() {
219
+ assert.equal(WebSocket.OPEN, ws.readyState);
220
+ srv.close();
221
+ done();
222
+ });
223
+ });
224
+ });
225
+
226
+ it('set to closed once connection is closed', function(done) {
227
+ server.createServer(++port, function(srv) {
228
+ var ws = new WebSocket('ws://localhost:' + port);
229
+ ws.close(1001);
230
+ ws.on('close', function() {
231
+ assert.equal(WebSocket.CLOSED, ws.readyState);
232
+ srv.close();
233
+ done();
234
+ });
235
+ });
236
+ });
237
+
238
+ it('set to closed once connection is terminated', function(done) {
239
+ server.createServer(++port, function(srv) {
240
+ var ws = new WebSocket('ws://localhost:' + port);
241
+ ws.terminate();
242
+ ws.on('close', function() {
243
+ assert.equal(WebSocket.CLOSED, ws.readyState);
244
+ srv.close();
245
+ done();
246
+ });
247
+ });
248
+ });
249
+ });
250
+
251
+ /*
252
+ * Ready state constants
253
+ */
254
+
255
+ var readyStates = {
256
+ CONNECTING: 0,
257
+ OPEN: 1,
258
+ CLOSING: 2,
259
+ CLOSED: 3
260
+ };
261
+
262
+ /*
263
+ * Ready state constant tests
264
+ */
265
+
266
+ Object.keys(readyStates).forEach(function(state) {
267
+ describe('.' + state, function() {
268
+ it('is enumerable property of class', function() {
269
+ var propertyDescripter = Object.getOwnPropertyDescriptor(WebSocket, state)
270
+ assert.equal(readyStates[state], propertyDescripter.value);
271
+ assert.equal(true, propertyDescripter.enumerable);
272
+ });
273
+ });
274
+ });
275
+
276
+ server.createServer(++port, function(srv) {
277
+ var ws = new WebSocket('ws://localhost:' + port);
278
+ Object.keys(readyStates).forEach(function(state) {
279
+ describe('.' + state, function() {
280
+ it('is property of instance', function() {
281
+ assert.equal(readyStates[state], ws[state]);
282
+ });
283
+ });
284
+ });
285
+ });
286
+ });
287
+
288
+ describe('events', function() {
289
+ it('emits a ping event', function(done) {
290
+ var wss = new WebSocketServer({port: ++port});
291
+ wss.on('connection', function(client) {
292
+ client.ping();
293
+ });
294
+ var ws = new WebSocket('ws://localhost:' + port);
295
+ ws.on('ping', function() {
296
+ ws.terminate();
297
+ wss.close();
298
+ done();
299
+ });
300
+ });
301
+
302
+ it('emits a pong event', function(done) {
303
+ var wss = new WebSocketServer({port: ++port});
304
+ wss.on('connection', function(client) {
305
+ client.pong();
306
+ });
307
+ var ws = new WebSocket('ws://localhost:' + port);
308
+ ws.on('pong', function() {
309
+ ws.terminate();
310
+ wss.close();
311
+ done();
312
+ });
313
+ });
314
+ });
315
+
316
+ describe('connection establishing', function() {
317
+ it('can disconnect before connection is established', function(done) {
318
+ server.createServer(++port, function(srv) {
319
+ var ws = new WebSocket('ws://localhost:' + port);
320
+ ws.terminate();
321
+ ws.on('open', function() {
322
+ assert.fail('connect shouldnt be raised here');
323
+ });
324
+ ws.on('close', function() {
325
+ srv.close();
326
+ done();
327
+ });
328
+ });
329
+ });
330
+
331
+ it('can close before connection is established', function(done) {
332
+ server.createServer(++port, function(srv) {
333
+ var ws = new WebSocket('ws://localhost:' + port);
334
+ ws.close(1001);
335
+ ws.on('open', function() {
336
+ assert.fail('connect shouldnt be raised here');
337
+ });
338
+ ws.on('close', function() {
339
+ srv.close();
340
+ done();
341
+ });
342
+ });
343
+ });
344
+
345
+ it('invalid server key is denied', function(done) {
346
+ server.createServer(++port, server.handlers.invalidKey, function(srv) {
347
+ var ws = new WebSocket('ws://localhost:' + port);
348
+ ws.on('error', function() {
349
+ srv.close();
350
+ done();
351
+ });
352
+ });
353
+ });
354
+
355
+ it('close event is raised when server closes connection', function(done) {
356
+ server.createServer(++port, server.handlers.closeAfterConnect, function(srv) {
357
+ var ws = new WebSocket('ws://localhost:' + port);
358
+ ws.on('close', function() {
359
+ srv.close();
360
+ done();
361
+ });
362
+ });
363
+ });
364
+
365
+ it('error is emitted if server aborts connection', function(done) {
366
+ server.createServer(++port, server.handlers.return401, function(srv) {
367
+ var ws = new WebSocket('ws://localhost:' + port);
368
+ ws.on('open', function() {
369
+ assert.fail('connect shouldnt be raised here');
370
+ });
371
+ ws.on('error', function() {
372
+ srv.close();
373
+ done();
374
+ });
375
+ });
376
+ });
377
+ });
378
+
379
+ describe('#pause and #resume', function() {
380
+ it('pauses the underlying stream', function(done) {
381
+ // this test is sort-of racecondition'y, since an unlikely slow connection
382
+ // to localhost can cause the test to succeed even when the stream pausing
383
+ // isn't working as intended. that is an extremely unlikely scenario, though
384
+ // and an acceptable risk for the test.
385
+ var client;
386
+ var serverClient;
387
+ var openCount = 0;
388
+ function onOpen() {
389
+ if (++openCount == 2) {
390
+ var paused = true;
391
+ serverClient.on('message', function() {
392
+ paused.should.not.be.ok;
393
+ wss.close();
394
+ done();
395
+ });
396
+ serverClient.pause();
397
+ setTimeout(function() {
398
+ paused = false;
399
+ serverClient.resume();
400
+ }, 200);
401
+ client.send('foo');
402
+ }
403
+ }
404
+ var wss = new WebSocketServer({port: ++port}, function() {
405
+ var ws = new WebSocket('ws://localhost:' + port);
406
+ serverClient = ws;
407
+ serverClient.on('open', onOpen);
408
+ });
409
+ wss.on('connection', function(ws) {
410
+ client = ws;
411
+ onOpen();
412
+ });
413
+ });
414
+ });
415
+
416
+ describe('#ping', function() {
417
+ it('before connect should fail', function(done) {
418
+ server.createServer(++port, function(srv) {
419
+ var ws = new WebSocket('ws://localhost:' + port);
420
+ ws.on('error', function() {});
421
+ try {
422
+ ws.ping();
423
+ }
424
+ catch (e) {
425
+ srv.close();
426
+ ws.terminate();
427
+ done();
428
+ }
429
+ });
430
+ });
431
+
432
+ it('before connect can silently fail', function(done) {
433
+ server.createServer(++port, function(srv) {
434
+ var ws = new WebSocket('ws://localhost:' + port);
435
+ ws.on('error', function() {});
436
+ ws.ping('', {}, true);
437
+ srv.close();
438
+ ws.terminate();
439
+ done();
440
+ });
441
+ });
442
+
443
+ it('without message is successfully transmitted to the server', function(done) {
444
+ server.createServer(++port, function(srv) {
445
+ var ws = new WebSocket('ws://localhost:' + port);
446
+ ws.on('open', function() {
447
+ ws.ping();
448
+ });
449
+ srv.on('ping', function(message) {
450
+ srv.close();
451
+ ws.terminate();
452
+ done();
453
+ });
454
+ });
455
+ });
456
+
457
+ it('with message is successfully transmitted to the server', function(done) {
458
+ server.createServer(++port, function(srv) {
459
+ var ws = new WebSocket('ws://localhost:' + port);
460
+ ws.on('open', function() {
461
+ ws.ping('hi');
462
+ });
463
+ srv.on('ping', function(message) {
464
+ assert.equal('hi', message);
465
+ srv.close();
466
+ ws.terminate();
467
+ done();
468
+ });
469
+ });
470
+ });
471
+
472
+ it('with encoded message is successfully transmitted to the server', function(done) {
473
+ server.createServer(++port, function(srv) {
474
+ var ws = new WebSocket('ws://localhost:' + port);
475
+ ws.on('open', function() {
476
+ ws.ping('hi', {mask: true});
477
+ });
478
+ srv.on('ping', function(message, flags) {
479
+ assert.ok(flags.masked);
480
+ assert.equal('hi', message);
481
+ srv.close();
482
+ ws.terminate();
483
+ done();
484
+ });
485
+ });
486
+ });
487
+ });
488
+
489
+ describe('#pong', function() {
490
+ it('before connect should fail', function(done) {
491
+ server.createServer(++port, function(srv) {
492
+ var ws = new WebSocket('ws://localhost:' + port);
493
+ ws.on('error', function() {});
494
+ try {
495
+ ws.pong();
496
+ }
497
+ catch (e) {
498
+ srv.close();
499
+ ws.terminate();
500
+ done();
501
+ }
502
+ });
503
+ });
504
+
505
+ it('before connect can silently fail', function(done) {
506
+ server.createServer(++port, function(srv) {
507
+ var ws = new WebSocket('ws://localhost:' + port);
508
+ ws.on('error', function() {});
509
+ ws.pong('', {}, true);
510
+ srv.close();
511
+ ws.terminate();
512
+ done();
513
+ });
514
+ });
515
+
516
+ it('without message is successfully transmitted to the server', function(done) {
517
+ server.createServer(++port, function(srv) {
518
+ var ws = new WebSocket('ws://localhost:' + port);
519
+ ws.on('open', function() {
520
+ ws.pong();
521
+ });
522
+ srv.on('pong', function(message) {
523
+ srv.close();
524
+ ws.terminate();
525
+ done();
526
+ });
527
+ });
528
+ });
529
+
530
+ it('with message is successfully transmitted to the server', function(done) {
531
+ server.createServer(++port, function(srv) {
532
+ var ws = new WebSocket('ws://localhost:' + port);
533
+ ws.on('open', function() {
534
+ ws.pong('hi');
535
+ });
536
+ srv.on('pong', function(message) {
537
+ assert.equal('hi', message);
538
+ srv.close();
539
+ ws.terminate();
540
+ done();
541
+ });
542
+ });
543
+ });
544
+
545
+ it('with encoded message is successfully transmitted to the server', function(done) {
546
+ server.createServer(++port, function(srv) {
547
+ var ws = new WebSocket('ws://localhost:' + port);
548
+ ws.on('open', function() {
549
+ ws.pong('hi', {mask: true});
550
+ });
551
+ srv.on('pong', function(message, flags) {
552
+ assert.ok(flags.masked);
553
+ assert.equal('hi', message);
554
+ srv.close();
555
+ ws.terminate();
556
+ done();
557
+ });
558
+ });
559
+ });
560
+ });
561
+
562
+ describe('#send', function() {
563
+ it('very long binary data can be sent and received (with echoing server)', function(done) {
564
+ server.createServer(++port, function(srv) {
565
+ var ws = new WebSocket('ws://localhost:' + port);
566
+ var array = new Float32Array(5 * 1024 * 1024);
567
+ for (var i = 0; i < array.length; ++i) array[i] = i / 5;
568
+ ws.on('open', function() {
569
+ ws.send(array, {binary: true});
570
+ });
571
+ ws.on('message', function(message, flags) {
572
+ assert.ok(flags.binary);
573
+ assert.ok(areArraysEqual(array, new Float32Array(getArrayBuffer(message))));
574
+ ws.terminate();
575
+ srv.close();
576
+ done();
577
+ });
578
+ });
579
+ });
580
+
581
+ it('can send and receive text data', function(done) {
582
+ server.createServer(++port, function(srv) {
583
+ var ws = new WebSocket('ws://localhost:' + port);
584
+ ws.on('open', function() {
585
+ ws.send('hi');
586
+ });
587
+ ws.on('message', function(message, flags) {
588
+ assert.equal('hi', message);
589
+ ws.terminate();
590
+ srv.close();
591
+ done();
592
+ });
593
+ });
594
+ });
595
+
596
+ it('send and receive binary data as an array', function(done) {
597
+ server.createServer(++port, function(srv) {
598
+ var ws = new WebSocket('ws://localhost:' + port);
599
+ var array = new Float32Array(6);
600
+ for (var i = 0; i < array.length; ++i) array[i] = i / 2;
601
+ var partial = array.subarray(2, 5);
602
+ ws.on('open', function() {
603
+ ws.send(partial, {binary: true});
604
+ });
605
+ ws.on('message', function(message, flags) {
606
+ assert.ok(flags.binary);
607
+ assert.ok(areArraysEqual(partial, new Float32Array(getArrayBuffer(message))));
608
+ ws.terminate();
609
+ srv.close();
610
+ done();
611
+ });
612
+ });
613
+ });
614
+
615
+ it('binary data can be sent and received as buffer', function(done) {
616
+ server.createServer(++port, function(srv) {
617
+ var ws = new WebSocket('ws://localhost:' + port);
618
+ var buf = new Buffer('foobar');
619
+ ws.on('open', function() {
620
+ ws.send(buf, {binary: true});
621
+ });
622
+ ws.on('message', function(message, flags) {
623
+ assert.ok(flags.binary);
624
+ assert.ok(areArraysEqual(buf, message));
625
+ ws.terminate();
626
+ srv.close();
627
+ done();
628
+ });
629
+ });
630
+ });
631
+
632
+ it('ArrayBuffer is auto-detected without binary flag', function(done) {
633
+ server.createServer(++port, function(srv) {
634
+ var ws = new WebSocket('ws://localhost:' + port);
635
+ var array = new Float32Array(5);
636
+ for (var i = 0; i < array.length; ++i) array[i] = i / 2;
637
+ ws.on('open', function() {
638
+ ws.send(array.buffer);
639
+ });
640
+ ws.onmessage = function (event) {
641
+ assert.ok(event.type = 'Binary');
642
+ assert.ok(areArraysEqual(array, new Float32Array(getArrayBuffer(event.data))));
643
+ ws.terminate();
644
+ srv.close();
645
+ done();
646
+ };
647
+ });
648
+ });
649
+
650
+ it('Buffer is auto-detected without binary flag', function(done) {
651
+ server.createServer(++port, function(srv) {
652
+ var ws = new WebSocket('ws://localhost:' + port);
653
+ var buf = new Buffer('foobar');
654
+ ws.on('open', function() {
655
+ ws.send(buf);
656
+ });
657
+ ws.onmessage = function (event) {
658
+ assert.ok(event.type = 'Binary');
659
+ assert.ok(areArraysEqual(event.data, buf));
660
+ ws.terminate();
661
+ srv.close();
662
+ done();
663
+ };
664
+ });
665
+ });
666
+
667
+ it('before connect should fail', function(done) {
668
+ server.createServer(++port, function(srv) {
669
+ var ws = new WebSocket('ws://localhost:' + port);
670
+ ws.on('error', function() {});
671
+ try {
672
+ ws.send('hi');
673
+ }
674
+ catch (e) {
675
+ ws.terminate();
676
+ srv.close();
677
+ done();
678
+ }
679
+ });
680
+ });
681
+
682
+ it('before connect should pass error through callback, if present', function(done) {
683
+ server.createServer(++port, function(srv) {
684
+ var ws = new WebSocket('ws://localhost:' + port);
685
+ ws.on('error', function() {});
686
+ ws.send('hi', function(error) {
687
+ assert.ok(error instanceof Error);
688
+ ws.terminate();
689
+ srv.close();
690
+ done();
691
+ });
692
+ });
693
+ });
694
+
695
+ it('without data should be successful', function(done) {
696
+ server.createServer(++port, function(srv) {
697
+ var ws = new WebSocket('ws://localhost:' + port);
698
+ ws.on('open', function() {
699
+ ws.send();
700
+ });
701
+ srv.on('message', function(message, flags) {
702
+ assert.equal('', message);
703
+ srv.close();
704
+ ws.terminate();
705
+ done();
706
+ });
707
+ });
708
+ });
709
+
710
+ it('calls optional callback when flushed', function(done) {
711
+ server.createServer(++port, function(srv) {
712
+ var ws = new WebSocket('ws://localhost:' + port);
713
+ ws.on('open', function() {
714
+ ws.send('hi', function() {
715
+ srv.close();
716
+ ws.terminate();
717
+ done();
718
+ });
719
+ });
720
+ });
721
+ });
722
+
723
+ it('with unencoded message is successfully transmitted to the server', function(done) {
724
+ server.createServer(++port, function(srv) {
725
+ var ws = new WebSocket('ws://localhost:' + port);
726
+ ws.on('open', function() {
727
+ ws.send('hi');
728
+ });
729
+ srv.on('message', function(message, flags) {
730
+ assert.equal('hi', message);
731
+ srv.close();
732
+ ws.terminate();
733
+ done();
734
+ });
735
+ });
736
+ });
737
+
738
+ it('with encoded message is successfully transmitted to the server', function(done) {
739
+ server.createServer(++port, function(srv) {
740
+ var ws = new WebSocket('ws://localhost:' + port);
741
+ ws.on('open', function() {
742
+ ws.send('hi', {mask: true});
743
+ });
744
+ srv.on('message', function(message, flags) {
745
+ assert.ok(flags.masked);
746
+ assert.equal('hi', message);
747
+ srv.close();
748
+ ws.terminate();
749
+ done();
750
+ });
751
+ });
752
+ });
753
+
754
+ it('with unencoded binary message is successfully transmitted to the server', function(done) {
755
+ server.createServer(++port, function(srv) {
756
+ var ws = new WebSocket('ws://localhost:' + port);
757
+ var array = new Float32Array(5);
758
+ for (var i = 0; i < array.length; ++i) array[i] = i / 2;
759
+ ws.on('open', function() {
760
+ ws.send(array, {binary: true});
761
+ });
762
+ srv.on('message', function(message, flags) {
763
+ assert.ok(flags.binary);
764
+ assert.ok(areArraysEqual(array, new Float32Array(getArrayBuffer(message))));
765
+ srv.close();
766
+ ws.terminate();
767
+ done();
768
+ });
769
+ });
770
+ });
771
+
772
+ it('with encoded binary message is successfully transmitted to the server', function(done) {
773
+ server.createServer(++port, function(srv) {
774
+ var ws = new WebSocket('ws://localhost:' + port);
775
+ var array = new Float32Array(5);
776
+ for (var i = 0; i < array.length; ++i) array[i] = i / 2;
777
+ ws.on('open', function() {
778
+ ws.send(array, {mask: true, binary: true});
779
+ });
780
+ srv.on('message', function(message, flags) {
781
+ assert.ok(flags.binary);
782
+ assert.ok(flags.masked);
783
+ assert.ok(areArraysEqual(array, new Float32Array(getArrayBuffer(message))));
784
+ srv.close();
785
+ ws.terminate();
786
+ done();
787
+ });
788
+ });
789
+ });
790
+
791
+ it('with binary stream will send fragmented data', function(done) {
792
+ server.createServer(++port, function(srv) {
793
+ var ws = new WebSocket('ws://localhost:' + port);
794
+ var callbackFired = false;
795
+ ws.on('open', function() {
796
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
797
+ fileStream.bufferSize = 100;
798
+ ws.send(fileStream, {binary: true}, function(error) {
799
+ assert.equal(null, error);
800
+ callbackFired = true;
801
+ });
802
+ });
803
+ srv.on('message', function(data, flags) {
804
+ assert.ok(flags.binary);
805
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile'), data));
806
+ ws.terminate();
807
+ });
808
+ ws.on('close', function() {
809
+ assert.ok(callbackFired);
810
+ srv.close();
811
+ done();
812
+ });
813
+ });
814
+ });
815
+
816
+ it('with text stream will send fragmented data', function(done) {
817
+ server.createServer(++port, function(srv) {
818
+ var ws = new WebSocket('ws://localhost:' + port);
819
+ var callbackFired = false;
820
+ ws.on('open', function() {
821
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
822
+ fileStream.setEncoding('utf8');
823
+ fileStream.bufferSize = 100;
824
+ ws.send(fileStream, {binary: false}, function(error) {
825
+ assert.equal(null, error);
826
+ callbackFired = true;
827
+ });
828
+ });
829
+ srv.on('message', function(data, flags) {
830
+ assert.ok(!flags.binary);
831
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
832
+ ws.terminate();
833
+ });
834
+ ws.on('close', function() {
835
+ assert.ok(callbackFired);
836
+ srv.close();
837
+ done();
838
+ });
839
+ });
840
+ });
841
+
842
+ it('will cause intermittent send to be delayed in order', function(done) {
843
+ server.createServer(++port, function(srv) {
844
+ var ws = new WebSocket('ws://localhost:' + port);
845
+ ws.on('open', function() {
846
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
847
+ fileStream.setEncoding('utf8');
848
+ fileStream.bufferSize = 100;
849
+ ws.send(fileStream);
850
+ ws.send('foobar');
851
+ ws.send('baz');
852
+ });
853
+ var receivedIndex = 0;
854
+ srv.on('message', function(data, flags) {
855
+ ++receivedIndex;
856
+ if (receivedIndex == 1) {
857
+ assert.ok(!flags.binary);
858
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
859
+ }
860
+ else if (receivedIndex == 2) {
861
+ assert.ok(!flags.binary);
862
+ assert.equal('foobar', data);
863
+ }
864
+ else {
865
+ assert.ok(!flags.binary);
866
+ assert.equal('baz', data);
867
+ srv.close();
868
+ ws.terminate();
869
+ done();
870
+ }
871
+ });
872
+ });
873
+ });
874
+
875
+ it('will cause intermittent stream to be delayed in order', function(done) {
876
+ server.createServer(++port, function(srv) {
877
+ var ws = new WebSocket('ws://localhost:' + port);
878
+ ws.on('open', function() {
879
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
880
+ fileStream.setEncoding('utf8');
881
+ fileStream.bufferSize = 100;
882
+ ws.send(fileStream);
883
+ var i = 0;
884
+ ws.stream(function(error, send) {
885
+ assert.ok(!error);
886
+ if (++i == 1) send('foo');
887
+ else send('bar', true);
888
+ });
889
+ });
890
+ var receivedIndex = 0;
891
+ srv.on('message', function(data, flags) {
892
+ ++receivedIndex;
893
+ if (receivedIndex == 1) {
894
+ assert.ok(!flags.binary);
895
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
896
+ }
897
+ else if (receivedIndex == 2) {
898
+ assert.ok(!flags.binary);
899
+ assert.equal('foobar', data);
900
+ srv.close();
901
+ ws.terminate();
902
+ done();
903
+ }
904
+ });
905
+ });
906
+ });
907
+
908
+ it('will cause intermittent ping to be delivered', function(done) {
909
+ server.createServer(++port, function(srv) {
910
+ var ws = new WebSocket('ws://localhost:' + port);
911
+ ws.on('open', function() {
912
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
913
+ fileStream.setEncoding('utf8');
914
+ fileStream.bufferSize = 100;
915
+ ws.send(fileStream);
916
+ ws.ping('foobar');
917
+ });
918
+ var receivedIndex = 0;
919
+ srv.on('message', function(data, flags) {
920
+ assert.ok(!flags.binary);
921
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
922
+ if (++receivedIndex == 2) {
923
+ srv.close();
924
+ ws.terminate();
925
+ done();
926
+ }
927
+ });
928
+ srv.on('ping', function(data) {
929
+ assert.equal('foobar', data);
930
+ if (++receivedIndex == 2) {
931
+ srv.close();
932
+ ws.terminate();
933
+ done();
934
+ }
935
+ });
936
+ });
937
+ });
938
+
939
+ it('will cause intermittent pong to be delivered', function(done) {
940
+ server.createServer(++port, function(srv) {
941
+ var ws = new WebSocket('ws://localhost:' + port);
942
+ ws.on('open', function() {
943
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
944
+ fileStream.setEncoding('utf8');
945
+ fileStream.bufferSize = 100;
946
+ ws.send(fileStream);
947
+ ws.pong('foobar');
948
+ });
949
+ var receivedIndex = 0;
950
+ srv.on('message', function(data, flags) {
951
+ assert.ok(!flags.binary);
952
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
953
+ if (++receivedIndex == 2) {
954
+ srv.close();
955
+ ws.terminate();
956
+ done();
957
+ }
958
+ });
959
+ srv.on('pong', function(data) {
960
+ assert.equal('foobar', data);
961
+ if (++receivedIndex == 2) {
962
+ srv.close();
963
+ ws.terminate();
964
+ done();
965
+ }
966
+ });
967
+ });
968
+ });
969
+
970
+ it('will cause intermittent close to be delivered', function(done) {
971
+ server.createServer(++port, function(srv) {
972
+ var ws = new WebSocket('ws://localhost:' + port);
973
+ ws.on('open', function() {
974
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
975
+ fileStream.setEncoding('utf8');
976
+ fileStream.bufferSize = 100;
977
+ ws.send(fileStream);
978
+ ws.close(1000, 'foobar');
979
+ });
980
+ ws.on('close', function() {
981
+ srv.close();
982
+ ws.terminate();
983
+ done();
984
+ });
985
+ ws.on('error', function() { /* That's quite alright -- a send was attempted after close */ });
986
+ srv.on('message', function(data, flags) {
987
+ assert.ok(!flags.binary);
988
+ assert.ok(areArraysEqual(fs.readFileSync('test/fixtures/textfile', 'utf8'), data));
989
+ });
990
+ srv.on('close', function(code, data) {
991
+ assert.equal(1000, code);
992
+ assert.equal('foobar', data);
993
+ });
994
+ });
995
+ });
996
+ });
997
+
998
+ describe('#stream', function() {
999
+ it('very long binary data can be streamed', function(done) {
1000
+ server.createServer(++port, function(srv) {
1001
+ var ws = new WebSocket('ws://localhost:' + port);
1002
+ var buffer = new Buffer(10 * 1024);
1003
+ for (var i = 0; i < buffer.length; ++i) buffer[i] = i % 0xff;
1004
+ ws.on('open', function() {
1005
+ var i = 0;
1006
+ var blockSize = 800;
1007
+ var bufLen = buffer.length;
1008
+ ws.stream({binary: true}, function(error, send) {
1009
+ assert.ok(!error);
1010
+ var start = i * blockSize;
1011
+ var toSend = Math.min(blockSize, bufLen - (i * blockSize));
1012
+ var end = start + toSend;
1013
+ var isFinal = toSend < blockSize;
1014
+ send(buffer.slice(start, end), isFinal);
1015
+ i += 1;
1016
+ });
1017
+ });
1018
+ srv.on('message', function(data, flags) {
1019
+ assert.ok(flags.binary);
1020
+ assert.ok(areArraysEqual(buffer, data));
1021
+ ws.terminate();
1022
+ srv.close();
1023
+ done();
1024
+ });
1025
+ });
1026
+ });
1027
+
1028
+ it('before connect should pass error through callback', function(done) {
1029
+ server.createServer(++port, function(srv) {
1030
+ var ws = new WebSocket('ws://localhost:' + port);
1031
+ ws.on('error', function() {});
1032
+ ws.stream(function(error) {
1033
+ assert.ok(error instanceof Error);
1034
+ ws.terminate();
1035
+ srv.close();
1036
+ done();
1037
+ });
1038
+ });
1039
+ });
1040
+
1041
+ it('without callback should fail', function(done) {
1042
+ server.createServer(++port, function(srv) {
1043
+ var ws = new WebSocket('ws://localhost:' + port);
1044
+ var payload = 'HelloWorld';
1045
+ ws.on('open', function() {
1046
+ try {
1047
+ ws.stream();
1048
+ }
1049
+ catch (e) {
1050
+ srv.close();
1051
+ ws.terminate();
1052
+ done();
1053
+ }
1054
+ });
1055
+ });
1056
+ });
1057
+
1058
+ it('will cause intermittent send to be delayed in order', function(done) {
1059
+ server.createServer(++port, function(srv) {
1060
+ var ws = new WebSocket('ws://localhost:' + port);
1061
+ var payload = 'HelloWorld';
1062
+ ws.on('open', function() {
1063
+ var i = 0;
1064
+ ws.stream(function(error, send) {
1065
+ assert.ok(!error);
1066
+ if (++i == 1) {
1067
+ send(payload.substr(0, 5));
1068
+ ws.send('foobar');
1069
+ ws.send('baz');
1070
+ }
1071
+ else {
1072
+ send(payload.substr(5, 5), true);
1073
+ }
1074
+ });
1075
+ });
1076
+ var receivedIndex = 0;
1077
+ srv.on('message', function(data, flags) {
1078
+ ++receivedIndex;
1079
+ if (receivedIndex == 1) {
1080
+ assert.ok(!flags.binary);
1081
+ assert.equal(payload, data);
1082
+ }
1083
+ else if (receivedIndex == 2) {
1084
+ assert.ok(!flags.binary);
1085
+ assert.equal('foobar', data);
1086
+ }
1087
+ else {
1088
+ assert.ok(!flags.binary);
1089
+ assert.equal('baz', data);
1090
+ srv.close();
1091
+ ws.terminate();
1092
+ done();
1093
+ }
1094
+ });
1095
+ });
1096
+ });
1097
+
1098
+ it('will cause intermittent stream to be delayed in order', function(done) {
1099
+ server.createServer(++port, function(srv) {
1100
+ var ws = new WebSocket('ws://localhost:' + port);
1101
+ var payload = 'HelloWorld';
1102
+ ws.on('open', function() {
1103
+ var i = 0;
1104
+ ws.stream(function(error, send) {
1105
+ assert.ok(!error);
1106
+ if (++i == 1) {
1107
+ send(payload.substr(0, 5));
1108
+ var i2 = 0;
1109
+ ws.stream(function(error, send) {
1110
+ assert.ok(!error);
1111
+ if (++i2 == 1) send('foo');
1112
+ else send('bar', true);
1113
+ });
1114
+ ws.send('baz');
1115
+ }
1116
+ else send(payload.substr(5, 5), true);
1117
+ });
1118
+ });
1119
+ var receivedIndex = 0;
1120
+ srv.on('message', function(data, flags) {
1121
+ ++receivedIndex;
1122
+ if (receivedIndex == 1) {
1123
+ assert.ok(!flags.binary);
1124
+ assert.equal(payload, data);
1125
+ }
1126
+ else if (receivedIndex == 2) {
1127
+ assert.ok(!flags.binary);
1128
+ assert.equal('foobar', data);
1129
+ }
1130
+ else if (receivedIndex == 3){
1131
+ assert.ok(!flags.binary);
1132
+ assert.equal('baz', data);
1133
+ setTimeout(function() {
1134
+ srv.close();
1135
+ ws.terminate();
1136
+ done();
1137
+ }, 1000);
1138
+ }
1139
+ else throw new Error('more messages than we actually sent just arrived');
1140
+ });
1141
+ });
1142
+ });
1143
+
1144
+ it('will cause intermittent ping to be delivered', function(done) {
1145
+ server.createServer(++port, function(srv) {
1146
+ var ws = new WebSocket('ws://localhost:' + port);
1147
+ var payload = 'HelloWorld';
1148
+ ws.on('open', function() {
1149
+ var i = 0;
1150
+ ws.stream(function(error, send) {
1151
+ assert.ok(!error);
1152
+ if (++i == 1) {
1153
+ send(payload.substr(0, 5));
1154
+ ws.ping('foobar');
1155
+ }
1156
+ else {
1157
+ send(payload.substr(5, 5), true);
1158
+ }
1159
+ });
1160
+ });
1161
+ var receivedIndex = 0;
1162
+ srv.on('message', function(data, flags) {
1163
+ assert.ok(!flags.binary);
1164
+ assert.equal(payload, data);
1165
+ if (++receivedIndex == 2) {
1166
+ srv.close();
1167
+ ws.terminate();
1168
+ done();
1169
+ }
1170
+ });
1171
+ srv.on('ping', function(data) {
1172
+ assert.equal('foobar', data);
1173
+ if (++receivedIndex == 2) {
1174
+ srv.close();
1175
+ ws.terminate();
1176
+ done();
1177
+ }
1178
+ });
1179
+ });
1180
+ });
1181
+
1182
+ it('will cause intermittent pong to be delivered', function(done) {
1183
+ server.createServer(++port, function(srv) {
1184
+ var ws = new WebSocket('ws://localhost:' + port);
1185
+ var payload = 'HelloWorld';
1186
+ ws.on('open', function() {
1187
+ var i = 0;
1188
+ ws.stream(function(error, send) {
1189
+ assert.ok(!error);
1190
+ if (++i == 1) {
1191
+ send(payload.substr(0, 5));
1192
+ ws.pong('foobar');
1193
+ }
1194
+ else {
1195
+ send(payload.substr(5, 5), true);
1196
+ }
1197
+ });
1198
+ });
1199
+ var receivedIndex = 0;
1200
+ srv.on('message', function(data, flags) {
1201
+ assert.ok(!flags.binary);
1202
+ assert.equal(payload, data);
1203
+ if (++receivedIndex == 2) {
1204
+ srv.close();
1205
+ ws.terminate();
1206
+ done();
1207
+ }
1208
+ });
1209
+ srv.on('pong', function(data) {
1210
+ assert.equal('foobar', data);
1211
+ if (++receivedIndex == 2) {
1212
+ srv.close();
1213
+ ws.terminate();
1214
+ done();
1215
+ }
1216
+ });
1217
+ });
1218
+ });
1219
+
1220
+ it('will cause intermittent close to be delivered', function(done) {
1221
+ server.createServer(++port, function(srv) {
1222
+ var ws = new WebSocket('ws://localhost:' + port);
1223
+ var payload = 'HelloWorld';
1224
+ var errorGiven = false;
1225
+ ws.on('open', function() {
1226
+ var i = 0;
1227
+ ws.stream(function(error, send) {
1228
+ if (++i == 1) {
1229
+ send(payload.substr(0, 5));
1230
+ ws.close(1000, 'foobar');
1231
+ }
1232
+ else if(i == 2) {
1233
+ send(payload.substr(5, 5), true);
1234
+ }
1235
+ else if (i == 3) {
1236
+ assert.ok(error);
1237
+ errorGiven = true;
1238
+ }
1239
+ });
1240
+ });
1241
+ ws.on('close', function() {
1242
+ assert.ok(errorGiven);
1243
+ srv.close();
1244
+ ws.terminate();
1245
+ done();
1246
+ });
1247
+ srv.on('message', function(data, flags) {
1248
+ assert.ok(!flags.binary);
1249
+ assert.equal(payload, data);
1250
+ });
1251
+ srv.on('close', function(code, data) {
1252
+ assert.equal(1000, code);
1253
+ assert.equal('foobar', data);
1254
+ });
1255
+ });
1256
+ });
1257
+ });
1258
+
1259
+ describe('#close', function() {
1260
+ it('will raise error callback, if any, if called during send stream', function(done) {
1261
+ server.createServer(++port, function(srv) {
1262
+ var ws = new WebSocket('ws://localhost:' + port);
1263
+ var errorGiven = false;
1264
+ ws.on('open', function() {
1265
+ var fileStream = fs.createReadStream('test/fixtures/textfile');
1266
+ fileStream.setEncoding('utf8');
1267
+ fileStream.bufferSize = 100;
1268
+ ws.send(fileStream, function(error) {
1269
+ errorGiven = error != null;
1270
+ });
1271
+ ws.close(1000, 'foobar');
1272
+ });
1273
+ ws.on('close', function() {
1274
+ setTimeout(function() {
1275
+ assert.ok(errorGiven);
1276
+ srv.close();
1277
+ ws.terminate();
1278
+ done();
1279
+ }, 1000);
1280
+ });
1281
+ });
1282
+ });
1283
+
1284
+ it('without invalid first argument throws exception', function(done) {
1285
+ server.createServer(++port, function(srv) {
1286
+ var ws = new WebSocket('ws://localhost:' + port);
1287
+ ws.on('open', function() {
1288
+ try {
1289
+ ws.close('error');
1290
+ }
1291
+ catch (e) {
1292
+ srv.close();
1293
+ ws.terminate();
1294
+ done();
1295
+ }
1296
+ });
1297
+ });
1298
+ });
1299
+
1300
+ it('without reserved error code 1004 throws exception', function(done) {
1301
+ server.createServer(++port, function(srv) {
1302
+ var ws = new WebSocket('ws://localhost:' + port);
1303
+ ws.on('open', function() {
1304
+ try {
1305
+ ws.close(1004);
1306
+ }
1307
+ catch (e) {
1308
+ srv.close();
1309
+ ws.terminate();
1310
+ done();
1311
+ }
1312
+ });
1313
+ });
1314
+ });
1315
+
1316
+ it('without message is successfully transmitted to the server', function(done) {
1317
+ server.createServer(++port, function(srv) {
1318
+ var ws = new WebSocket('ws://localhost:' + port);
1319
+ ws.on('open', function() {
1320
+ ws.close(1000);
1321
+ });
1322
+ srv.on('close', function(code, message, flags) {
1323
+ assert.equal('', message);
1324
+ srv.close();
1325
+ ws.terminate();
1326
+ done();
1327
+ });
1328
+ });
1329
+ });
1330
+
1331
+ it('with message is successfully transmitted to the server', function(done) {
1332
+ server.createServer(++port, function(srv) {
1333
+ var ws = new WebSocket('ws://localhost:' + port);
1334
+ ws.on('open', function() {
1335
+ ws.close(1000, 'some reason');
1336
+ });
1337
+ srv.on('close', function(code, message, flags) {
1338
+ assert.ok(flags.masked);
1339
+ assert.equal('some reason', message);
1340
+ srv.close();
1341
+ ws.terminate();
1342
+ done();
1343
+ });
1344
+ });
1345
+ });
1346
+
1347
+ it('with encoded message is successfully transmitted to the server', function(done) {
1348
+ server.createServer(++port, function(srv) {
1349
+ var ws = new WebSocket('ws://localhost:' + port);
1350
+ ws.on('open', function() {
1351
+ ws.close(1000, 'some reason', {mask: true});
1352
+ });
1353
+ srv.on('close', function(code, message, flags) {
1354
+ assert.ok(flags.masked);
1355
+ assert.equal('some reason', message);
1356
+ srv.close();
1357
+ ws.terminate();
1358
+ done();
1359
+ });
1360
+ });
1361
+ });
1362
+
1363
+ it('ends connection to the server', function(done) {
1364
+ server.createServer(++port, function(srv) {
1365
+ var ws = new WebSocket('ws://localhost:' + port);
1366
+ var connectedOnce = false;
1367
+ ws.on('open', function() {
1368
+ connectedOnce = true;
1369
+ ws.close(1000, 'some reason', {mask: true});
1370
+ });
1371
+ ws.on('close', function() {
1372
+ assert.ok(connectedOnce);
1373
+ srv.close();
1374
+ ws.terminate();
1375
+ done();
1376
+ });
1377
+ });
1378
+ });
1379
+ });
1380
+
1381
+ describe('W3C API emulation', function() {
1382
+ it('should not throw errors when getting and setting', function(done) {
1383
+ server.createServer(++port, function(srv) {
1384
+ var ws = new WebSocket('ws://localhost:' + port);
1385
+ var listener = function () {};
1386
+
1387
+ ws.onmessage = listener;
1388
+ ws.onerror = listener;
1389
+ ws.onclose = listener;
1390
+ ws.onopen = listener;
1391
+
1392
+ assert.ok(ws.onopen === listener);
1393
+ assert.ok(ws.onmessage === listener);
1394
+ assert.ok(ws.onclose === listener);
1395
+ assert.ok(ws.onerror === listener);
1396
+
1397
+ srv.close();
1398
+ ws.terminate();
1399
+ done();
1400
+ });
1401
+ });
1402
+
1403
+ it('should work the same as the EventEmitter api', function(done) {
1404
+ server.createServer(++port, function(srv) {
1405
+ var ws = new WebSocket('ws://localhost:' + port);
1406
+ var listener = function() {};
1407
+ var message = 0;
1408
+ var close = 0;
1409
+ var open = 0;
1410
+
1411
+ ws.onmessage = function(messageEvent) {
1412
+ assert.ok(!!messageEvent.data);
1413
+ ++message;
1414
+ ws.close();
1415
+ };
1416
+
1417
+ ws.onopen = function() {
1418
+ ++open;
1419
+ }
1420
+
1421
+ ws.onclose = function() {
1422
+ ++close;
1423
+ }
1424
+
1425
+ ws.on('open', function() {
1426
+ ws.send('foo');
1427
+ });
1428
+
1429
+ ws.on('close', function() {
1430
+ process.nextTick(function() {
1431
+ assert.ok(message === 1);
1432
+ assert.ok(open === 1);
1433
+ assert.ok(close === 1);
1434
+
1435
+ srv.close();
1436
+ ws.terminate();
1437
+ done();
1438
+ });
1439
+ });
1440
+ });
1441
+ });
1442
+
1443
+ it('should receive text data wrapped in a MessageEvent when using addEventListener', function(done) {
1444
+ server.createServer(++port, function(srv) {
1445
+ var ws = new WebSocket('ws://localhost:' + port);
1446
+ ws.addEventListener('open', function() {
1447
+ ws.send('hi');
1448
+ });
1449
+ ws.addEventListener('message', function(messageEvent) {
1450
+ assert.equal('hi', messageEvent.data);
1451
+ ws.terminate();
1452
+ srv.close();
1453
+ done();
1454
+ });
1455
+ });
1456
+ });
1457
+
1458
+ it('should receive valid CloseEvent when server closes with code 1000', function(done) {
1459
+ var wss = new WebSocketServer({port: ++port}, function() {
1460
+ var ws = new WebSocket('ws://localhost:' + port);
1461
+ ws.addEventListener('close', function(closeEvent) {
1462
+ assert.equal(true, closeEvent.wasClean);
1463
+ assert.equal(1000, closeEvent.code);
1464
+ ws.terminate();
1465
+ wss.close();
1466
+ done();
1467
+ });
1468
+ });
1469
+ wss.on('connection', function(client) {
1470
+ client.close(1000);
1471
+ });
1472
+ });
1473
+
1474
+ it('should receive valid CloseEvent when server closes with code 1001', function(done) {
1475
+ var wss = new WebSocketServer({port: ++port}, function() {
1476
+ var ws = new WebSocket('ws://localhost:' + port);
1477
+ ws.addEventListener('close', function(closeEvent) {
1478
+ assert.equal(false, closeEvent.wasClean);
1479
+ assert.equal(1001, closeEvent.code);
1480
+ assert.equal('some daft reason', closeEvent.reason);
1481
+ ws.terminate();
1482
+ wss.close();
1483
+ done();
1484
+ });
1485
+ });
1486
+ wss.on('connection', function(client) {
1487
+ client.close(1001, 'some daft reason');
1488
+ });
1489
+ });
1490
+
1491
+ it('should have target set on Events', function(done) {
1492
+ var wss = new WebSocketServer({port: ++port}, function() {
1493
+ var ws = new WebSocket('ws://localhost:' + port);
1494
+ ws.addEventListener('open', function(openEvent) {
1495
+ assert.equal(ws, openEvent.target);
1496
+ });
1497
+ ws.addEventListener('message', function(messageEvent) {
1498
+ assert.equal(ws, messageEvent.target);
1499
+ wss.close();
1500
+ });
1501
+ ws.addEventListener('close', function(closeEvent) {
1502
+ assert.equal(ws, closeEvent.target);
1503
+ ws.emit('error', new Error('forced'));
1504
+ });
1505
+ ws.addEventListener('error', function(errorEvent) {
1506
+ assert.equal(errorEvent.message, 'forced');
1507
+ assert.equal(ws, errorEvent.target);
1508
+ ws.terminate();
1509
+ done();
1510
+ });
1511
+ });
1512
+ wss.on('connection', function(client) {
1513
+ client.send('hi')
1514
+ });
1515
+ });
1516
+ });
1517
+
1518
+ describe('ssl', function() {
1519
+ it('can connect to secure websocket server', function(done) {
1520
+ var options = {
1521
+ key: fs.readFileSync('test/fixtures/key.pem'),
1522
+ cert: fs.readFileSync('test/fixtures/certificate.pem')
1523
+ };
1524
+ var app = https.createServer(options, function (req, res) {
1525
+ res.writeHead(200);
1526
+ res.end();
1527
+ });
1528
+ var wss = new WebSocketServer({server: app});
1529
+ app.listen(++port, function() {
1530
+ var ws = new WebSocket('wss://localhost:' + port);
1531
+ });
1532
+ wss.on('connection', function(ws) {
1533
+ app.close();
1534
+ ws.terminate();
1535
+ wss.close();
1536
+ done();
1537
+ });
1538
+ });
1539
+
1540
+ it('can connect to secure websocket server with client side certificate', function(done) {
1541
+ var options = {
1542
+ key: fs.readFileSync('test/fixtures/key.pem'),
1543
+ cert: fs.readFileSync('test/fixtures/certificate.pem'),
1544
+ ca: [fs.readFileSync('test/fixtures/ca1-cert.pem')],
1545
+ requestCert: true
1546
+ };
1547
+ var clientOptions = {
1548
+ key: fs.readFileSync('test/fixtures/agent1-key.pem'),
1549
+ cert: fs.readFileSync('test/fixtures/agent1-cert.pem')
1550
+ };
1551
+ var app = https.createServer(options, function (req, res) {
1552
+ res.writeHead(200);
1553
+ res.end();
1554
+ });
1555
+ var success = false;
1556
+ var wss = new WebSocketServer({
1557
+ server: app,
1558
+ verifyClient: function(info) {
1559
+ success = !!info.req.client.authorized;
1560
+ return true;
1561
+ }
1562
+ });
1563
+ app.listen(++port, function() {
1564
+ var ws = new WebSocket('wss://localhost:' + port, clientOptions);
1565
+ });
1566
+ wss.on('connection', function(ws) {
1567
+ app.close();
1568
+ ws.terminate();
1569
+ wss.close();
1570
+ success.should.be.ok;
1571
+ done();
1572
+ });
1573
+ });
1574
+
1575
+ it('cannot connect to secure websocket server via ws://', function(done) {
1576
+ var options = {
1577
+ key: fs.readFileSync('test/fixtures/key.pem'),
1578
+ cert: fs.readFileSync('test/fixtures/certificate.pem')
1579
+ };
1580
+ var app = https.createServer(options, function (req, res) {
1581
+ res.writeHead(200);
1582
+ res.end();
1583
+ });
1584
+ var wss = new WebSocketServer({server: app});
1585
+ app.listen(++port, function() {
1586
+ var ws = new WebSocket('ws://localhost:' + port, { rejectUnauthorized :false });
1587
+ ws.on('error', function() {
1588
+ app.close();
1589
+ ws.terminate();
1590
+ wss.close();
1591
+ done();
1592
+ });
1593
+ });
1594
+ });
1595
+
1596
+ it('can send and receive text data', function(done) {
1597
+ var options = {
1598
+ key: fs.readFileSync('test/fixtures/key.pem'),
1599
+ cert: fs.readFileSync('test/fixtures/certificate.pem')
1600
+ };
1601
+ var app = https.createServer(options, function (req, res) {
1602
+ res.writeHead(200);
1603
+ res.end();
1604
+ });
1605
+ var wss = new WebSocketServer({server: app});
1606
+ app.listen(++port, function() {
1607
+ var ws = new WebSocket('wss://localhost:' + port);
1608
+ ws.on('open', function() {
1609
+ ws.send('foobar');
1610
+ });
1611
+ });
1612
+ wss.on('connection', function(ws) {
1613
+ ws.on('message', function(message, flags) {
1614
+ message.should.eql('foobar');
1615
+ app.close();
1616
+ ws.terminate();
1617
+ wss.close();
1618
+ done();
1619
+ });
1620
+ });
1621
+ });
1622
+
1623
+ it('can send and receive very long binary data', function(done) {
1624
+ var options = {
1625
+ key: fs.readFileSync('test/fixtures/key.pem'),
1626
+ cert: fs.readFileSync('test/fixtures/certificate.pem')
1627
+ }
1628
+ var app = https.createServer(options, function (req, res) {
1629
+ res.writeHead(200);
1630
+ res.end();
1631
+ });
1632
+ crypto.randomBytes(5 * 1024 * 1024, function(ex, buf) {
1633
+ if (ex) throw ex;
1634
+ var wss = new WebSocketServer({server: app});
1635
+ app.listen(++port, function() {
1636
+ var ws = new WebSocket('wss://localhost:' + port);
1637
+ ws.on('open', function() {
1638
+ ws.send(buf, {binary: true});
1639
+ });
1640
+ ws.on('message', function(message, flags) {
1641
+ flags.binary.should.be.ok;
1642
+ areArraysEqual(buf, message).should.be.ok;
1643
+ app.close();
1644
+ ws.terminate();
1645
+ wss.close();
1646
+ done();
1647
+ });
1648
+ });
1649
+ wss.on('connection', function(ws) {
1650
+ ws.on('message', function(message, flags) {
1651
+ ws.send(message, {binary: true});
1652
+ });
1653
+ });
1654
+ });
1655
+ });
1656
+ });
1657
+
1658
+ describe('protocol support discovery', function() {
1659
+ describe('#supports', function() {
1660
+ describe('#binary', function() {
1661
+ it('returns true for hybi transport', function(done) {
1662
+ var wss = new WebSocketServer({port: ++port}, function() {
1663
+ var ws = new WebSocket('ws://localhost:' + port);
1664
+ });
1665
+ wss.on('connection', function(client) {
1666
+ assert.equal(true, client.supports.binary);
1667
+ wss.close();
1668
+ done();
1669
+ });
1670
+ });
1671
+
1672
+ it('returns false for hixie transport', function(done) {
1673
+ var wss = new WebSocketServer({port: ++port}, function() {
1674
+ var options = {
1675
+ port: port,
1676
+ host: '127.0.0.1',
1677
+ headers: {
1678
+ 'Connection': 'Upgrade',
1679
+ 'Upgrade': 'WebSocket',
1680
+ 'Sec-WebSocket-Key1': '3e6b263 4 17 80',
1681
+ 'Sec-WebSocket-Key2': '17 9 G`ZD9 2 2b 7X 3 /r90'
1682
+ }
1683
+ };
1684
+ var req = http.request(options);
1685
+ req.write('WjN}|M(6');
1686
+ req.end();
1687
+ });
1688
+ wss.on('connection', function(client) {
1689
+ assert.equal(false, client.supports.binary);
1690
+ wss.close();
1691
+ done();
1692
+ });
1693
+ });
1694
+ });
1695
+ });
1696
+ });
1697
+
1698
+ describe('host and origin headers', function() {
1699
+ it('includes the host header with port number', function(done) {
1700
+ var srv = http.createServer();
1701
+ srv.listen(++port, function(){
1702
+ srv.on('upgrade', function(req, socket, upgradeHeade) {
1703
+ assert.equal('localhost:' + port, req.headers['host']);
1704
+ srv.close();
1705
+ done();
1706
+ });
1707
+ var ws = new WebSocket('ws://localhost:' + port);
1708
+ });
1709
+ });
1710
+
1711
+ it('includes the origin header with port number', function(done) {
1712
+ var srv = http.createServer();
1713
+ srv.listen(++port, function() {
1714
+ srv.on('upgrade', function(req, socket, upgradeHeade) {
1715
+ assert.equal('localhost:' + port, req.headers['origin']);
1716
+ srv.close();
1717
+ done();
1718
+ });
1719
+ var ws = new WebSocket('ws://localhost:' + port);
1720
+ });
1721
+ });
1722
+ });
1723
+
1724
+ });