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,181 @@
1
+ # Conditionals
2
+ # ------------
3
+
4
+ # shared identity function
5
+ id = (_) -> if arguments.length is 1 then _ else Array::slice.call(arguments)
6
+
7
+ #### Basic Conditionals
8
+
9
+ test "basic conditionals", ->
10
+ if false
11
+ ok false
12
+ else if false
13
+ ok false
14
+ else
15
+ ok true
16
+
17
+ if true
18
+ ok true
19
+ else if true
20
+ ok false
21
+ else
22
+ ok true
23
+
24
+ unless true
25
+ ok false
26
+ else unless true
27
+ ok false
28
+ else
29
+ ok true
30
+
31
+ unless false
32
+ ok true
33
+ else unless false
34
+ ok false
35
+ else
36
+ ok true
37
+
38
+ test "single-line conditional", ->
39
+ if false then ok false else ok true
40
+ unless false then ok true else ok false
41
+
42
+ test "nested conditionals", ->
43
+ nonce = {}
44
+ eq nonce, (if true
45
+ unless false
46
+ if false then false else
47
+ if true
48
+ nonce)
49
+
50
+ test "nested single-line conditionals", ->
51
+ nonce = {}
52
+
53
+ a = if false then undefined else b = if 0 then undefined else nonce
54
+ eq nonce, a
55
+ eq nonce, b
56
+
57
+ c = if false then undefined else (if 0 then undefined else nonce)
58
+ eq nonce, c
59
+
60
+ d = if true then id(if false then undefined else nonce)
61
+ eq nonce, d
62
+
63
+ test "empty conditional bodies", ->
64
+ eq undefined, (if false
65
+ else if false
66
+ else)
67
+
68
+ test "conditional bodies containing only comments", ->
69
+ eq undefined, (if true
70
+ ###
71
+ block comment
72
+ ###
73
+ else
74
+ # comment
75
+ )
76
+
77
+ eq undefined, (if false
78
+ # comment
79
+ else if true
80
+ ###
81
+ block comment
82
+ ###
83
+ else)
84
+
85
+ test "return value of if-else is from the proper body", ->
86
+ nonce = {}
87
+ eq nonce, if false then undefined else nonce
88
+
89
+ test "return value of unless-else is from the proper body", ->
90
+ nonce = {}
91
+ eq nonce, unless true then undefined else nonce
92
+
93
+
94
+ #### Interactions With Functions
95
+
96
+ test "single-line function definition with single-line conditional", ->
97
+ fn = -> if 1 < 0.5 then 1 else -1
98
+ ok fn() is -1
99
+
100
+ test "function resturns conditional value with no `else`", ->
101
+ fn = ->
102
+ return if false then true
103
+ eq undefined, fn()
104
+
105
+ test "function returns a conditional value", ->
106
+ a = {}
107
+ fnA = ->
108
+ return if false then undefined else a
109
+ eq a, fnA()
110
+
111
+ b = {}
112
+ fnB = ->
113
+ return unless false then b else undefined
114
+ eq b, fnB()
115
+
116
+ test "passing a conditional value to a function", ->
117
+ nonce = {}
118
+ eq nonce, id if false then undefined else nonce
119
+
120
+ test "unmatched `then` should catch implicit calls", ->
121
+ a = 0
122
+ trueFn = -> true
123
+ if trueFn undefined then a += 1
124
+ eq 1, a
125
+
126
+
127
+ #### if-to-ternary
128
+
129
+ test "if-to-ternary with instanceof requires parentheses", ->
130
+ nonce = {}
131
+ eq nonce, (if {} instanceof Object
132
+ nonce
133
+ else
134
+ undefined)
135
+
136
+ test "if-to-ternary as part of a larger operation requires parentheses", ->
137
+ ok 2, 1 + if false then 0 else 1
138
+
139
+
140
+ #### Odd Formatting
141
+
142
+ test "if-else indented within an assignment", ->
143
+ nonce = {}
144
+ result =
145
+ if false
146
+ undefined
147
+ else
148
+ nonce
149
+ eq nonce, result
150
+
151
+ test "suppressed indentation via assignment", ->
152
+ nonce = {}
153
+ result =
154
+ if false then undefined
155
+ else if no then undefined
156
+ else if 0 then undefined
157
+ else if 1 < 0 then undefined
158
+ else id(
159
+ if false then undefined
160
+ else nonce
161
+ )
162
+ eq nonce, result
163
+
164
+ test "tight formatting with leading `then`", ->
165
+ nonce = {}
166
+ eq nonce,
167
+ if true
168
+ then nonce
169
+ else undefined
170
+
171
+ test "#738", ->
172
+ nonce = {}
173
+ fn = if true then -> nonce
174
+ eq nonce, fn()
175
+
176
+ test "#748: trailing reserved identifiers", ->
177
+ nonce = {}
178
+ obj = delete: true
179
+ result = if obj.delete
180
+ nonce
181
+ eq nonce, result
@@ -0,0 +1,90 @@
1
+ # Exceptions
2
+ # ----------
3
+
4
+ # shared nonce
5
+ nonce = {}
6
+
7
+
8
+ #### Throw
9
+
10
+ test "basic exception throwing", ->
11
+ throws (-> throw 'error'), 'error'
12
+
13
+
14
+ #### Empty Try/Catch/Finally
15
+
16
+ test "try can exist alone", ->
17
+ try
18
+
19
+ test "try/catch with empty try, empty catch", ->
20
+ try
21
+ # nothing
22
+ catch err
23
+ # nothing
24
+
25
+ test "single-line try/catch with empty try, empty catch", ->
26
+ try catch err
27
+
28
+ test "try/finally with empty try, empty finally", ->
29
+ try
30
+ # nothing
31
+ finally
32
+ # nothing
33
+
34
+ test "single-line try/finally with empty try, empty finally", ->
35
+ try finally
36
+
37
+ test "try/catch/finally with empty try, empty catch, empty finally", ->
38
+ try
39
+ catch err
40
+ finally
41
+
42
+ test "single-line try/catch/finally with empty try, empty catch, empty finally", ->
43
+ try catch err then finally
44
+
45
+
46
+ #### Try/Catch/Finally as an Expression
47
+
48
+ test "return the result of try when no exception is thrown", ->
49
+ result = try
50
+ nonce
51
+ catch err
52
+ undefined
53
+ finally
54
+ undefined
55
+ eq nonce, result
56
+
57
+ test "single-line result of try when no exception is thrown", ->
58
+ result = try nonce catch err then undefined
59
+ eq nonce, result
60
+
61
+ test "return the result of catch when an exception is thrown", ->
62
+ fn = ->
63
+ try
64
+ throw ->
65
+ catch err
66
+ nonce
67
+ doesNotThrow fn
68
+ eq nonce, fn()
69
+
70
+ test "single-line result of catch when an exception is thrown", ->
71
+ fn = ->
72
+ try throw (->) catch err then nonce
73
+ doesNotThrow fn
74
+ eq nonce, fn()
75
+
76
+ test "optional catch", ->
77
+ fn = ->
78
+ try throw ->
79
+ nonce
80
+ doesNotThrow fn
81
+ eq nonce, fn()
82
+
83
+
84
+ #### Try/Catch/Finally Interaction With Other Constructs
85
+
86
+ test "try/catch with empty catch as last statement in a function body", ->
87
+ fn = ->
88
+ try nonce
89
+ catch err
90
+ eq nonce, fn()
@@ -0,0 +1,96 @@
1
+ # Helpers
2
+ # -------
3
+
4
+ # pull the helpers from `CoffeeScript.helpers` into local variables
5
+ {starts, ends, compact, count, merge, extend, flatten, del, last} = CoffeeScript.helpers
6
+
7
+
8
+ #### `starts`
9
+
10
+ test "the `starts` helper tests if a string starts with another string", ->
11
+ ok starts('01234', '012')
12
+ ok not starts('01234', '123')
13
+
14
+ test "the `starts` helper can take an optional offset", ->
15
+ ok starts('01234', '34', 3)
16
+ ok not starts('01234', '01', 1)
17
+
18
+
19
+ #### `ends`
20
+
21
+ test "the `ends` helper tests if a string ends with another string", ->
22
+ ok ends('01234', '234')
23
+ ok not ends('01234', '012')
24
+
25
+ test "the `ends` helper can take an optional offset", ->
26
+ ok ends('01234', '012', 2)
27
+ ok not ends('01234', '234', 6)
28
+
29
+
30
+ #### `compact`
31
+
32
+ test "the `compact` helper removes falsey values from an array, preserves truthy ones", ->
33
+ allValues = [1, 0, false, obj={}, [], '', ' ', -1, null, undefined, true]
34
+ truthyValues = [1, obj, [], ' ', -1, true]
35
+ arrayEq truthyValues, compact(allValues)
36
+
37
+
38
+ #### `count`
39
+
40
+ test "the `count` helper counts the number of occurances of a string in another string", ->
41
+ eq 1/0, count('abc', '')
42
+ eq 0, count('abc', 'z')
43
+ eq 1, count('abc', 'a')
44
+ eq 1, count('abc', 'b')
45
+ eq 2, count('abcdc', 'c')
46
+ eq 2, count('abcdabcd','abc')
47
+
48
+
49
+ #### `merge`
50
+
51
+ test "the `merge` helper makes a new object with all properties of the objects given as its arguments", ->
52
+ ary = [0, 1, 2, 3, 4]
53
+ obj = {}
54
+ merged = merge obj, ary
55
+ ok merged isnt obj
56
+ ok merged isnt ary
57
+ for own key, val of ary
58
+ eq val, merged[key]
59
+
60
+
61
+ #### `extend`
62
+
63
+ test "the `extend` helper performs a shallow copy", ->
64
+ ary = [0, 1, 2, 3]
65
+ obj = {}
66
+ # should return the object being extended
67
+ eq obj, extend(obj, ary)
68
+ # should copy the other object's properties as well (obviously)
69
+ eq 2, obj[2]
70
+
71
+
72
+ #### `flatten`
73
+
74
+ test "the `flatten` helper flattens an array", ->
75
+ success = yes
76
+ (success and= typeof n is 'number') for n in flatten [0, [[[1]], 2], 3, [4]]
77
+ ok success
78
+
79
+
80
+ #### `del`
81
+
82
+ test "the `del` helper deletes a property from an object and returns the deleted value", ->
83
+ obj = [0, 1, 2]
84
+ eq 1, del(obj, 1)
85
+ ok 1 not of obj
86
+
87
+
88
+ #### `last`
89
+
90
+ test "the `last` helper returns the last item of an array-like object", ->
91
+ ary = [0, 1, 2, 3, 4]
92
+ eq 4, last(ary)
93
+
94
+ test "the `last` helper allows one to specify an optional offset", ->
95
+ ary = [0, 1, 2, 3, 4]
96
+ eq 2, last(ary, 2)
@@ -0,0 +1,18 @@
1
+ # Importing
2
+ # ---------
3
+
4
+ unless window? or testingBrowser?
5
+ test "coffeescript modules can be imported and executed", ->
6
+
7
+ magicKey = __filename
8
+ magicValue = 0xFFFF
9
+
10
+ if global[magicKey]?
11
+ if exports?
12
+ local = magicValue
13
+ exports.method = -> local
14
+ else
15
+ global[magicKey] = {}
16
+ if require?.extensions? or require?.registerExtension?
17
+ ok require(__filename).method() is magicValue
18
+ delete global[magicKey]
@@ -0,0 +1,225 @@
1
+ # Operators
2
+ # ---------
3
+
4
+ test "binary (2-ary) math operators do not require spaces", ->
5
+ a = 1
6
+ b = -1
7
+ eq +1, a*-b
8
+ eq -1, a*+b
9
+ eq +1, a/-b
10
+ eq -1, a/+b
11
+
12
+ test "operators should respect new lines as spaced", ->
13
+ a = 123 +
14
+ 456
15
+ eq 579, a
16
+
17
+ b = "1#{2}3" +
18
+ "456"
19
+ eq '123456', b
20
+
21
+ test "multiple operators should space themselves", ->
22
+ eq (+ +1), (- -1)
23
+
24
+ test "bitwise operators", ->
25
+ eq 2, (10 & 3)
26
+ eq 11, (10 | 3)
27
+ eq 9, (10 ^ 3)
28
+ eq 80, (10 << 3)
29
+ eq 1, (10 >> 3)
30
+ eq 1, (10 >>> 3)
31
+ num = 10; eq 2, (num &= 3)
32
+ num = 10; eq 11, (num |= 3)
33
+ num = 10; eq 9, (num ^= 3)
34
+ num = 10; eq 80, (num <<= 3)
35
+ num = 10; eq 1, (num >>= 3)
36
+ num = 10; eq 1, (num >>>= 3)
37
+
38
+ test "`instanceof`", ->
39
+ ok new String instanceof String
40
+ ok new Boolean instanceof Boolean
41
+ # `instanceof` supports negation by prefixing the operator with `not`
42
+ ok new Number not instanceof String
43
+ ok new Array not instanceof Boolean
44
+
45
+
46
+ #### Compound Assignment Operators
47
+
48
+ test "boolean operators", ->
49
+ nonce = {}
50
+
51
+ a = 0
52
+ a or= nonce
53
+ eq nonce, a
54
+
55
+ b = 1
56
+ b or= nonce
57
+ eq 1, b
58
+
59
+ c = 0
60
+ c and= nonce
61
+ eq 0, c
62
+
63
+ d = 1
64
+ d and= nonce
65
+ eq nonce, d
66
+
67
+ # ensure that RHS is treated as a group
68
+ e = f = false
69
+ e and= f or true
70
+ eq false, e
71
+
72
+ test "compound assignment as a sub expression", ->
73
+ [a, b, c] = [1, 2, 3]
74
+ eq 6, (a + b += c)
75
+ eq 1, a
76
+ eq 5, b
77
+ eq 3, c
78
+
79
+ # *note: this test could still use refactoring*
80
+ test "compound assignment should be careful about caching variables", ->
81
+ count = 0
82
+ list = []
83
+
84
+ list[++count] or= 1
85
+ eq 1, list[1]
86
+ eq 1, count
87
+
88
+ list[++count] ?= 2
89
+ eq 2, list[2]
90
+ eq 2, count
91
+
92
+ list[count++] and= 6
93
+ eq 6, list[2]
94
+ eq 3, count
95
+
96
+ base = ->
97
+ ++count
98
+ base
99
+
100
+ base().four or= 4
101
+ eq 4, base.four
102
+ eq 4, count
103
+
104
+ base().five ?= 5
105
+ eq 5, base.five
106
+ eq 5, count
107
+
108
+ test "compound assignment with implicit objects", ->
109
+ obj = undefined
110
+ obj ?=
111
+ one: 1
112
+
113
+ eq 1, obj.one
114
+
115
+ obj and=
116
+ two: 2
117
+
118
+ eq undefined, obj.one
119
+ eq 2, obj.two
120
+
121
+
122
+ #### `is`,`isnt`,`==`,`!=`
123
+
124
+ test "`==` and `is` should be interchangeable", ->
125
+ a = b = 1
126
+ ok a is 1 and b == 1
127
+ ok a == b
128
+ ok a is b
129
+
130
+ test "`!=` and `isnt` should be interchangeable", ->
131
+ a = 0
132
+ b = 1
133
+ ok a isnt 1 and b != 0
134
+ ok a != b
135
+ ok a isnt b
136
+
137
+
138
+ #### `in`, `of`
139
+
140
+ # - `in` should check if an array contains a value using `indexOf`
141
+ # - `of` should check if a property is defined on an object using `in`
142
+ test "in, of", ->
143
+ arr = [1]
144
+ ok 0 of arr
145
+ ok 1 in arr
146
+ # prefixing `not` to `in and `of` should negate them
147
+ ok 1 not of arr
148
+ ok 0 not in arr
149
+
150
+ test "`in` should be able to operate on an array literal", ->
151
+ ok 2 in [0, 1, 2, 3]
152
+ ok 4 not in [0, 1, 2, 3]
153
+ arr = [0, 1, 2, 3]
154
+ ok 2 in arr
155
+ ok 4 not in arr
156
+ # should cache the value used to test the array
157
+ arr = [0]
158
+ val = 0
159
+ ok val++ in arr
160
+ ok val++ not in arr
161
+ val = 0
162
+ ok val++ of arr
163
+ ok val++ not of arr
164
+
165
+ test "`of` and `in` should be able to operate on instance variables", ->
166
+ obj = {
167
+ list: [2,3]
168
+ in_list: (value) -> value in @list
169
+ not_in_list: (value) -> value not in @list
170
+ of_list: (value) -> value of @list
171
+ not_of_list: (value) -> value not of @list
172
+ }
173
+ ok obj.in_list 3
174
+ ok obj.not_in_list 1
175
+ ok obj.of_list 0
176
+ ok obj.not_of_list 2
177
+
178
+ test "#???: `in` with cache and `__indexOf` should work in argument lists", ->
179
+ eq 1, [Object() in Array()].length
180
+
181
+ test "#737: `in` should have higher precedence than logical operators", ->
182
+ eq 1, 1 in [1] and 1
183
+
184
+ test "#768: `in` should preserve evaluation order", ->
185
+ share = 0
186
+ a = -> share++ if share is 0
187
+ b = -> share++ if share is 1
188
+ c = -> share++ if share is 2
189
+ ok a() not in [b(),c()]
190
+ eq 3, share
191
+
192
+
193
+ #### Chainable Operators
194
+
195
+ test "chainable operators", ->
196
+ ok 100 > 10 > 1 > 0 > -1
197
+ ok -1 < 0 < 1 < 10 < 100
198
+
199
+ test "`is` and `isnt` may be chained", ->
200
+ ok true is not false is true is not false
201
+ ok 0 is 0 isnt 1 is 1
202
+
203
+ test "different comparison operators (`>`,`<`,`is`,etc.) may be combined", ->
204
+ ok 1 < 2 > 1
205
+ ok 10 < 20 > 2+3 is 5
206
+
207
+ test "some chainable operators can be negated by `unless`", ->
208
+ ok (true unless 0==10!=100)
209
+
210
+ test "operator precedence: `|` lower than `<`", ->
211
+ eq 1, 1 | 2 < 3 < 4
212
+
213
+ test "preserve references", ->
214
+ a = b = c = 1
215
+ # `a == b <= c` should become `a === b && b <= c`
216
+ # (this test does not seem to test for this)
217
+ ok a == b <= c
218
+
219
+ test "chained operations should evaluate each value only once", ->
220
+ a = 0
221
+ ok 1 > a++ < 1
222
+
223
+ test "#891: incorrect inversion of chained comparisons", ->
224
+ ok (true unless 0 > 1 > 2)
225
+ ok (true unless (NaN = 0/0) < 0/0 < NaN)