spade-packager 0.1.0

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 (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,379 @@
1
+ x = 1
2
+ y = {}
3
+ y.x = -> 3
4
+
5
+ ok x is 1
6
+ ok typeof(y.x) is 'function'
7
+ ok y.x instanceof Function
8
+ ok y.x() is 3
9
+
10
+
11
+ # The empty function should not cause a syntax error.
12
+ ->
13
+ () ->
14
+
15
+
16
+ # Multiple nested function declarations mixed with implicit calls should not
17
+ # cause a syntax error.
18
+ (one) -> (two) -> three four, (five) -> six seven, eight, (nine) ->
19
+
20
+
21
+ obj = {
22
+ name: 'Fred'
23
+
24
+ bound: ->
25
+ do (=> eq this, obj)
26
+
27
+ unbound: ->
28
+ do (-> ok this isnt obj)
29
+
30
+ nested: ->
31
+ (=>
32
+ do (=>
33
+ (=>
34
+ eq this, obj
35
+ )()
36
+ )
37
+ )()
38
+ }
39
+
40
+ obj.unbound()
41
+ obj.bound()
42
+ obj.nested()
43
+
44
+
45
+ # Python decorator style wrapper that memoizes any function
46
+ memoize = (fn) ->
47
+ cache = {}
48
+ self = this
49
+ (args...) ->
50
+ key = args.toString()
51
+ return cache[key] if cache[key]
52
+ cache[key] = fn.apply(self, args)
53
+
54
+ Math = {
55
+ Add: (a, b) -> a + b
56
+ AnonymousAdd: (a, b) -> a + b
57
+ FastAdd: memoize (a, b) -> a + b
58
+ }
59
+
60
+ ok Math.Add(5, 5) is 10
61
+ ok Math.AnonymousAdd(10, 10) is 20
62
+ ok Math.FastAdd(20, 20) is 40
63
+
64
+
65
+ okFunc = (f) -> ok(f())
66
+ okFunc -> true
67
+
68
+ # Optional parens can be used in a nested fashion.
69
+ call = (func) -> func()
70
+
71
+ result = call ->
72
+ inner = call ->
73
+ Math.Add(5, 5)
74
+
75
+ ok result is 10
76
+
77
+
78
+ # More fun with optional parens.
79
+ fn = (arg) -> arg
80
+
81
+ ok fn(fn {prop: 101}).prop is 101
82
+
83
+
84
+ # Multi-blocks with optional parens.
85
+ result = fn( ->
86
+ fn ->
87
+ "Wrapped"
88
+ )
89
+
90
+ ok result()() is 'Wrapped'
91
+
92
+
93
+ # And even with strange things like this:
94
+ funcs = [((x) -> x), ((x) -> x * x)]
95
+ result = funcs[1] 5
96
+
97
+ ok result is 25
98
+
99
+ result = ("hello".slice) 3
100
+
101
+ ok result is 'lo'
102
+
103
+
104
+ # And with multiple single-line functions on the same line.
105
+ func = (x) -> (x) -> (x) -> x
106
+ ok func(1)(2)(3) is 3
107
+
108
+
109
+ # Ensure that functions with the same name don't clash with helper functions.
110
+ del = -> 5
111
+ ok del() is 5
112
+
113
+ # Ensure that functions can have a trailing comma in their argument list
114
+ mult = (x, mids..., y) ->
115
+ x *= n for n in mids
116
+ x *= y
117
+
118
+ ok mult(1, 2,) is 2
119
+ ok mult(1, 2, 3,) is 6
120
+ ok mult(10, (i for i in [1..6])...) is 7200
121
+
122
+
123
+ # Test for inline functions with parentheses and implicit calls.
124
+ combine = (func, num) -> func() * num
125
+ result = combine (-> 1 + 2), 3
126
+
127
+ ok result is 9
128
+
129
+
130
+ # Test for calls/parens/multiline-chains.
131
+ f = (x) -> x
132
+ result = (f 1).toString()
133
+ .length
134
+
135
+ ok result is 1
136
+
137
+
138
+ # Test implicit calls in functions in parens:
139
+ result = ((val) ->
140
+ [].push val
141
+ val
142
+ )(10)
143
+
144
+ ok result is 10
145
+
146
+
147
+ # More paren compilation tests:
148
+ reverse = (obj) -> obj.reverse()
149
+ ok reverse([1, 2].concat 3).join(' ') is '3 2 1'
150
+
151
+ # Passing multiple functions without paren-wrapping is legal, and should compile.
152
+ sum = (one, two) -> one() + two()
153
+ result = sum ->
154
+ 7 + 9
155
+ , ->
156
+ 1 + 3
157
+
158
+ ok result is 20
159
+
160
+
161
+ # Implicit call with a trailing if statement as a param.
162
+ func = -> arguments[1]
163
+ result = func 'one', if false then 100 else 13
164
+ ok result is 13
165
+
166
+
167
+ # Test more function passing:
168
+ result = sum( ->
169
+ 1 + 2
170
+ , ->
171
+ 2 + 1
172
+ )
173
+ ok result is 6
174
+
175
+ sum = (a, b) -> a + b
176
+ result = sum(1
177
+ , 2)
178
+
179
+ ok result is 3
180
+
181
+
182
+ # This is a crazy one.
183
+ x = (obj, func) -> func obj
184
+ ident = (x) -> x
185
+
186
+ result = x {one: ident 1}, (obj) ->
187
+ inner = ident(obj)
188
+ ident inner
189
+
190
+ ok result.one is 1
191
+
192
+
193
+ # Assignment to a Object.prototype-named variable should not leak to outer scope.
194
+ # FIXME: fails on IE
195
+ (->
196
+ constructor = 'word'
197
+ )()
198
+
199
+ ok constructor isnt 'word'
200
+
201
+
202
+ # Trying an implicit object call with a trailing function.
203
+ a = null
204
+ meth = (arg, obj, func) -> a = [obj.a, arg, func()].join ' '
205
+
206
+ meth 'apple', b: 1, a: 13, ->
207
+ 'orange'
208
+
209
+ ok a is '13 apple orange'
210
+
211
+
212
+ # Ensure that empty functions don't return mistaken values.
213
+ obj =
214
+ func: (@param, @rest...) ->
215
+
216
+ ok obj.func(101, 102, 103, 104) is undefined
217
+ ok obj.param is 101
218
+ ok obj.rest.join(' ') is '102 103 104'
219
+
220
+
221
+ # `@` and `this` should both be able to invoke a method.
222
+ func = (arg) -> ok arg is true
223
+ func.withAt = -> @ true
224
+ func.withThis = -> this true
225
+
226
+ func.withAt()
227
+ func.withThis()
228
+
229
+
230
+ # Ensure that constructors invoked with splats return a new object.
231
+ args = [1, 2, 3]
232
+ Type = (@args) ->
233
+ type = new Type args
234
+
235
+ ok type and type instanceof Type
236
+ ok type.args and type.args instanceof Array
237
+ ok v is args[i] for v, i in type.args
238
+
239
+ Type1 = (@a, @b, @c) ->
240
+ type1 = new Type1 args...
241
+
242
+ ok type1 instanceof Type1
243
+ eq type1.constructor, Type1
244
+ ok type1.a is args[0] and type1.b is args[1] and type1.c is args[2]
245
+
246
+
247
+ # Ensure that constructors invoked with splats cache the function.
248
+ called = 0
249
+ get = -> if called++ then false else class Type
250
+ new get() args...
251
+
252
+
253
+ # Chained blocks, with proper indentation levels:
254
+ counter =
255
+ results: []
256
+ tick: (func) ->
257
+ @results.push func()
258
+ this
259
+
260
+ counter
261
+ .tick ->
262
+ 3
263
+ .tick ->
264
+ 2
265
+ .tick ->
266
+ 1
267
+
268
+ eq counter.results.join(' '), '3 2 1'
269
+
270
+
271
+ # Make incorrect indentation safe.
272
+ func = ->
273
+ obj = {
274
+ key: 10
275
+ }
276
+ obj.key - 5
277
+
278
+ eq func(), 5
279
+
280
+
281
+ # Ensure that chained calls with indented implicit object literals below are
282
+ # alright.
283
+ result = null
284
+ obj =
285
+ method: (val) -> this
286
+ second: (hash) -> result = hash.three
287
+
288
+
289
+ obj
290
+ .method(
291
+ 101
292
+ ).second(
293
+ one:
294
+ two: 2
295
+ three: 3
296
+ )
297
+
298
+ eq result, 3
299
+
300
+
301
+ # Test newline-supressed call chains with nested functions.
302
+ obj =
303
+ call: -> this
304
+ func = ->
305
+ obj
306
+ .call ->
307
+ one two
308
+ .call ->
309
+ three four
310
+ 101
311
+
312
+ eq func(), 101
313
+
314
+
315
+ # `new` shouldn't add extra parens
316
+ ok new Date().constructor is Date
317
+
318
+
319
+ # `new` works against bare function
320
+ eq Date, new ->
321
+ eq this, new => this
322
+ Date
323
+
324
+
325
+ # Implicit objects with number arguments.
326
+ func = (x, y) -> y
327
+ obj =
328
+ prop: func "a", 1
329
+
330
+ ok obj.prop is 1
331
+
332
+
333
+ # Non-spaced unary and binary operators should cause a function call.
334
+ func = (val) -> val + 1
335
+ ok (func +5) is 6
336
+ ok (func -5) is -4
337
+
338
+
339
+ # Prefix unary assignment operators are allowed in parenless calls.
340
+ val = 5
341
+ ok (func --val) is 5
342
+
343
+
344
+ eq ok, new ->
345
+ ok
346
+ ### Should `return` implicitly ###
347
+ ### even with trailing comments. ###
348
+
349
+
350
+ #855: execution context for `func arr...` should be `null`
351
+ (->
352
+ global = @
353
+ contextTest = -> ok global is @
354
+ array = []
355
+ contextTest array
356
+ contextTest.apply null, array
357
+ contextTest array...
358
+ )()
359
+
360
+
361
+ # #894: Splatting against constructor-chained functions.
362
+ x = null
363
+
364
+ class Foo
365
+ bar: (y) -> x = y
366
+
367
+ new Foo().bar([101]...)
368
+
369
+ eq x, 101
370
+
371
+
372
+ test "#904: Destructuring function arguments with same-named variables in scope", ->
373
+ a = b = nonce = {}
374
+ fn = ([a,b]) -> {a:a,b:b}
375
+ result = fn([c={},d={}])
376
+ eq c, result.a
377
+ eq d, result.b
378
+ eq nonce, a
379
+ eq nonce, b
@@ -0,0 +1,111 @@
1
+ a = """
2
+ basic heredoc
3
+ on two lines
4
+ """
5
+
6
+ ok a is "basic heredoc\non two lines"
7
+
8
+
9
+ a = '''
10
+ a
11
+ "b
12
+ c
13
+ '''
14
+
15
+ ok a is "a\n \"b\nc"
16
+
17
+
18
+ a = """
19
+ a
20
+ b
21
+ c
22
+ """
23
+
24
+ ok a is "a\n b\n c"
25
+
26
+
27
+ a = '''one-liner'''
28
+
29
+ ok a is 'one-liner'
30
+
31
+
32
+ a = """
33
+ out
34
+ here
35
+ """
36
+
37
+ ok a is "out\nhere"
38
+
39
+
40
+ a = '''
41
+ a
42
+ b
43
+ c
44
+ '''
45
+
46
+ ok a is " a\n b\nc"
47
+
48
+
49
+ a = '''
50
+ a
51
+
52
+
53
+ b c
54
+ '''
55
+
56
+ ok a is "a\n\n\nb c"
57
+
58
+
59
+ a = '''more"than"one"quote'''
60
+
61
+ ok a is 'more"than"one"quote'
62
+
63
+
64
+ val = 10
65
+
66
+ a = """
67
+ basic heredoc #{val}
68
+ on two lines
69
+ """
70
+
71
+ b = '''
72
+ basic heredoc #{val}
73
+ on two lines
74
+ '''
75
+
76
+ ok a is "basic heredoc 10\non two lines"
77
+ ok b is "basic heredoc \#{val}\non two lines"
78
+
79
+
80
+ a = '''here's an apostrophe'''
81
+ ok a is "here's an apostrophe"
82
+
83
+
84
+ # The indentation detector ignores blank lines without trailing whitespace
85
+ a = """
86
+ one
87
+ two
88
+
89
+ """
90
+ ok a is "one\ntwo\n"
91
+
92
+ eq ''' line 0
93
+ should not be relevant
94
+ to the indent level
95
+ ''', '
96
+ line 0\n
97
+ should not be relevant\n
98
+ to the indent level
99
+ '
100
+
101
+ eq ''' '\\\' ''', " '\\' "
102
+ eq """ "\\\" """, ' "\\" '
103
+
104
+ eq ''' <- keep these spaces -> ''', ' <- keep these spaces -> '
105
+
106
+ eq 'multiline nested "interpolations" work', """multiline #{
107
+ "nested #{(->
108
+ ok yes
109
+ "\"interpolations\""
110
+ )()}"
111
+ } work"""