sproutit-narwhal 0.1.106

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. data/DISTRIBUTION.yml +15 -0
  2. data/README.md +86 -0
  3. data/Rakefile +349 -0
  4. data/VERSION.yml +7 -0
  5. data/bin/activate +50 -0
  6. data/bin/activate.bash +50 -0
  7. data/bin/activate.cmd +3 -0
  8. data/bin/js +67 -0
  9. data/bin/json +2 -0
  10. data/bin/narwhal +67 -0
  11. data/bin/narwhal.cmd +29 -0
  12. data/bin/sea +45 -0
  13. data/bin/sea.cmd +25 -0
  14. data/bin/tusk +2 -0
  15. data/bin/tusk.cmd +5 -0
  16. data/catalog.json +902 -0
  17. data/docs/available-packages.md +32 -0
  18. data/docs/browser-api-plan.md +290 -0
  19. data/docs/browser-api.md +153 -0
  20. data/docs/download.md +25 -0
  21. data/docs/engines.md +32 -0
  22. data/docs/json-tool.md +121 -0
  23. data/docs/lib/binary.wiki +242 -0
  24. data/docs/lib/file.wiki +325 -0
  25. data/docs/lib/os/popen.md +70 -0
  26. data/docs/modules.md +38 -0
  27. data/docs/narwhal.md +487 -0
  28. data/docs/packages-howto.md +32 -0
  29. data/docs/packages.md +30 -0
  30. data/docs/posts/2009-07-29-hello-0.1.md +19 -0
  31. data/docs/quick-start.md +69 -0
  32. data/docs/sea.md +49 -0
  33. data/engines/browser/lib/binary.js +2 -0
  34. data/engines/browser/lib/reactor.js +21 -0
  35. data/engines/browser/lib/system.js +3 -0
  36. data/engines/default/lib/array.js +164 -0
  37. data/engines/default/lib/binary-engine.js +53 -0
  38. data/engines/default/lib/binary.js +755 -0
  39. data/engines/default/lib/date.js +8 -0
  40. data/engines/default/lib/file-engine.js +119 -0
  41. data/engines/default/lib/function.js +119 -0
  42. data/engines/default/lib/global.js +11 -0
  43. data/engines/default/lib/io-engine.js +26 -0
  44. data/engines/default/lib/json.js +488 -0
  45. data/engines/default/lib/object.js +69 -0
  46. data/engines/default/lib/os-engine.js +3 -0
  47. data/engines/default/lib/reactor.js +12 -0
  48. data/engines/default/lib/string.js +84 -0
  49. data/engines/default/lib/system.js +20 -0
  50. data/engines/default/lib/worker.js +133 -0
  51. data/engines/jsc/README.md +18 -0
  52. data/engines/jsc/bootstrap.js +53 -0
  53. data/engines/jsc/deps/http-parser/LICENSE +77 -0
  54. data/engines/jsc/deps/http-parser/README.md +145 -0
  55. data/engines/jsc/deps/http-parser/http_parser.c +6087 -0
  56. data/engines/jsc/deps/http-parser/http_parser.h +141 -0
  57. data/engines/jsc/deps/http-parser/http_parser.rl +500 -0
  58. data/engines/jsc/deps/http-parser/test.c +858 -0
  59. data/engines/jsc/include/binary-engine.h +11 -0
  60. data/engines/jsc/include/io-engine.h +23 -0
  61. data/engines/jsc/include/narwhal.h +427 -0
  62. data/engines/jsc/lib/file-engine.js +31 -0
  63. data/engines/jsc/lib/http.js +1 -0
  64. data/engines/jsc/lib/io-engine.js +202 -0
  65. data/engines/jsc/lib/os-engine.js +25 -0
  66. data/engines/jsc/lib/system.js +18 -0
  67. data/engines/jsc/lib/zip.js +1 -0
  68. data/engines/jsc/narwhal-jsc.c +273 -0
  69. data/engines/jsc/narwhal.c +29 -0
  70. data/engines/jsc/package.json +8 -0
  71. data/engines/jsc/src/binary-engine.cc +290 -0
  72. data/engines/jsc/src/file-engine.cc +405 -0
  73. data/engines/jsc/src/io-engine.cc +423 -0
  74. data/engines/jsc/src/jack/handler/jill.cc +710 -0
  75. data/engines/jsc/src/os-engine.cc +210 -0
  76. data/engines/rhino/bin/narwhal-rhino +68 -0
  77. data/engines/rhino/bin/narwhal-rhino.cmd +34 -0
  78. data/engines/rhino/bootstrap.js +119 -0
  79. data/engines/rhino/jars/jline.jar +0 -0
  80. data/engines/rhino/jars/jna.jar +0 -0
  81. data/engines/rhino/jars/js.jar +0 -0
  82. data/engines/rhino/lib/binary-engine.js +83 -0
  83. data/engines/rhino/lib/concurrency.js +6 -0
  84. data/engines/rhino/lib/event-queue.js +18 -0
  85. data/engines/rhino/lib/file-engine.js +216 -0
  86. data/engines/rhino/lib/http-client-engine.js +90 -0
  87. data/engines/rhino/lib/http-engine.js +10 -0
  88. data/engines/rhino/lib/io-engine.js +347 -0
  89. data/engines/rhino/lib/md5-engine.js +40 -0
  90. data/engines/rhino/lib/os-engine.js +150 -0
  91. data/engines/rhino/lib/packages-engine.js +71 -0
  92. data/engines/rhino/lib/sandbox-engine.js +70 -0
  93. data/engines/rhino/lib/system.js +38 -0
  94. data/engines/rhino/lib/worker-engine.js +23 -0
  95. data/engines/rhino/lib/zip.js +78 -0
  96. data/engines/rhino/package.json +4 -0
  97. data/engines/secure/lib/file.js +6 -0
  98. data/engines/secure/lib/system.js +6 -0
  99. data/engines/template/bin/narwhal-engine-name +32 -0
  100. data/engines/template/bootstrap.js +40 -0
  101. data/engines/template/lib/file-engine.js +118 -0
  102. data/engines/template/lib/system.js +17 -0
  103. data/examples/browser-deployment-jackconfig.js +35 -0
  104. data/examples/fibonacci-worker.js +35 -0
  105. data/examples/fibonacci.js +19 -0
  106. data/examples/hello +2 -0
  107. data/examples/narwhal +3 -0
  108. data/examples/not-quite-a-quine.js +1 -0
  109. data/extconf.rb +44 -0
  110. data/gem_bin/narwhal +5 -0
  111. data/gem_bin/sea +4 -0
  112. data/gem_bin/tusk +4 -0
  113. data/lib/args.js +849 -0
  114. data/lib/base16.js +16 -0
  115. data/lib/base64.js +120 -0
  116. data/lib/codec/base64.js +8 -0
  117. data/lib/crc32.js +60 -0
  118. data/lib/file-bootstrap.js +187 -0
  119. data/lib/file.js +659 -0
  120. data/lib/hash.js +28 -0
  121. data/lib/hashp.js +65 -0
  122. data/lib/html.js +16 -0
  123. data/lib/http-client.js +134 -0
  124. data/lib/http.js +17 -0
  125. data/lib/io.js +98 -0
  126. data/lib/jsmin.js +315 -0
  127. data/lib/jsonpath.js +89 -0
  128. data/lib/logger.js +55 -0
  129. data/lib/md4.js +146 -0
  130. data/lib/md5.js +164 -0
  131. data/lib/mime.js +166 -0
  132. data/lib/narwhal.js +102 -0
  133. data/lib/narwhal/client.js +261 -0
  134. data/lib/narwhal/compile.js +99 -0
  135. data/lib/narwhal/env.js +140 -0
  136. data/lib/narwhal/inline.js +106 -0
  137. data/lib/narwhal/json.js +324 -0
  138. data/lib/narwhal/json.md +178 -0
  139. data/lib/narwhal/repl.js +96 -0
  140. data/lib/narwhal/server-test.js +6 -0
  141. data/lib/narwhal/server.js +270 -0
  142. data/lib/narwhal/tusk.js +170 -0
  143. data/lib/narwhal/tusk/bin.js +13 -0
  144. data/lib/narwhal/tusk/bundle.js +0 -0
  145. data/lib/narwhal/tusk/catalog.js +22 -0
  146. data/lib/narwhal/tusk/clone.js +66 -0
  147. data/lib/narwhal/tusk/consolidate.js +25 -0
  148. data/lib/narwhal/tusk/create-catalog.js +80 -0
  149. data/lib/narwhal/tusk/engine.js +42 -0
  150. data/lib/narwhal/tusk/freeze.js +0 -0
  151. data/lib/narwhal/tusk/init.js +56 -0
  152. data/lib/narwhal/tusk/install.js +288 -0
  153. data/lib/narwhal/tusk/list.js +20 -0
  154. data/lib/narwhal/tusk/orphans.js +0 -0
  155. data/lib/narwhal/tusk/reheat.js +15 -0
  156. data/lib/narwhal/tusk/remove.js +15 -0
  157. data/lib/narwhal/tusk/search.js +145 -0
  158. data/lib/narwhal/tusk/update.js +21 -0
  159. data/lib/narwhal/tusk/upgrade.js +0 -0
  160. data/lib/os.js +33 -0
  161. data/lib/packages.js +423 -0
  162. data/lib/printf.js +169 -0
  163. data/lib/promise.js +352 -0
  164. data/lib/querystring.js +176 -0
  165. data/lib/ref-send.js +257 -0
  166. data/lib/regexp.js +12 -0
  167. data/lib/sandbox.js +422 -0
  168. data/lib/sha.js +112 -0
  169. data/lib/sha256.js +102 -0
  170. data/lib/struct.js +228 -0
  171. data/lib/term.js +179 -0
  172. data/lib/test/assert.js +95 -0
  173. data/lib/test/equiv.js +188 -0
  174. data/lib/test/jsdump.js +165 -0
  175. data/lib/test/runner.js +129 -0
  176. data/lib/unload.js +13 -0
  177. data/lib/uri.js +378 -0
  178. data/lib/url.js +5 -0
  179. data/lib/utf8.js +64 -0
  180. data/lib/util.js +985 -0
  181. data/lib/uuid.js +89 -0
  182. data/lib/xregexp.js +521 -0
  183. data/local.json.template +1 -0
  184. data/narwhal.gemspec +105 -0
  185. data/narwhal.js +213 -0
  186. data/package.json +26 -0
  187. data/packages/readline/engines/default/lib/readline.js +4 -0
  188. data/packages/readline/engines/rhino/lib/readline.js +6 -0
  189. data/packages/readline/package.json +5 -0
  190. data/sources.json +207 -0
  191. data/tests/all-tests.js +17 -0
  192. data/tests/args.js +31 -0
  193. data/tests/args/domain.js +215 -0
  194. data/tests/args/options.js +36 -0
  195. data/tests/args/shifting.js +92 -0
  196. data/tests/args/validation.js +31 -0
  197. data/tests/base64.js +23 -0
  198. data/tests/commonjs.js +3 -0
  199. data/tests/commonjs/all-tests.js +12 -0
  200. data/tests/commonjs/bytearray-encodings-tests.js +69 -0
  201. data/tests/commonjs/bytearray-tests.js +465 -0
  202. data/tests/commonjs/bytestring-encodings-tests.js +89 -0
  203. data/tests/commonjs/bytestring-tests.js +263 -0
  204. data/tests/commonjs/es5/all-tests.js +3 -0
  205. data/tests/commonjs/es5/bind.js +29 -0
  206. data/tests/commonjs/file-tests.js +315 -0
  207. data/tests/commonjs/file/dirname.js +31 -0
  208. data/tests/commonjs/file/extension.js +45 -0
  209. data/tests/commonjs/file/is-absolute.js +11 -0
  210. data/tests/commonjs/file/iterator.js +101 -0
  211. data/tests/commonjs/file/normal.js +27 -0
  212. data/tests/commonjs/file/path.js +17 -0
  213. data/tests/commonjs/file/relative.js +42 -0
  214. data/tests/commonjs/file/resolve.js +44 -0
  215. data/tests/commonjs/module-tests.js +9 -0
  216. data/tests/commonjs/modules/absolute/b.js +1 -0
  217. data/tests/commonjs/modules/absolute/program.js +5 -0
  218. data/tests/commonjs/modules/absolute/submodule/a.js +3 -0
  219. data/tests/commonjs/modules/absolute/test.js +9 -0
  220. data/tests/commonjs/modules/all-tests.js +47 -0
  221. data/tests/commonjs/modules/config.js +11 -0
  222. data/tests/commonjs/modules/cyclic/a.js +4 -0
  223. data/tests/commonjs/modules/cyclic/b.js +4 -0
  224. data/tests/commonjs/modules/cyclic/program.js +10 -0
  225. data/tests/commonjs/modules/cyclic/test.js +9 -0
  226. data/tests/commonjs/modules/determinism/program.js +3 -0
  227. data/tests/commonjs/modules/determinism/submodule/a.js +8 -0
  228. data/tests/commonjs/modules/determinism/submodule/b.js +2 -0
  229. data/tests/commonjs/modules/determinism/test.js +9 -0
  230. data/tests/commonjs/modules/exactExports/a.js +3 -0
  231. data/tests/commonjs/modules/exactExports/program.js +4 -0
  232. data/tests/commonjs/modules/exactExports/test.js +9 -0
  233. data/tests/commonjs/modules/hasOwnProperty/hasOwnProperty.js +0 -0
  234. data/tests/commonjs/modules/hasOwnProperty/program.js +3 -0
  235. data/tests/commonjs/modules/hasOwnProperty/test.js +9 -0
  236. data/tests/commonjs/modules/hasOwnProperty/toString.js +0 -0
  237. data/tests/commonjs/modules/method/a.js +12 -0
  238. data/tests/commonjs/modules/method/program.js +8 -0
  239. data/tests/commonjs/modules/method/test.js +9 -0
  240. data/tests/commonjs/modules/missing/program.js +8 -0
  241. data/tests/commonjs/modules/missing/test.js +9 -0
  242. data/tests/commonjs/modules/monkeys/a.js +1 -0
  243. data/tests/commonjs/modules/monkeys/program.js +4 -0
  244. data/tests/commonjs/modules/monkeys/test.js +9 -0
  245. data/tests/commonjs/modules/nested/a/b/c/d.js +3 -0
  246. data/tests/commonjs/modules/nested/program.js +3 -0
  247. data/tests/commonjs/modules/nested/test.js +9 -0
  248. data/tests/commonjs/modules/relative/program.js +5 -0
  249. data/tests/commonjs/modules/relative/submodule/a.js +1 -0
  250. data/tests/commonjs/modules/relative/submodule/b.js +2 -0
  251. data/tests/commonjs/modules/relative/test.js +9 -0
  252. data/tests/commonjs/modules/transitive/a.js +1 -0
  253. data/tests/commonjs/modules/transitive/b.js +1 -0
  254. data/tests/commonjs/modules/transitive/c.js +3 -0
  255. data/tests/commonjs/modules/transitive/program.js +3 -0
  256. data/tests/commonjs/modules/transitive/test.js +9 -0
  257. data/tests/file/all-tests.js +61 -0
  258. data/tests/file/fnmatch.js +102 -0
  259. data/tests/file/glob.js +466 -0
  260. data/tests/file/match.js +102 -0
  261. data/tests/global.js +6 -0
  262. data/tests/global/array.js +19 -0
  263. data/tests/hashes.js +94 -0
  264. data/tests/html.js +13 -0
  265. data/tests/io/stringio.js +21 -0
  266. data/tests/os/all-tests.js +4 -0
  267. data/tests/os/popen.js +41 -0
  268. data/tests/os/system.js +22 -0
  269. data/tests/printf.js +123 -0
  270. data/tests/query-string.js +87 -0
  271. data/tests/sandbox/byte-io.js +20 -0
  272. data/tests/sandbox/fileName.js +3 -0
  273. data/tests/sandbox/foo.js +0 -0
  274. data/tests/sandbox/reload.js +79 -0
  275. data/tests/string.js +35 -0
  276. data/tests/uri.js +41 -0
  277. data/tests/util/all-tests.js +79 -0
  278. data/tests/util/array.js +207 -0
  279. data/tests/util/array/is-arguments.js +29 -0
  280. data/tests/util/array/is-array-like.js +29 -0
  281. data/tests/util/case.js +9 -0
  282. data/tests/util/collection.js +104 -0
  283. data/tests/util/eq.js +57 -0
  284. data/tests/util/expand.js +45 -0
  285. data/tests/util/object.js +125 -0
  286. data/tests/util/operator.js +25 -0
  287. data/tests/util/range.js +19 -0
  288. data/tests/util/repr.js +26 -0
  289. data/tests/util/string.js +34 -0
  290. data/tests/util/unique.js +12 -0
  291. metadata +434 -0
data/tests/commonjs.js ADDED
@@ -0,0 +1,3 @@
1
+ exports.testCommonjs = require("./commonjs/all-tests");
2
+ if (require.main == module.id)
3
+ require("os").exit(require("test/runner").run(exports));
@@ -0,0 +1,12 @@
1
+ exports.testModules = require("./modules/all-tests");
2
+ exports.testModulesUTF8 = require("./module-tests");
3
+ exports.testByteArray = require("./bytearray-tests");
4
+ exports.testByteString = require("./bytestring-tests");
5
+ exports.testByteArrayEncodings = require("./bytearray-encodings-tests");
6
+ exports.testByteStringEncodings = require("./bytestring-encodings-tests");
7
+ exports.testFile = require("./file-tests");
8
+
9
+ exports.testEs5 = require("./es5/all-tests");
10
+
11
+ if (require.main === module.id)
12
+ require("os").exit(require("test/runner").run(exports));
@@ -0,0 +1,69 @@
1
+ var assert = require("test/assert");
2
+
3
+ var Binary = require("binary").Binary,
4
+ ByteString = require("binary").ByteString,
5
+ ByteArray = require("binary").ByteArray;
6
+
7
+ exports.testByteArrayConstructorEncodings = function() {
8
+ // ByteString(string, charset)
9
+ // Convert a string. The ByteString will contain string encoded with charset.
10
+ var testString = "hello world";
11
+ var b = new ByteArray(testString, "US-ASCII");
12
+ assert.isEqual(testString.length, b.length);
13
+ b.length = 678;
14
+ assert.isEqual(678, b.length);
15
+ assert.isEqual(testString.charCodeAt(0), b.get(0));
16
+ assert.isEqual(testString.charCodeAt(testString.length-1), b.get(testString.length-1));
17
+ assert.isEqual(0, b.get(677));
18
+ };
19
+
20
+ exports.testToByteArrayEncodings = function() {
21
+ var testString = "I ♥ JS";
22
+ assert.isEqual(testString, new ByteArray(testString, "UTF-8").toByteArray("UTF-8", "UTF-16").decodeToString("UTF-16"));
23
+ };
24
+
25
+ exports.testToByteStringEncodings = function() {
26
+ var testString = "I ♥ JS";
27
+ assert.isEqual(testString, new ByteArray(testString, "UTF-8").toByteString("UTF-8", "UTF-16").decodeToString("UTF-16"));
28
+ };
29
+
30
+ exports.testToArrayEncodings = function() {
31
+ var a1;
32
+
33
+ a1 = new ByteArray("\u0024\u00A2\u20AC", "UTF-8").toArray("UTF-8");
34
+ assert.isEqual(3, a1.length);
35
+ assert.isEqual(0x24, a1[0]);
36
+ assert.isEqual(0xA2, a1[1]);
37
+ assert.isEqual(0x20AC, a1[2]);
38
+
39
+ a1 = new ByteArray("\u0024\u00A2\u20AC", "UTF-16").toArray("UTF-16");
40
+ assert.isEqual(3, a1.length);
41
+ assert.isEqual(0x24, a1[0]);
42
+ assert.isEqual(0xA2, a1[1]);
43
+ assert.isEqual(0x20AC, a1[2]);
44
+ };
45
+
46
+ exports.testDecodeToString = function() {
47
+ assert.isEqual("hello world", new ByteArray("hello world", "US-ASCII").decodeToString("US-ASCII"));
48
+
49
+ assert.isEqual("I ♥ JS", new ByteArray("I ♥ JS", "UTF-8").decodeToString("UTF-8"));
50
+
51
+ assert.isEqual("\u0024", new ByteArray([0x24]).decodeToString("UTF-8"));
52
+ assert.isEqual("\u00A2", new ByteArray([0xC2,0xA2]).decodeToString("UTF-8"));
53
+ assert.isEqual("\u20AC", new ByteArray([0xE2,0x82,0xAC]).decodeToString("UTF-8"));
54
+ // FIXME:
55
+ //assert.isEqual("\u10ABCD", (new ByteArray([0xF4,0x8A,0xAF,0x8D])).decodeToString("UTF-8"));
56
+
57
+ assert.isEqual("\u0024", new ByteArray("\u0024", "UTF-8").decodeToString("UTF-8"));
58
+ assert.isEqual("\u00A2", new ByteArray("\u00A2", "UTF-8").decodeToString("UTF-8"));
59
+ assert.isEqual("\u20AC", new ByteArray("\u20AC", "UTF-8").decodeToString("UTF-8"));
60
+ assert.isEqual("\u10ABCD", new ByteArray("\u10ABCD", "UTF-8").decodeToString("UTF-8"));
61
+
62
+ assert.isEqual("\u0024", new ByteArray("\u0024", "UTF-16").decodeToString("UTF-16"));
63
+ assert.isEqual("\u00A2", new ByteArray("\u00A2", "UTF-16").decodeToString("UTF-16"));
64
+ assert.isEqual("\u20AC", new ByteArray("\u20AC", "UTF-16").decodeToString("UTF-16"));
65
+ assert.isEqual("\u10ABCD", new ByteArray("\u10ABCD", "UTF-16").decodeToString("UTF-16"));
66
+ };
67
+
68
+ if (require.main === module.id)
69
+ require("os").exit(require("test/runner").run(exports));
@@ -0,0 +1,465 @@
1
+ var assert = require("test/assert");
2
+
3
+ var Binary = require("binary").Binary,
4
+ ByteString = require("binary").ByteString,
5
+ ByteArray = require("binary").ByteArray;
6
+
7
+ exports.testByteArrayConstructor = function() {
8
+ var testArray = [1,2,3,4],
9
+ b;
10
+
11
+ // ByteArray()
12
+ // New, empty ByteArray.
13
+ b = new ByteArray();
14
+ //assert.isTrue(b instanceof Binary, "not instanceof Binary");
15
+ assert.isTrue(b instanceof ByteArray, "not instanceof ByteArray");
16
+ assert.isEqual(0, b.length);
17
+ b.length = 123;
18
+ assert.isEqual(123, b.length);
19
+ assert.isEqual(0, b.get(4));
20
+
21
+ // ByteArray(length)
22
+ // New ByteArray filled with length zero bytes.
23
+ b = new ByteArray(10);
24
+ assert.isEqual(10, b.length);
25
+ for (var i = 0; i < 10; i++)
26
+ assert.isEqual(0, b.get(i));
27
+ assert.isNaN(b.get(10));
28
+ b.length = 234;
29
+ assert.isEqual(234, b.length);
30
+ assert.isEqual(0, b.get(10));
31
+ assert.isEqual(0, b.get(233));
32
+ assert.isNaN(b.get(234));
33
+
34
+ // ByteArray(byteString)
35
+ // Copy contents of byteString.
36
+ b = new ByteArray(new ByteString(testArray));
37
+ assert.isEqual(testArray.length, b.length);
38
+ b.length = 345;
39
+ assert.isEqual(345, b.length);
40
+ assert.isEqual(1, b.get(0));
41
+ assert.isEqual(4, b.get(3));
42
+ assert.isEqual(0, b.get(4));
43
+
44
+ // ByteArray(byteArray)
45
+ // Copy byteArray.
46
+ b = new ByteArray(new ByteArray(testArray));
47
+ assert.isEqual(testArray.length, b.length);
48
+ b.length = 456;
49
+ assert.isEqual(456, b.length);
50
+ assert.isEqual(1, b.get(0));
51
+ assert.isEqual(4, b.get(3));
52
+ assert.isEqual(0, b.get(4));
53
+
54
+ // ByteArray(arrayOfBytes)
55
+ // Use numbers in arrayOfBytes as contents.
56
+ // Throws an exception if any element is outside the range 0...255 (TODO).
57
+ b = new ByteArray(testArray);
58
+ assert.isEqual(testArray.length, b.length);
59
+ b.length = 567;
60
+ assert.isEqual(567, b.length);
61
+ assert.isEqual(1, b.get(0));
62
+ assert.isEqual(4, b.get(3));
63
+ assert.isEqual(0, b.get(4));
64
+ };
65
+
66
+ exports.testByteArrayResizing = function() {
67
+ var b1 = new ByteArray([0,1,2,3,4,5,6]);
68
+ assert.isEqual(7, b1.length);
69
+ assert.isNaN(b1.get(7));
70
+
71
+ b1.length = 10;
72
+ assert.isEqual(10, b1.length, "Length should change to 10");
73
+ assert.isEqual(5, b1.get(5));
74
+ assert.isEqual(0, b1.get(7));
75
+
76
+ b1.length = 3;
77
+ assert.isEqual(3, b1.length, "Length should change to 10");
78
+ assert.isEqual(0, b1.get(0));
79
+ assert.isNaN(b1.get(4));
80
+
81
+ b1.length = 9;
82
+ assert.isEqual(9, b1.length, "Length should change to 9");
83
+ assert.isEqual(0, b1.get(0));
84
+ assert.isEqual(0, b1.get(4));
85
+ };
86
+
87
+ exports.testToByteArray = function() {
88
+ var b1 = new ByteArray([1,2,3]),
89
+ b2 = b1.toByteArray();
90
+
91
+ assert.isTrue(b2 instanceof ByteArray, "not instanceof ByteArray");
92
+ assert.isEqual(b1.length, b2.length);
93
+ assert.isEqual(b1.get(0), b2.get(0));
94
+ assert.isEqual(b1.get(2), b2.get(2));
95
+
96
+ assert.isEqual(1, b1.get(0));
97
+ assert.isEqual(1, b2.get(0));
98
+
99
+ b1.set(0, 10);
100
+
101
+ assert.isEqual(10, b1.get(0));
102
+ assert.isEqual(1, b2.get(0));
103
+ };
104
+
105
+ exports.testToByteString = function() {
106
+ var b1 = new ByteArray([1,2,3]),
107
+ b2 = b1.toByteString();
108
+
109
+ assert.isEqual(b1.length, b2.length);
110
+ assert.isEqual(b1.get(0), b2.get(0));
111
+ assert.isEqual(b1.get(2), b2.get(2));
112
+
113
+ assert.isEqual(1, b1.get(0));
114
+ assert.isEqual(1, b2.get(0));
115
+
116
+ b1.set(0, 10);
117
+
118
+ assert.isEqual(10, b1.get(0));
119
+ assert.isEqual(1, b2.get(0));
120
+ };
121
+
122
+ exports.testToArray = function() {
123
+ var testArray = [0,1,254,255],
124
+ b1 = new ByteArray(testArray),
125
+ a1 = b1.toArray();
126
+
127
+ assert.isEqual(testArray.length, a1.length);
128
+ for (var i = 0; i < testArray.length; i++)
129
+ assert.isEqual(testArray[i], a1[i]);
130
+ };
131
+
132
+ exports.testToString = function() {
133
+ // the format of the resulting string isn't specified, but it shouldn't be the decoded string
134
+ // TODO: is this an ok test?
135
+
136
+ var testString = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
137
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
138
+ testArray = [];
139
+ for (var i = 0; i < 128; i++) testArray.push(65);
140
+
141
+ var resultString = new ByteArray(testArray).toString();
142
+
143
+ assert.isTrue(resultString.length < 100);
144
+ assert.isTrue(resultString !== testString);
145
+ };
146
+
147
+ exports.testIndexOf = function() {
148
+ var b1 = new ByteArray([0,1,2,3,4,5,0,1,2,3,4,5]);
149
+
150
+ assert.isEqual(-1, b1.indexOf(-1));
151
+
152
+ assert.isEqual(0, b1.indexOf(0));
153
+ assert.isEqual(5, b1.indexOf(5));
154
+ assert.isEqual(-1, b1.indexOf(12));
155
+
156
+ assert.isEqual(6, b1.indexOf(0, 6));
157
+ assert.isEqual(11, b1.indexOf(5, 6));
158
+ assert.isEqual(-1, b1.indexOf(12, 6));
159
+
160
+ assert.isEqual(0, b1.indexOf(0, 0, 3));
161
+ assert.isEqual(-1, b1.indexOf(5, 0, 3));
162
+ assert.isEqual(-1, b1.indexOf(12, 0, 3));
163
+ };
164
+
165
+ exports.testLastIndexOf = function() {
166
+ var b1 = new ByteArray([0,1,2,3,4,5,0,1,2,3,4,5]);
167
+
168
+ assert.isEqual(-1, b1.lastIndexOf(-1));
169
+
170
+ assert.isEqual(6, b1.lastIndexOf(0));
171
+ assert.isEqual(11, b1.lastIndexOf(5));
172
+ assert.isEqual(-1, b1.lastIndexOf(12));
173
+
174
+ assert.isEqual(0, b1.lastIndexOf(0, 0, 6));
175
+ assert.isEqual(5, b1.lastIndexOf(5, 0, 6));
176
+ assert.isEqual(-1, b1.lastIndexOf(12, 0, 6));
177
+
178
+ assert.isEqual(6, b1.lastIndexOf(0, 6, 9));
179
+ assert.isEqual(-1, b1.lastIndexOf(5, 6, 9));
180
+ assert.isEqual(-1, b1.lastIndexOf(12, 6, 9));
181
+ };
182
+
183
+ exports.testByteArrayReverse = function() {
184
+ var testArray = [0,1,2,3,4,5,6];
185
+
186
+ var b1 = new ByteArray(testArray),
187
+ b2 = b1.reverse();
188
+
189
+ assert.isEqual(b1, b2);
190
+ assert.isEqual(b1.length, b2.length);
191
+ for (var i = 0; i < testArray.length; i++)
192
+ assert.isEqual(testArray[i], b2.get(testArray.length-i-1));
193
+
194
+ testArray = [0,1,2,3,4,5,6,7];
195
+
196
+ b1 = new ByteArray(testArray);
197
+ b2 = b1.reverse();
198
+
199
+ assert.isEqual(b1, b2);
200
+ assert.isEqual(b1.length, b2.length);
201
+ for (var i = 0; i < testArray.length; i++)
202
+ assert.isEqual(testArray[i], b2.get(testArray.length-i-1));
203
+ };
204
+
205
+ exports.testByteArraySort = function() {
206
+ var testArray = [];
207
+ for (var i = 0; i < 1000; i++)
208
+ testArray.push(Math.floor(Math.random()*256));
209
+
210
+ var a = new ByteArray(testArray);
211
+ a.sort();
212
+
213
+ for (var i = 1; i < a.length; i++)
214
+ assert.isTrue(a.get(i-1) <= a.get(i), "index="+i+"("+a.get(i-1)+","+a.get(i)+")");
215
+ };
216
+
217
+ exports.testByteArraySortCustom = function() {
218
+ var testArray = [];
219
+ for (var i = 0; i < 1000; i++)
220
+ testArray.push(Math.floor(Math.random()*256));
221
+
222
+ var a = new ByteArray(testArray);
223
+ a.sort(function(o1, o2) { return o2-o1; });
224
+
225
+ for (var i = 1; i < a.length; i++)
226
+ assert.isTrue(a.get(i-1) >= a.get(i), "index="+i+"("+a.get(i-1)+","+a.get(i)+")");
227
+ };
228
+
229
+ exports.testSplit = function() {
230
+ var b1 = new ByteArray([0,1,2,3,4,5]), a1;
231
+
232
+ a1 = b1.split([]);
233
+ assert.isEqual(1, a1.length);
234
+ assert.isTrue(a1[0] instanceof ByteArray);
235
+ assert.isEqual(6, a1[0].length);
236
+ assert.isEqual(0, a1[0].get(0));
237
+ assert.isEqual(5, a1[0].get(5));
238
+
239
+ a1 = b1.split([2]);
240
+ assert.isEqual(2, a1.length);
241
+ assert.isTrue(a1[0] instanceof ByteArray);
242
+ assert.isEqual(2, a1[0].length);
243
+ assert.isEqual(0, a1[0].get(0));
244
+ assert.isEqual(1, a1[0].get(1));
245
+ assert.isEqual(3, a1[1].length);
246
+ assert.isEqual(3, a1[1].get(0));
247
+ assert.isEqual(5, a1[1].get(2));
248
+
249
+ a1 = b1.split([2], { includeDelimiter : true });
250
+ assert.isEqual(3, a1.length);
251
+ assert.isTrue(a1[0] instanceof ByteArray);
252
+ assert.isEqual(2, a1[0].length);
253
+ assert.isEqual(0, a1[0].get(0));
254
+ assert.isEqual(1, a1[0].get(1));
255
+ assert.isEqual(1, a1[1].length);
256
+ assert.isEqual(2, a1[1].get(0));
257
+ assert.isEqual(3, a1[2].length);
258
+ assert.isEqual(3, a1[2].get(0));
259
+ assert.isEqual(5, a1[2].get(2));
260
+
261
+ a1 = b1.split(new ByteString([2,3]));
262
+ assert.isEqual(2, a1.length);
263
+ assert.isTrue(a1[0] instanceof ByteArray);
264
+ assert.isEqual(2, a1[0].length);
265
+ assert.isEqual(0, a1[0].get(0));
266
+ assert.isEqual(1, a1[0].get(1));
267
+ assert.isEqual(2, a1[1].length);
268
+ assert.isEqual(4, a1[1].get(0));
269
+ assert.isEqual(5, a1[1].get(1));
270
+ };
271
+
272
+ exports.testByteArrayForEach = function() {
273
+
274
+ var b = new ByteArray([2, 3, 4, 5]),
275
+ log = [],
276
+ item;
277
+
278
+ var thisObj = {};
279
+
280
+ b.forEach(function() {
281
+ log.push({
282
+ thisObj: this,
283
+ args: arguments
284
+ });
285
+ }, thisObj);
286
+
287
+ assert.isEqual(4, log.length, "block called for each item");
288
+
289
+ item = log[0];
290
+ assert.isTrue(thisObj === item.thisObj, "block called with correct thisObj");
291
+ assert.isEqual(3, item.args.length, "block called with three args");
292
+ assert.isEqual(b.get(0), item.args[0], "block called with correct item 0");
293
+
294
+ item = log[3];
295
+ assert.isEqual(b.get(3), item.args[0], "block called with correct item 3");
296
+
297
+
298
+ };
299
+
300
+ exports.testByteArrayConcat = function() {
301
+
302
+ var b = new ByteArray();
303
+
304
+ var b1 = b.concat(new ByteArray([1,2,3]));
305
+ assert.isEqual(3, b1.length);
306
+ assert.isEqual(1, b1.get(0));
307
+ assert.isEqual(2, b1.get(1));
308
+ assert.isEqual(3, b1.get(2));
309
+
310
+ var b2 = b1.concat(new ByteString([4,5,6]));
311
+ assert.isEqual(6, b2.length);
312
+ assert.isEqual(1, b2.get(0));
313
+ assert.isEqual(3, b2.get(2));
314
+ assert.isEqual(4, b2.get(3));
315
+ assert.isEqual(6, b2.get(5));
316
+
317
+ var b3 = b2.concat([b, b1, b2, new ByteString(), new ByteArray()]);
318
+ assert.isEqual(b.length + b1.length + b2.length + b2.length, b3.length);
319
+
320
+ };
321
+
322
+ exports.testByteArrayPush = function() {
323
+ var b1 = new ByteArray();
324
+ assert.isEqual(3, b1.push(1,2,3));
325
+ assert.isEqual(3, b1.length);
326
+ assert.isEqual(1, b1.get(0));
327
+ assert.isEqual(2, b1.get(1));
328
+ assert.isEqual(3, b1.get(2));
329
+
330
+ var b2 = new ByteArray([7, 8, 9]);
331
+ assert.isEqual(6, b1.push.apply(b1, b2.toArray()));
332
+ assert.isEqual(6, b1.length);
333
+ assert.isEqual(7, b1.get(3));
334
+ assert.isEqual(8, b1.get(4));
335
+ assert.isEqual(9, b1.get(5));
336
+ };
337
+
338
+ exports.testByteArrayUnshift = function() {
339
+ var b1 = new ByteArray([10, 43]);
340
+ assert.isEqual(5, b1.unshift(9, 112, 67));
341
+ assert.isEqual(5, b1.length);
342
+ assert.isEqual(9, b1.get(0));
343
+ assert.isEqual(112, b1.get(1));
344
+ assert.isEqual(67, b1.get(2));
345
+ assert.isEqual(10, b1.get(3));
346
+ assert.isEqual(43, b1.get(4));
347
+
348
+ var b2 = new ByteArray();
349
+ assert.isEqual(5, b2.unshift.apply(b2, b1.toArray()));
350
+ assert.isEqual(5, b2.length);
351
+ assert.isEqual(9, b2.get(0));
352
+ assert.isEqual(112, b2.get(1));
353
+ assert.isEqual(67, b2.get(2));
354
+ assert.isEqual(10, b2.get(3));
355
+ assert.isEqual(43, b2.get(4));
356
+ assert.isEqual(6, b2.unshift.call(b2, 20));
357
+ assert.isEqual(20, b2.get(0));
358
+ };
359
+
360
+ exports.testByteArraySplice = function() {
361
+ var b1 = new ByteArray([1,2,3,4]);
362
+ var br = b1.splice(2, 0, 5);
363
+ assert.isEqual(0, br.length);
364
+ assert.isEqual(5, b1.length);
365
+ assert.isEqual(1, b1.get(0));
366
+ assert.isEqual(2, b1.get(1));
367
+ assert.isEqual(5, b1.get(2));
368
+ assert.isEqual(3, b1.get(3));
369
+ assert.isEqual(4, b1.get(4));
370
+
371
+ br = b1.splice(3, 1);
372
+ assert.isEqual(1, br.length);
373
+ assert.isEqual(4, b1.length);
374
+ assert.isEqual(3, br.get(0));
375
+ assert.isEqual(1, b1.get(0));
376
+ assert.isEqual(2, b1.get(1));
377
+ assert.isEqual(5, b1.get(2));
378
+ assert.isEqual(4, b1.get(3));
379
+
380
+ br = b1.splice(2, 1, 6);
381
+ assert.isEqual(1, br.length);
382
+ assert.isEqual(4, b1.length);
383
+ assert.isEqual(5, br.get(0));
384
+ assert.isEqual(1, b1.get(0));
385
+ assert.isEqual(2, b1.get(1));
386
+ assert.isEqual(6, b1.get(2));
387
+ assert.isEqual(4, b1.get(3));
388
+
389
+ br = b1.splice(0, 2, 7, 8, 9);
390
+ assert.isEqual(2, br.length);
391
+ assert.isEqual(5, b1.length);
392
+ assert.isEqual(1, br.get(0));
393
+ assert.isEqual(2, br.get(1));
394
+ assert.isEqual(7, b1.get(0));
395
+ assert.isEqual(8, b1.get(1));
396
+ assert.isEqual(9, b1.get(2));
397
+ assert.isEqual(6, b1.get(3));
398
+ assert.isEqual(4, b1.get(4));
399
+
400
+ br = b1.splice(-3, 1);
401
+ assert.isEqual(1, br.length);
402
+ assert.isEqual(4, b1.length);
403
+ assert.isEqual(9, br.get(0));
404
+ assert.isEqual(7, b1.get(0));
405
+ assert.isEqual(8, b1.get(1));
406
+ assert.isEqual(6, b1.get(2));
407
+ assert.isEqual(4, b1.get(3));
408
+
409
+ br = b1.splice(-1,0,10,11);
410
+ assert.isEqual(0, br.length);
411
+ assert.isEqual(6, b1.length);
412
+ assert.isEqual(7, b1.get(0));
413
+ assert.isEqual(8, b1.get(1));
414
+ assert.isEqual(6, b1.get(2));
415
+ assert.isEqual(10, b1.get(3));
416
+ assert.isEqual(11, b1.get(4));
417
+ assert.isEqual(4, b1.get(5));
418
+
419
+ br = b1.splice(-2);
420
+ assert.isEqual(2, br.length);
421
+ assert.isEqual(4, b1.length);
422
+ assert.isEqual(11, br.get(0));
423
+ assert.isEqual(4, br.get(1));
424
+ assert.isEqual(7, b1.get(0));
425
+ assert.isEqual(8, b1.get(1));
426
+ assert.isEqual(6, b1.get(2));
427
+ assert.isEqual(10, b1.get(3));
428
+
429
+ br = b1.splice(3);
430
+ assert.isEqual(1, br.length);
431
+ assert.isEqual(3, b1.length);
432
+ assert.isEqual(10, br.get(0));
433
+ assert.isEqual(7, b1.get(0));
434
+ assert.isEqual(8, b1.get(1));
435
+ assert.isEqual(6, b1.get(2));
436
+
437
+ br = b1.splice(-2, 2, 13, 14, 15);
438
+ assert.isEqual(2, br.length);
439
+ assert.isEqual(4, b1.length);
440
+ assert.isEqual(8, br.get(0));
441
+ assert.isEqual(6, br.get(1));
442
+ assert.isEqual(7, b1.get(0));
443
+ assert.isEqual(13, b1.get(1));
444
+ assert.isEqual(14, b1.get(2));
445
+ assert.isEqual(15, b1.get(3));
446
+
447
+ br = b1.splice();
448
+ assert.isEqual(undefined, br);
449
+ assert.isEqual(4, b1.length);
450
+ assert.isEqual(7, b1.get(0));
451
+ assert.isEqual(13, b1.get(1));
452
+ assert.isEqual(14, b1.get(2));
453
+ assert.isEqual(15, b1.get(3));
454
+
455
+ br = b1.splice(0);
456
+ assert.isEqual(4, br.length);
457
+ assert.isEqual(0, b1.length);
458
+ assert.isEqual(7, br.get(0));
459
+ assert.isEqual(13, br.get(1));
460
+ assert.isEqual(14, br.get(2));
461
+ assert.isEqual(15, br.get(3));
462
+ }
463
+
464
+ if (require.main === module.id)
465
+ require("os").exit(require("test/runner").run(exports));