spade-packager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. data/.gitignore +2 -0
  2. data/.gitmodules +6 -0
  3. data/bin/spadepkg +8 -0
  4. data/lib/libgems_ext.rb +8 -0
  5. data/lib/libgems_ext/config_file.rb +33 -0
  6. data/lib/libgems_ext/dependency_installer.rb +150 -0
  7. data/lib/libgems_ext/installer.rb +39 -0
  8. data/lib/libgems_ext/libgems.rb +39 -0
  9. data/lib/libgems_ext/spec_fetcher.rb +11 -0
  10. data/lib/spade-packager.rb +1 -0
  11. data/lib/spade/packager.rb +18 -0
  12. data/lib/spade/packager/cli.rb +9 -0
  13. data/lib/spade/packager/cli/base.rb +196 -0
  14. data/lib/spade/packager/cli/owner.rb +46 -0
  15. data/lib/spade/packager/cli/project_generator.rb +117 -0
  16. data/lib/spade/packager/credentials.rb +38 -0
  17. data/lib/spade/packager/local.rb +50 -0
  18. data/lib/spade/packager/package.rb +160 -0
  19. data/lib/spade/packager/remote.rb +98 -0
  20. data/lib/spade/packager/repository.rb +18 -0
  21. data/lib/spade/packager/version.rb +5 -0
  22. data/packages/coffee-script/.gitignore +8 -0
  23. data/packages/coffee-script/.npmignore +11 -0
  24. data/packages/coffee-script/Cakefile +229 -0
  25. data/packages/coffee-script/LICENSE +22 -0
  26. data/packages/coffee-script/README +47 -0
  27. data/packages/coffee-script/Rakefile +78 -0
  28. data/packages/coffee-script/bin/cake +7 -0
  29. data/packages/coffee-script/bin/coffee +7 -0
  30. data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
  31. data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
  32. data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
  33. data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
  34. data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
  35. data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
  36. data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
  37. data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
  38. data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
  39. data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
  40. data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
  41. data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
  42. data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
  43. data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
  44. data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
  45. data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
  46. data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
  47. data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
  48. data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
  49. data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
  50. data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
  51. data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
  52. data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
  53. data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
  54. data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
  55. data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
  56. data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
  57. data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
  58. data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
  59. data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
  60. data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
  61. data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
  62. data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
  63. data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
  64. data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
  65. data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
  66. data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
  67. data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
  68. data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
  69. data/packages/coffee-script/documentation/css/docs.css +374 -0
  70. data/packages/coffee-script/documentation/css/idle.css +64 -0
  71. data/packages/coffee-script/documentation/docs/browser.html +25 -0
  72. data/packages/coffee-script/documentation/docs/cake.html +43 -0
  73. data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
  74. data/packages/coffee-script/documentation/docs/command.html +161 -0
  75. data/packages/coffee-script/documentation/docs/docco.css +186 -0
  76. data/packages/coffee-script/documentation/docs/grammar.html +399 -0
  77. data/packages/coffee-script/documentation/docs/helpers.html +31 -0
  78. data/packages/coffee-script/documentation/docs/index.html +3 -0
  79. data/packages/coffee-script/documentation/docs/lexer.html +490 -0
  80. data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
  81. data/packages/coffee-script/documentation/docs/optparse.html +78 -0
  82. data/packages/coffee-script/documentation/docs/repl.html +24 -0
  83. data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
  84. data/packages/coffee-script/documentation/docs/scope.html +54 -0
  85. data/packages/coffee-script/documentation/docs/underscore.html +295 -0
  86. data/packages/coffee-script/documentation/images/background.png +0 -0
  87. data/packages/coffee-script/documentation/images/banding.png +0 -0
  88. data/packages/coffee-script/documentation/images/button_bg.png +0 -0
  89. data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
  90. data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
  91. data/packages/coffee-script/documentation/images/favicon.ico +0 -0
  92. data/packages/coffee-script/documentation/images/logo.png +0 -0
  93. data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
  94. data/packages/coffee-script/documentation/index.html.erb +1607 -0
  95. data/packages/coffee-script/documentation/js/aliases.js +17 -0
  96. data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
  97. data/packages/coffee-script/documentation/js/block_comment.js +4 -0
  98. data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
  99. data/packages/coffee-script/documentation/js/classes.js +44 -0
  100. data/packages/coffee-script/documentation/js/comparisons.js +3 -0
  101. data/packages/coffee-script/documentation/js/conditionals.js +12 -0
  102. data/packages/coffee-script/documentation/js/default_args.js +7 -0
  103. data/packages/coffee-script/documentation/js/do.js +10 -0
  104. data/packages/coffee-script/documentation/js/embedded.js +4 -0
  105. data/packages/coffee-script/documentation/js/existence.js +6 -0
  106. data/packages/coffee-script/documentation/js/expressions.js +15 -0
  107. data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
  108. data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
  109. data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
  110. data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
  111. data/packages/coffee-script/documentation/js/functions.js +7 -0
  112. data/packages/coffee-script/documentation/js/heredocs.js +2 -0
  113. data/packages/coffee-script/documentation/js/heregexes.js +2 -0
  114. data/packages/coffee-script/documentation/js/interpolation.js +4 -0
  115. data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
  116. data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
  117. data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
  118. data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
  119. data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
  120. data/packages/coffee-script/documentation/js/overview.js +35 -0
  121. data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
  122. data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
  123. data/packages/coffee-script/documentation/js/prototypes.js +3 -0
  124. data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
  125. data/packages/coffee-script/documentation/js/scope.js +8 -0
  126. data/packages/coffee-script/documentation/js/slices.js +4 -0
  127. data/packages/coffee-script/documentation/js/soaks.js +2 -0
  128. data/packages/coffee-script/documentation/js/splats.js +15 -0
  129. data/packages/coffee-script/documentation/js/splices.js +3 -0
  130. data/packages/coffee-script/documentation/js/strings.js +2 -0
  131. data/packages/coffee-script/documentation/js/switch.js +23 -0
  132. data/packages/coffee-script/documentation/js/try.js +8 -0
  133. data/packages/coffee-script/documentation/js/while.js +18 -0
  134. data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
  135. data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
  136. data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
  137. data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
  138. data/packages/coffee-script/examples/blocks.coffee +54 -0
  139. data/packages/coffee-script/examples/code.coffee +167 -0
  140. data/packages/coffee-script/examples/computer_science/README +4 -0
  141. data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
  142. data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
  143. data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
  144. data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
  145. data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
  146. data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
  147. data/packages/coffee-script/examples/poignant.coffee +181 -0
  148. data/packages/coffee-script/examples/potion.coffee +206 -0
  149. data/packages/coffee-script/examples/underscore.coffee +682 -0
  150. data/packages/coffee-script/examples/web_server.coffee +12 -0
  151. data/packages/coffee-script/extras/EXTRAS +7 -0
  152. data/packages/coffee-script/extras/coffee-script.js +8 -0
  153. data/packages/coffee-script/extras/jsl.conf +44 -0
  154. data/packages/coffee-script/index.html +2515 -0
  155. data/packages/coffee-script/lib/browser.js +52 -0
  156. data/packages/coffee-script/lib/cake.js +76 -0
  157. data/packages/coffee-script/lib/coffee-script.js +82 -0
  158. data/packages/coffee-script/lib/command.js +263 -0
  159. data/packages/coffee-script/lib/grammar.js +581 -0
  160. data/packages/coffee-script/lib/helpers.js +66 -0
  161. data/packages/coffee-script/lib/index.js +8 -0
  162. data/packages/coffee-script/lib/lexer.js +633 -0
  163. data/packages/coffee-script/lib/nodes.js +2165 -0
  164. data/packages/coffee-script/lib/optparse.js +111 -0
  165. data/packages/coffee-script/lib/parser.js +649 -0
  166. data/packages/coffee-script/lib/repl.js +42 -0
  167. data/packages/coffee-script/lib/rewriter.js +353 -0
  168. data/packages/coffee-script/lib/scope.js +120 -0
  169. data/packages/coffee-script/lib/spade-format.js +45 -0
  170. data/packages/coffee-script/package.json +26 -0
  171. data/packages/coffee-script/src/browser.coffee +43 -0
  172. data/packages/coffee-script/src/cake.coffee +69 -0
  173. data/packages/coffee-script/src/coffee-script.coffee +92 -0
  174. data/packages/coffee-script/src/command.coffee +214 -0
  175. data/packages/coffee-script/src/grammar.coffee +590 -0
  176. data/packages/coffee-script/src/helpers.coffee +56 -0
  177. data/packages/coffee-script/src/index.coffee +2 -0
  178. data/packages/coffee-script/src/lexer.coffee +653 -0
  179. data/packages/coffee-script/src/nodes.coffee +1754 -0
  180. data/packages/coffee-script/src/optparse.coffee +99 -0
  181. data/packages/coffee-script/src/repl.coffee +42 -0
  182. data/packages/coffee-script/src/rewriter.coffee +326 -0
  183. data/packages/coffee-script/src/scope.coffee +94 -0
  184. data/packages/coffee-script/test/arguments.coffee +127 -0
  185. data/packages/coffee-script/test/assignment.coffee +98 -0
  186. data/packages/coffee-script/test/break.coffee +18 -0
  187. data/packages/coffee-script/test/comments.coffee +201 -0
  188. data/packages/coffee-script/test/conditionals.coffee +181 -0
  189. data/packages/coffee-script/test/exception_handling.coffee +90 -0
  190. data/packages/coffee-script/test/helpers.coffee +96 -0
  191. data/packages/coffee-script/test/importing.coffee +18 -0
  192. data/packages/coffee-script/test/operators.coffee +225 -0
  193. data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
  194. data/packages/coffee-script/test/regular_expressions.coffee +56 -0
  195. data/packages/coffee-script/test/test.html +123 -0
  196. data/packages/coffee-script/test/test_chaining.coffee +77 -0
  197. data/packages/coffee-script/test/test_classes.coffee +372 -0
  198. data/packages/coffee-script/test/test_compilation.coffee +26 -0
  199. data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
  200. data/packages/coffee-script/test/test_existence.coffee +165 -0
  201. data/packages/coffee-script/test/test_functions.coffee +379 -0
  202. data/packages/coffee-script/test/test_heredocs.coffee +111 -0
  203. data/packages/coffee-script/test/test_literals.coffee +270 -0
  204. data/packages/coffee-script/test/test_option_parser.coffee +27 -0
  205. data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
  206. data/packages/coffee-script/test/test_returns.coffee +63 -0
  207. data/packages/coffee-script/test/test_splats.coffee +102 -0
  208. data/packages/coffee-script/test/test_strings.coffee +118 -0
  209. data/packages/coffee-script/test/test_switch.coffee +103 -0
  210. data/packages/coffee-script/test/test_while.coffee +71 -0
  211. data/packages/ivory/LICENSE.txt +1 -0
  212. data/packages/ivory/README.md +19 -0
  213. data/packages/ivory/lib/buffer.js +111 -0
  214. data/packages/ivory/lib/events.js +137 -0
  215. data/packages/ivory/lib/fs.js +266 -0
  216. data/packages/ivory/lib/main.js +13 -0
  217. data/packages/ivory/lib/path.js +158 -0
  218. data/packages/ivory/lib/ruby/buffer.rb +145 -0
  219. data/packages/ivory/lib/ruby/constants.rb +585 -0
  220. data/packages/ivory/lib/ruby/events.rb +32 -0
  221. data/packages/ivory/lib/ruby/fs.rb +245 -0
  222. data/packages/ivory/lib/ruby/process.rb +28 -0
  223. data/packages/ivory/lib/stream.js +115 -0
  224. data/packages/ivory/lib/util.js +414 -0
  225. data/packages/ivory/package.json +11 -0
  226. data/packages/ivory/spade-boot.js +78 -0
  227. data/packages/jquery/main.js +7179 -0
  228. data/packages/jquery/package.json +10 -0
  229. data/packages/json/lib/main.js +14 -0
  230. data/packages/json/package.json +8 -0
  231. data/packages/lproj/README.md +77 -0
  232. data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
  233. data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
  234. data/packages/lproj/examples/demo-app/index.html +8 -0
  235. data/packages/lproj/examples/demo-app/lib/main.js +7 -0
  236. data/packages/lproj/examples/demo-app/package.json +9 -0
  237. data/packages/lproj/lib/main.js +78 -0
  238. data/packages/lproj/lib/strings-format.js +6 -0
  239. data/packages/lproj/package.json +9 -0
  240. data/packages/optparse/README.md +161 -0
  241. data/packages/optparse/TODO +1 -0
  242. data/packages/optparse/examples/browser-test.html +75 -0
  243. data/packages/optparse/examples/nodejs-test.js +90 -0
  244. data/packages/optparse/lib/optparse.js +309 -0
  245. data/packages/optparse/package.json +13 -0
  246. data/packages/optparse/seed.yml +5 -0
  247. data/packages/text/lib/main.js +8 -0
  248. data/packages/text/package.json +9 -0
  249. data/packages/web-file/README.md +7 -0
  250. data/packages/web-file/lib/errors.js +32 -0
  251. data/packages/web-file/lib/file-reader.js +10 -0
  252. data/packages/web-file/lib/file-system.js +234 -0
  253. data/packages/web-file/lib/file-writer.js +10 -0
  254. data/packages/web-file/lib/file.js +9 -0
  255. data/packages/web-file/lib/main.js +34 -0
  256. data/packages/web-file/lib/platform.js +25 -0
  257. data/packages/web-file/lib/ruby/file.rb +252 -0
  258. data/packages/web-file/lib/ruby/file_reader.rb +69 -0
  259. data/packages/web-file/lib/ruby/file_system.rb +134 -0
  260. data/packages/web-file/lib/ruby/file_writer.rb +78 -0
  261. data/packages/web-file/package.json +12 -0
  262. data/packages/web-typed-array/README.md +7 -0
  263. data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
  264. data/packages/web-typed-array/lib/array-buffer.js +7 -0
  265. data/packages/web-typed-array/lib/main.js +33 -0
  266. data/packages/web-typed-array/lib/platform.js +20 -0
  267. data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
  268. data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
  269. data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
  270. data/packages/web-typed-array/lib/typed-array.js +26 -0
  271. data/packages/web-typed-array/package.json +9 -0
  272. data/spade-packager.gemspec +39 -0
  273. data/spec/cli/build_spec.rb +57 -0
  274. data/spec/cli/install_spec.rb +119 -0
  275. data/spec/cli/installed_spec.rb +55 -0
  276. data/spec/cli/list_spec.rb +74 -0
  277. data/spec/cli/login_spec.rb +75 -0
  278. data/spec/cli/new_spec.rb +5 -0
  279. data/spec/cli/owner_spec.rb +114 -0
  280. data/spec/cli/push_spec.rb +73 -0
  281. data/spec/cli/uninstall_spec.rb +58 -0
  282. data/spec/cli/unpack_spec.rb +72 -0
  283. data/spec/cli/unyank_spec.rb +73 -0
  284. data/spec/cli/yank_spec.rb +73 -0
  285. data/spec/credentials_spec.rb +23 -0
  286. data/spec/fixtures/badrake-0.8.7.spd +0 -0
  287. data/spec/fixtures/builder-3.0.0.spd +0 -0
  288. data/spec/fixtures/bundler-1.1.pre.spd +0 -0
  289. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  290. data/spec/fixtures/core-test-0.4.3.spd +0 -0
  291. data/spec/fixtures/core-test/bin/cot +3 -0
  292. data/spec/fixtures/core-test/lib/main.js +1 -0
  293. data/spec/fixtures/core-test/resources/runner.css +0 -0
  294. data/spec/fixtures/core-test/tests/test.js +1 -0
  295. data/spec/fixtures/highline-1.6.1.spd +0 -0
  296. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  297. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  298. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  299. data/spec/fixtures/package.json +30 -0
  300. data/spec/fixtures/rake-0.8.6.spd +0 -0
  301. data/spec/fixtures/rake-0.8.7.spd +0 -0
  302. data/spec/gauntlet_spec.rb +27 -0
  303. data/spec/package_spec.rb +267 -0
  304. data/spec/spec_helper.rb +32 -0
  305. data/spec/support/cli.rb +103 -0
  306. data/spec/support/fake.rb +48 -0
  307. data/spec/support/fake_gem_server.rb +67 -0
  308. data/spec/support/fake_gemcutter.rb +50 -0
  309. data/spec/support/matchers.rb +32 -0
  310. data/spec/support/path.rb +61 -0
  311. data/templates/project/LICENSE +19 -0
  312. data/templates/project/README.md +21 -0
  313. data/templates/project/lib/main.js +9 -0
  314. data/templates/project/project.json +31 -0
  315. data/templates/project/tests/main-test.js +8 -0
  316. metadata +484 -0
@@ -0,0 +1,186 @@
1
+ # Ranges, Slices, and Splices
2
+ # ---------------------------
3
+
4
+ # shared array
5
+ shared = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6
+
7
+
8
+ #### Ranges
9
+
10
+ test "basic inclusive ranges", ->
11
+ arrayEq [1, 2, 3] , [1..3]
12
+ arrayEq [0, 1, 2] , [0..2]
13
+ arrayEq [0, 1] , [0..1]
14
+ arrayEq [0] , [0..0]
15
+ arrayEq [-1] , [-1..-1]
16
+ arrayEq [-1, 0] , [-1..0]
17
+ arrayEq [-1, 0, 1], [-1..1]
18
+
19
+ test "basic exclusive ranges", ->
20
+ arrayEq [1, 2, 3] , [1...4]
21
+ arrayEq [0, 1, 2] , [0...3]
22
+ arrayEq [0, 1] , [0...2]
23
+ arrayEq [0] , [0...1]
24
+ arrayEq [-1] , [-1...0]
25
+ arrayEq [-1, 0] , [-1...1]
26
+ arrayEq [-1, 0, 1], [-1...2]
27
+
28
+ arrayEq [], [1...1]
29
+ arrayEq [], [0...0]
30
+ arrayEq [], [-1...-1]
31
+
32
+ test "downward ranges", ->
33
+ arrayEq shared, [9..0].reverse()
34
+ arrayEq [5, 4, 3, 2] , [5..2]
35
+ arrayEq [2, 1, 0, -1], [2..-1]
36
+
37
+ arrayEq [3, 2, 1] , [3..1]
38
+ arrayEq [2, 1, 0] , [2..0]
39
+ arrayEq [1, 0] , [1..0]
40
+ arrayEq [0] , [0..0]
41
+ arrayEq [-1] , [-1..-1]
42
+ arrayEq [0, -1] , [0..-1]
43
+ arrayEq [1, 0, -1] , [1..-1]
44
+ arrayEq [0, -1, -2], [0..-2]
45
+
46
+ arrayEq [4, 3, 2], [4...1]
47
+ arrayEq [3, 2, 1], [3...0]
48
+ arrayEq [2, 1] , [2...0]
49
+ arrayEq [1] , [1...0]
50
+ arrayEq [] , [0...0]
51
+ arrayEq [] , [-1...-1]
52
+ arrayEq [0] , [0...-1]
53
+ arrayEq [0, -1] , [0...-2]
54
+ arrayEq [1, 0] , [1...-1]
55
+ arrayEq [2, 1, 0], [2...-1]
56
+
57
+ test "ranges with variables as enpoints", ->
58
+ [a, b] = [1, 3]
59
+ arrayEq [1, 2, 3], [a..b]
60
+ arrayEq [1, 2] , [a...b]
61
+ b = -2
62
+ arrayEq [1, 0, -1, -2], [a..b]
63
+ arrayEq [1, 0, -1] , [a...b]
64
+
65
+ test "ranges with expressions as endpoints", ->
66
+ [a, b] = [1, 3]
67
+ arrayEq [2, 3, 4, 5, 6], [(a+1)..2*b]
68
+ arrayEq [2, 3, 4, 5] , [(a+1)...2*b]
69
+
70
+ test "large ranges are generated with looping constructs", ->
71
+ down = [99..0]
72
+ eq 100, (len = down.length)
73
+ eq 0, down[len - 1]
74
+
75
+ up = [0...100]
76
+ eq 100, (len = up.length)
77
+ eq 99, up[len - 1]
78
+
79
+
80
+ #### Slices
81
+
82
+ test "basic slicing", ->
83
+ arrayEq [7, 8, 9] , shared[7..9]
84
+ arrayEq [2, 3] , shared[2...4]
85
+ arrayEq [2, 3, 4, 5], shared[2...6]
86
+
87
+ test "slicing with variables as endpoints", ->
88
+ [a, b] = [1, 4]
89
+ arrayEq [1, 2, 3, 4], shared[a..b]
90
+ arrayEq [1, 2, 3] , shared[a...b]
91
+
92
+ test "slicing with expressions as endpoints", ->
93
+ [a, b] = [1, 3]
94
+ arrayEq [2, 3, 4, 5, 6], shared[(a+1)..2*b]
95
+ arrayEq [2, 3, 4, 5] , shared[a+1...(2*b)]
96
+
97
+ test "unbounded slicing", ->
98
+ arrayEq [7, 8, 9] , shared[7..]
99
+ arrayEq [8, 9] , shared[-2..]
100
+ arrayEq [9] , shared[-1...]
101
+ arrayEq [0, 1, 2] , shared[...3]
102
+ arrayEq [0, 1, 2, 3], shared[..-7]
103
+
104
+ arrayEq shared , shared[..-1]
105
+ arrayEq shared[0..8], shared[...-1]
106
+
107
+ for a in [-shared.length..shared.length]
108
+ arrayEq shared[a..] , shared[a...]
109
+ for a in [-shared.length+1...shared.length]
110
+ arrayEq shared[..a][...-1] , shared[...a]
111
+
112
+ test "#930, #835, #831, #746 #624: inclusive slices to -1 should slice to end", ->
113
+ arrayEq shared, shared[0..-1]
114
+ arrayEq shared, shared[..-1]
115
+ arrayEq shared.slice(1,shared.length), shared[1..-1]
116
+
117
+ test "string slicing", ->
118
+ str = "abcdefghijklmnopqrstuvwxyz"
119
+ ok str[1...1] is ""
120
+ ok str[1..1] is "b"
121
+ ok str[1...5] is "bcde"
122
+ ok str[0..4] is "abcde"
123
+ ok str[-5..] is "vwxyz"
124
+
125
+
126
+ #### Splices
127
+
128
+ test "basic splicing", ->
129
+ ary = [0..9]
130
+ ary[5..9] = [0, 0, 0]
131
+ arrayEq [0, 1, 2, 3, 4, 0, 0, 0], ary
132
+
133
+ ary = [0..9]
134
+ ary[2...8] = []
135
+ arrayEq [0, 1, 8, 9], ary
136
+
137
+ test "unbounded splicing", ->
138
+ ary = [0..9]
139
+ ary[3..] = [9, 8, 7]
140
+ arrayEq [0, 1, 2, 9, 8, 7]. ary
141
+
142
+ ary[...3] = [7, 8, 9]
143
+ arrayEq [7, 8, 9, 9, 8, 7], ary
144
+
145
+ test "splicing with variables as endpoints", ->
146
+ [a, b] = [1, 8]
147
+
148
+ ary = [0..9]
149
+ ary[a..b] = [2, 3]
150
+ arrayEq [0, 2, 3, 9], ary
151
+
152
+ ary = [0..9]
153
+ ary[a...b] = [5]
154
+ arrayEq [0, 5, 8, 9], ary
155
+
156
+ test "splicing with expressions as endpoints", ->
157
+ [a, b] = [1, 3]
158
+
159
+ ary = [0..9]
160
+ ary[ a+1 .. 2*b+1 ] = [4]
161
+ arrayEq [0, 1, 4, 8, 9], ary
162
+
163
+ ary = [0..9]
164
+ ary[a+1...2*b+1] = [4]
165
+ arrayEq [0, 1, 4, 7, 8, 9], ary
166
+
167
+ test "splicing to the end, against a one-time function", ->
168
+ ary = null
169
+ fn = ->
170
+ if ary
171
+ throw 'err'
172
+ else
173
+ ary = [1, 2, 3]
174
+
175
+ fn()[0..] = 1
176
+
177
+ arrayEq ary, [1]
178
+
179
+ test "the return value of a splice literal should be the RHS", ->
180
+ ary = [0, 0, 0]
181
+ eq (ary[0..1] = 2), 2
182
+
183
+ ary = [0, 0, 0]
184
+ eq (ary[0..] = 3), 3
185
+
186
+ arrayEq [ary[0..0] = 0], [0]
@@ -0,0 +1,56 @@
1
+ # Regular Expressions
2
+ # -------------------
3
+ #TODO: add some rigorous regex interpolation tests
4
+
5
+ test "basic regular expression literals", ->
6
+ ok 'a'.match(/a/)
7
+ ok 'a'.match /a/
8
+ ok 'a'.match(/a/g)
9
+ ok 'a'.match /a/g
10
+
11
+ test "division is not confused for a regular expression", ->
12
+ eq 2, 4 / 2 / 1
13
+
14
+ a = 4
15
+ b = 2
16
+ g = 1
17
+ eq 2, a / b/g
18
+
19
+ obj = method: -> 2
20
+ two = 2
21
+ eq 2, (obj.method()/two + obj.method()/two)
22
+
23
+ i = 1
24
+ eq 2, (4)/2/i
25
+ eq 1, i/i/i
26
+
27
+ test "backslash escapes", ->
28
+ eq "\\/\\\\", /\/\\/.source
29
+
30
+ test "#764: regular expressions should be indexable", ->
31
+ eq /0/['source'], ///#{0}///['source']
32
+
33
+ test "#584: slashes are allowed unescaped in character classes", ->
34
+ ok /^a\/[/]b$/.test 'a//b'
35
+
36
+
37
+ #### Heregexe(n|s)
38
+
39
+ test "a heregex will ignore whitespace and comments", ->
40
+ eq /^I'm\x20+[a]\s+Heregex?\/\/\//gim + '', ///
41
+ ^ I'm \x20+ [a] \s+
42
+ Heregex? / // # or not
43
+ ///gim + ''
44
+
45
+ test "heregex interpolation", ->
46
+ eq /\\#{}\\\"/ + '', ///
47
+ #{
48
+ "#{ '\\' }" # normal comment
49
+ }
50
+ # regex comment
51
+ \#{}
52
+ \\ \"
53
+ /// + ''
54
+
55
+ test "an empty heregex will compile to an empty, non-capturing group", ->
56
+ eq /(?:)/ + '', /// /// + ''
@@ -0,0 +1,123 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
5
+ <title>CoffeeScript Test Suite</title>
6
+ <script src="../extras/coffee-script.js"></script>
7
+ <style>
8
+ body {
9
+ margin: 30px;
10
+ font-family: Menlo, Monaco, monospace;
11
+ }
12
+ h1 {
13
+ font-size: 20px;
14
+ }
15
+ #stdout {
16
+ }
17
+ </style>
18
+ </head>
19
+ <body>
20
+
21
+ <h1>CoffeeScript Test Suite</h1>
22
+ <pre id="stdout"></pre>
23
+
24
+ <script type="text/coffeescript">
25
+
26
+ stdout = document.getElementById 'stdout'
27
+ start = new Date
28
+ success = total = done = failed = 0
29
+
30
+ say = (msg, yay) ->
31
+ div = document.createElement 'div'
32
+ div.appendChild document.createTextNode msg
33
+ div.style.color = if yay then 'green' else 'red'
34
+ stdout.appendChild div
35
+ msg
36
+
37
+ @test = (desc, fn) ->
38
+ fn()
39
+
40
+ @ok = (good, msg) ->
41
+ ++total
42
+ if good then ++success else throw Error say msg
43
+
44
+ @eq = (x, y, msg) -> ok x is y, msg ? x + ' !== ' + y
45
+
46
+ arrayEqual = (a, b) ->
47
+ if a is b
48
+ # 0 isnt -0
49
+ a isnt 0 or 1/a is 1/b
50
+ else if a instanceof Array and b instanceof Array
51
+ return no unless a.length is b.length
52
+ return no for el, idx in a when not arrayEq el, b[idx]
53
+ yes
54
+ else
55
+ # NaN is NaN
56
+ a isnt a and b isnt b
57
+
58
+ @doesNotThrow = (fn) ->
59
+ fn()
60
+ ok true
61
+
62
+ @arrayEq = (a, b, msg) -> ok arrayEqual(a,b), msg
63
+
64
+ @throws = (fun, err, msg) ->
65
+ try
66
+ fun()
67
+ catch e
68
+ if err
69
+ eq e, err
70
+ else
71
+ ok yes
72
+ return
73
+ ok no
74
+
75
+
76
+ CoffeeScript.run = (code, cb) ->
77
+ try Function(CoffeeScript.compile code, wrap: no)()
78
+ catch e then cb(); throw e
79
+ cb yes
80
+
81
+ run = (name) ->
82
+ CoffeeScript.load "#{name}.coffee", (yay) ->
83
+ say "#{ if yay then '\u2714' else '\u3000' } #{name}", yay
84
+ ++failed unless yay
85
+ fin() if ++done is names.length
86
+
87
+ fin = ->
88
+ yay = success is total and not failed
89
+ sec = (new Date - start) / 1000
90
+ msg = "passed #{success} tests in #{ sec.toFixed 2 } seconds"
91
+ msg = "failed #{ total - success } tests and #{msg}" unless yay
92
+ say msg, yay
93
+
94
+ run name for name in names = [
95
+ 'arguments'
96
+ 'assignment'
97
+ 'break'
98
+ 'comments'
99
+ 'exception_handling'
100
+ 'helpers'
101
+ 'operators'
102
+ 'regular_expressions'
103
+ 'test_chaining'
104
+ 'test_classes'
105
+ 'test_compilation'
106
+ 'test_comprehensions'
107
+ 'test_existence'
108
+ 'test_functions'
109
+ 'test_heredocs'
110
+ 'conditionals'
111
+ 'test_literals'
112
+ 'test_pattern_matching'
113
+ 'ranges_slices_and_splices'
114
+ 'test_returns'
115
+ 'test_splats'
116
+ 'test_strings'
117
+ 'test_switch'
118
+ 'test_while'
119
+ ]
120
+ </script>
121
+
122
+ </body>
123
+ </html>
@@ -0,0 +1,77 @@
1
+ # Chaining
2
+ # --------
3
+
4
+ # shared identity function
5
+ id = (_) -> if arguments.length is 1 then _ else Array::slice.call(arguments)
6
+
7
+
8
+
9
+ # Basic chained function calls.
10
+ identityWrap = (x) ->
11
+ -> x
12
+
13
+ result = identityWrap(identityWrap(true))()()
14
+
15
+ ok result
16
+
17
+
18
+ # Should be able to look at prototypes on keywords.
19
+ obj =
20
+ withAt: -> @::prop
21
+ withThis: -> this::prop
22
+ proto:
23
+ prop: 100
24
+ obj.prototype = obj.proto
25
+ eq obj.withAt() , 100
26
+ eq obj.withThis(), 100
27
+
28
+
29
+ # Chained accesses split on period/newline, backwards and forwards.
30
+ str = 'god'
31
+
32
+ result = str.
33
+ split('').
34
+ reverse().
35
+ reverse().
36
+ reverse()
37
+
38
+ ok result.join('') is 'dog'
39
+
40
+ result = str
41
+ .split('')
42
+ .reverse()
43
+ .reverse()
44
+ .reverse()
45
+
46
+ ok result.join('') is 'dog'
47
+
48
+
49
+ # Newline suppression for operators.
50
+ six =
51
+ 1 +
52
+ 2 +
53
+ 3
54
+
55
+ ok six is 6
56
+
57
+
58
+ # Ensure that indented array literals don't trigger whitespace rewriting.
59
+ func = () ->
60
+ ok arguments.length is 1
61
+
62
+ func(
63
+ [[[[[],
64
+ []],
65
+ [[]]]],
66
+ []])
67
+
68
+ greeting = id(
69
+ """
70
+ Hello
71
+ """)
72
+
73
+ ok greeting is "Hello"
74
+
75
+ ok not Date
76
+ ::
77
+ ?.foo, '`?.` and `::` should also continue lines'
@@ -0,0 +1,372 @@
1
+ # Test classes with a four-level inheritance chain.
2
+ class Base
3
+ func: (string) ->
4
+ "zero/#{string}"
5
+
6
+ @static: (string) ->
7
+ "static/#{string}"
8
+
9
+ class FirstChild extends Base
10
+ func: (string) ->
11
+ super('one/') + string
12
+
13
+ SecondChild = class extends FirstChild
14
+ func: (string) ->
15
+ super('two/') + string
16
+
17
+ thirdCtor = ->
18
+ @array = [1, 2, 3]
19
+
20
+ class ThirdChild extends SecondChild
21
+ constructor: -> thirdCtor.call this
22
+
23
+ # Gratuitous comment for testing.
24
+ func: (string) ->
25
+ super('three/') + string
26
+
27
+ result = (new ThirdChild).func 'four'
28
+
29
+ ok result is 'zero/one/two/three/four'
30
+ ok Base.static('word') is 'static/word'
31
+
32
+ FirstChild::func = (string) ->
33
+ super('one/').length + string
34
+
35
+ result = (new ThirdChild).func 'four'
36
+
37
+ ok result is '9two/three/four'
38
+
39
+ ok (new ThirdChild).array.join(' ') is '1 2 3'
40
+
41
+
42
+ identity = (f) -> f
43
+
44
+ class TopClass
45
+ constructor: (arg) ->
46
+ @prop = 'top-' + arg
47
+
48
+ class SuperClass extends TopClass
49
+ constructor: (arg) ->
50
+ identity super 'super-' + arg
51
+
52
+ class SubClass extends SuperClass
53
+ constructor: ->
54
+ identity super 'sub'
55
+
56
+ ok (new SubClass).prop is 'top-super-sub'
57
+
58
+
59
+ class OneClass
60
+ @new: 'new'
61
+ function: 'function'
62
+ constructor: (name) -> @name = name
63
+
64
+ class TwoClass extends OneClass
65
+ delete TwoClass.new
66
+
67
+ Function.prototype.new = -> new this arguments...
68
+
69
+ ok (TwoClass.new('three')).name is 'three'
70
+ ok (new OneClass).function is 'function'
71
+ ok OneClass.new is 'new'
72
+
73
+ delete Function.prototype.new
74
+
75
+
76
+ # And now the same tests, but written in the manual style:
77
+ Base = ->
78
+ Base::func = (string) ->
79
+ 'zero/' + string
80
+ Base::['func-func'] = (string) ->
81
+ "dynamic-#{string}"
82
+
83
+ FirstChild = ->
84
+ SecondChild = ->
85
+ ThirdChild = ->
86
+ @array = [1, 2, 3]
87
+ this
88
+
89
+ ThirdChild extends SecondChild extends FirstChild extends Base
90
+
91
+ FirstChild::func = (string) ->
92
+ super('one/') + string
93
+
94
+ SecondChild::func = (string) ->
95
+ super('two/') + string
96
+
97
+ ThirdChild::func = (string) ->
98
+ super('three/') + string
99
+
100
+ result = (new ThirdChild).func 'four'
101
+
102
+ ok result is 'zero/one/two/three/four'
103
+
104
+ ok (new ThirdChild)['func-func']('thing') is 'dynamic-thing'
105
+
106
+
107
+ TopClass = (arg) ->
108
+ @prop = 'top-' + arg
109
+ this
110
+
111
+ SuperClass = (arg) ->
112
+ super 'super-' + arg
113
+ this
114
+
115
+ SubClass = ->
116
+ super 'sub'
117
+ this
118
+
119
+ SuperClass extends TopClass
120
+ SubClass extends SuperClass
121
+
122
+ ok (new SubClass).prop is 'top-super-sub'
123
+
124
+
125
+ # '@' referring to the current instance, and not being coerced into a call.
126
+ class ClassName
127
+ amI: ->
128
+ @ instanceof ClassName
129
+
130
+ obj = new ClassName
131
+ ok obj.amI()
132
+
133
+
134
+ # super() calls in constructors of classes that are defined as object properties.
135
+ class Hive
136
+ constructor: (name) -> @name = name
137
+
138
+ class Hive.Bee extends Hive
139
+ constructor: (name) -> super
140
+
141
+ maya = new Hive.Bee 'Maya'
142
+ ok maya.name is 'Maya'
143
+
144
+
145
+ # Class with JS-keyword properties.
146
+ class Class
147
+ class: 'class'
148
+ name: -> @class
149
+
150
+ instance = new Class
151
+ ok instance.class is 'class'
152
+ ok instance.name() is 'class'
153
+
154
+
155
+ # Classes with methods that are pre-bound to the instance.
156
+ # ... or statically, to the class.
157
+ class Dog
158
+
159
+ constructor: (name) ->
160
+ @name = name
161
+
162
+ bark: =>
163
+ "#{@name} woofs!"
164
+
165
+ @static = =>
166
+ new this('Dog')
167
+
168
+ spark = new Dog('Spark')
169
+ fido = new Dog('Fido')
170
+ fido.bark = spark.bark
171
+
172
+ ok fido.bark() is 'Spark woofs!'
173
+
174
+ obj = func: Dog.static
175
+
176
+ ok obj.func().name is 'Dog'
177
+
178
+
179
+ # Testing a bound function in a bound function.
180
+ class Mini
181
+ num: 10
182
+ generate: =>
183
+ for i in [1..3]
184
+ =>
185
+ @num
186
+
187
+ m = new Mini
188
+ eq (func() for func in m.generate()).join(' '), '10 10 10'
189
+
190
+
191
+ # Testing a contructor called with varargs.
192
+ class Connection
193
+ constructor: (one, two, three) ->
194
+ [@one, @two, @three] = [one, two, three]
195
+
196
+ out: ->
197
+ "#{@one}-#{@two}-#{@three}"
198
+
199
+ list = [3, 2, 1]
200
+ conn = new Connection list...
201
+ ok conn instanceof Connection
202
+ ok conn.out() is '3-2-1'
203
+
204
+
205
+ # Test calling super and passing along all arguments.
206
+ class Parent
207
+ method: (args...) -> @args = args
208
+
209
+ class Child extends Parent
210
+ method: -> super
211
+
212
+ c = new Child
213
+ c.method 1, 2, 3, 4
214
+ ok c.args.join(' ') is '1 2 3 4'
215
+
216
+
217
+ # Test classes wrapped in decorators.
218
+ func = (klass) ->
219
+ klass::prop = 'value'
220
+ klass
221
+
222
+ func class Test
223
+ prop2: 'value2'
224
+
225
+ ok (new Test).prop is 'value'
226
+ ok (new Test).prop2 is 'value2'
227
+
228
+
229
+ # Test anonymous classes.
230
+ obj =
231
+ klass: class
232
+ method: -> 'value'
233
+
234
+ instance = new obj.klass
235
+ ok instance.method() is 'value'
236
+
237
+
238
+ # Implicit objects as static properties.
239
+ class Static
240
+ @static =
241
+ one: 1
242
+ two: 2
243
+
244
+ ok Static.static.one is 1
245
+ ok Static.static.two is 2
246
+
247
+
248
+ # Nothing classes.
249
+ c = class
250
+ ok c instanceof Function
251
+
252
+
253
+ # Classes with value'd constructors.
254
+ counter = 0
255
+ classMaker = ->
256
+ counter += 1
257
+ inner = counter
258
+ ->
259
+ @value = inner
260
+
261
+ class One
262
+ constructor: classMaker()
263
+
264
+ class Two
265
+ constructor: classMaker()
266
+
267
+ ok (new One).value is 1
268
+ ok (new Two).value is 2
269
+ ok (new One).value is 1
270
+ ok (new Two).value is 2
271
+
272
+
273
+ # Exectuable class bodies.
274
+ class A
275
+ if true
276
+ b: 'b'
277
+ else
278
+ c: 'c'
279
+
280
+ a = new A
281
+
282
+ eq a.b, 'b'
283
+ eq a.c, undefined
284
+
285
+
286
+ # Light metaprogramming.
287
+ class Base
288
+ @attr: (name) ->
289
+ @::[name] = (val) ->
290
+ if arguments.length > 0
291
+ @["_#{name}"] = val
292
+ else
293
+ @["_#{name}"]
294
+
295
+ class Robot extends Base
296
+ @attr 'power'
297
+ @attr 'speed'
298
+
299
+ robby = new Robot
300
+
301
+ ok robby.power() is undefined
302
+
303
+ robby.power 11
304
+ robby.speed Infinity
305
+
306
+ eq robby.power(), 11
307
+ eq robby.speed(), Infinity
308
+
309
+
310
+ # Namespaced classes do not reserve their function name in outside scope.
311
+ one = {}
312
+ two = {}
313
+
314
+ class one.Klass
315
+ @label = "one"
316
+
317
+ class two.Klass
318
+ @label = "two"
319
+
320
+ eq typeof Klass, 'undefined'
321
+ eq one.Klass.label, 'one'
322
+ eq two.Klass.label, 'two'
323
+
324
+
325
+ # Nested classes.
326
+ class Outer
327
+ constructor: ->
328
+ @label = 'outer'
329
+
330
+ class @Inner
331
+ constructor: ->
332
+ @label = 'inner'
333
+
334
+ eq (new Outer).label, 'outer'
335
+ eq (new Outer.Inner).label, 'inner'
336
+
337
+
338
+ # Variables in constructor bodies are correctly scoped.
339
+ class A
340
+ x = 1
341
+ constructor: ->
342
+ x = 10
343
+ y = 20
344
+ y = 2
345
+ captured: ->
346
+ {x, y}
347
+
348
+ a = new A
349
+ eq a.captured().x, 10
350
+ eq a.captured().y, 2
351
+
352
+
353
+ # Issue #924: Static methods in nested classes.
354
+ class A
355
+ @B: class
356
+ @c = -> 5
357
+
358
+ eq A.B.c(), 5
359
+
360
+
361
+ # `class extends this` ...
362
+ class A
363
+ func: -> 'A'
364
+
365
+ B = null
366
+ makeClass = ->
367
+ B = class extends this
368
+ func: -> super + ' B'
369
+
370
+ makeClass.call A
371
+
372
+ eq (new B()).func(), 'A B'