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.
- data/.gitignore +2 -0
- data/.gitmodules +6 -0
- data/bin/spadepkg +8 -0
- data/lib/libgems_ext.rb +8 -0
- data/lib/libgems_ext/config_file.rb +33 -0
- data/lib/libgems_ext/dependency_installer.rb +150 -0
- data/lib/libgems_ext/installer.rb +39 -0
- data/lib/libgems_ext/libgems.rb +39 -0
- data/lib/libgems_ext/spec_fetcher.rb +11 -0
- data/lib/spade-packager.rb +1 -0
- data/lib/spade/packager.rb +18 -0
- data/lib/spade/packager/cli.rb +9 -0
- data/lib/spade/packager/cli/base.rb +196 -0
- data/lib/spade/packager/cli/owner.rb +46 -0
- data/lib/spade/packager/cli/project_generator.rb +117 -0
- data/lib/spade/packager/credentials.rb +38 -0
- data/lib/spade/packager/local.rb +50 -0
- data/lib/spade/packager/package.rb +160 -0
- data/lib/spade/packager/remote.rb +98 -0
- data/lib/spade/packager/repository.rb +18 -0
- data/lib/spade/packager/version.rb +5 -0
- data/packages/coffee-script/.gitignore +8 -0
- data/packages/coffee-script/.npmignore +11 -0
- data/packages/coffee-script/Cakefile +229 -0
- data/packages/coffee-script/LICENSE +22 -0
- data/packages/coffee-script/README +47 -0
- data/packages/coffee-script/Rakefile +78 -0
- data/packages/coffee-script/bin/cake +7 -0
- data/packages/coffee-script/bin/coffee +7 -0
- data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
- data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
- data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
- data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
- data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
- data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
- data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
- data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
- data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
- data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
- data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
- data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
- data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
- data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
- data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
- data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
- data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
- data/packages/coffee-script/documentation/css/docs.css +374 -0
- data/packages/coffee-script/documentation/css/idle.css +64 -0
- data/packages/coffee-script/documentation/docs/browser.html +25 -0
- data/packages/coffee-script/documentation/docs/cake.html +43 -0
- data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
- data/packages/coffee-script/documentation/docs/command.html +161 -0
- data/packages/coffee-script/documentation/docs/docco.css +186 -0
- data/packages/coffee-script/documentation/docs/grammar.html +399 -0
- data/packages/coffee-script/documentation/docs/helpers.html +31 -0
- data/packages/coffee-script/documentation/docs/index.html +3 -0
- data/packages/coffee-script/documentation/docs/lexer.html +490 -0
- data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
- data/packages/coffee-script/documentation/docs/optparse.html +78 -0
- data/packages/coffee-script/documentation/docs/repl.html +24 -0
- data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
- data/packages/coffee-script/documentation/docs/scope.html +54 -0
- data/packages/coffee-script/documentation/docs/underscore.html +295 -0
- data/packages/coffee-script/documentation/images/background.png +0 -0
- data/packages/coffee-script/documentation/images/banding.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg.png +0 -0
- data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
- data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
- data/packages/coffee-script/documentation/images/favicon.ico +0 -0
- data/packages/coffee-script/documentation/images/logo.png +0 -0
- data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
- data/packages/coffee-script/documentation/index.html.erb +1607 -0
- data/packages/coffee-script/documentation/js/aliases.js +17 -0
- data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
- data/packages/coffee-script/documentation/js/block_comment.js +4 -0
- data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
- data/packages/coffee-script/documentation/js/classes.js +44 -0
- data/packages/coffee-script/documentation/js/comparisons.js +3 -0
- data/packages/coffee-script/documentation/js/conditionals.js +12 -0
- data/packages/coffee-script/documentation/js/default_args.js +7 -0
- data/packages/coffee-script/documentation/js/do.js +10 -0
- data/packages/coffee-script/documentation/js/embedded.js +4 -0
- data/packages/coffee-script/documentation/js/existence.js +6 -0
- data/packages/coffee-script/documentation/js/expressions.js +15 -0
- data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
- data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
- data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
- data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
- data/packages/coffee-script/documentation/js/functions.js +7 -0
- data/packages/coffee-script/documentation/js/heredocs.js +2 -0
- data/packages/coffee-script/documentation/js/heregexes.js +2 -0
- data/packages/coffee-script/documentation/js/interpolation.js +4 -0
- data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
- data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
- data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
- data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
- data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
- data/packages/coffee-script/documentation/js/overview.js +35 -0
- data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
- data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
- data/packages/coffee-script/documentation/js/prototypes.js +3 -0
- data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
- data/packages/coffee-script/documentation/js/scope.js +8 -0
- data/packages/coffee-script/documentation/js/slices.js +4 -0
- data/packages/coffee-script/documentation/js/soaks.js +2 -0
- data/packages/coffee-script/documentation/js/splats.js +15 -0
- data/packages/coffee-script/documentation/js/splices.js +3 -0
- data/packages/coffee-script/documentation/js/strings.js +2 -0
- data/packages/coffee-script/documentation/js/switch.js +23 -0
- data/packages/coffee-script/documentation/js/try.js +8 -0
- data/packages/coffee-script/documentation/js/while.js +18 -0
- data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
- data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
- data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
- data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
- data/packages/coffee-script/examples/blocks.coffee +54 -0
- data/packages/coffee-script/examples/code.coffee +167 -0
- data/packages/coffee-script/examples/computer_science/README +4 -0
- data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
- data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
- data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
- data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
- data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
- data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
- data/packages/coffee-script/examples/poignant.coffee +181 -0
- data/packages/coffee-script/examples/potion.coffee +206 -0
- data/packages/coffee-script/examples/underscore.coffee +682 -0
- data/packages/coffee-script/examples/web_server.coffee +12 -0
- data/packages/coffee-script/extras/EXTRAS +7 -0
- data/packages/coffee-script/extras/coffee-script.js +8 -0
- data/packages/coffee-script/extras/jsl.conf +44 -0
- data/packages/coffee-script/index.html +2515 -0
- data/packages/coffee-script/lib/browser.js +52 -0
- data/packages/coffee-script/lib/cake.js +76 -0
- data/packages/coffee-script/lib/coffee-script.js +82 -0
- data/packages/coffee-script/lib/command.js +263 -0
- data/packages/coffee-script/lib/grammar.js +581 -0
- data/packages/coffee-script/lib/helpers.js +66 -0
- data/packages/coffee-script/lib/index.js +8 -0
- data/packages/coffee-script/lib/lexer.js +633 -0
- data/packages/coffee-script/lib/nodes.js +2165 -0
- data/packages/coffee-script/lib/optparse.js +111 -0
- data/packages/coffee-script/lib/parser.js +649 -0
- data/packages/coffee-script/lib/repl.js +42 -0
- data/packages/coffee-script/lib/rewriter.js +353 -0
- data/packages/coffee-script/lib/scope.js +120 -0
- data/packages/coffee-script/lib/spade-format.js +45 -0
- data/packages/coffee-script/package.json +26 -0
- data/packages/coffee-script/src/browser.coffee +43 -0
- data/packages/coffee-script/src/cake.coffee +69 -0
- data/packages/coffee-script/src/coffee-script.coffee +92 -0
- data/packages/coffee-script/src/command.coffee +214 -0
- data/packages/coffee-script/src/grammar.coffee +590 -0
- data/packages/coffee-script/src/helpers.coffee +56 -0
- data/packages/coffee-script/src/index.coffee +2 -0
- data/packages/coffee-script/src/lexer.coffee +653 -0
- data/packages/coffee-script/src/nodes.coffee +1754 -0
- data/packages/coffee-script/src/optparse.coffee +99 -0
- data/packages/coffee-script/src/repl.coffee +42 -0
- data/packages/coffee-script/src/rewriter.coffee +326 -0
- data/packages/coffee-script/src/scope.coffee +94 -0
- data/packages/coffee-script/test/arguments.coffee +127 -0
- data/packages/coffee-script/test/assignment.coffee +98 -0
- data/packages/coffee-script/test/break.coffee +18 -0
- data/packages/coffee-script/test/comments.coffee +201 -0
- data/packages/coffee-script/test/conditionals.coffee +181 -0
- data/packages/coffee-script/test/exception_handling.coffee +90 -0
- data/packages/coffee-script/test/helpers.coffee +96 -0
- data/packages/coffee-script/test/importing.coffee +18 -0
- data/packages/coffee-script/test/operators.coffee +225 -0
- data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
- data/packages/coffee-script/test/regular_expressions.coffee +56 -0
- data/packages/coffee-script/test/test.html +123 -0
- data/packages/coffee-script/test/test_chaining.coffee +77 -0
- data/packages/coffee-script/test/test_classes.coffee +372 -0
- data/packages/coffee-script/test/test_compilation.coffee +26 -0
- data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
- data/packages/coffee-script/test/test_existence.coffee +165 -0
- data/packages/coffee-script/test/test_functions.coffee +379 -0
- data/packages/coffee-script/test/test_heredocs.coffee +111 -0
- data/packages/coffee-script/test/test_literals.coffee +270 -0
- data/packages/coffee-script/test/test_option_parser.coffee +27 -0
- data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
- data/packages/coffee-script/test/test_returns.coffee +63 -0
- data/packages/coffee-script/test/test_splats.coffee +102 -0
- data/packages/coffee-script/test/test_strings.coffee +118 -0
- data/packages/coffee-script/test/test_switch.coffee +103 -0
- data/packages/coffee-script/test/test_while.coffee +71 -0
- data/packages/ivory/LICENSE.txt +1 -0
- data/packages/ivory/README.md +19 -0
- data/packages/ivory/lib/buffer.js +111 -0
- data/packages/ivory/lib/events.js +137 -0
- data/packages/ivory/lib/fs.js +266 -0
- data/packages/ivory/lib/main.js +13 -0
- data/packages/ivory/lib/path.js +158 -0
- data/packages/ivory/lib/ruby/buffer.rb +145 -0
- data/packages/ivory/lib/ruby/constants.rb +585 -0
- data/packages/ivory/lib/ruby/events.rb +32 -0
- data/packages/ivory/lib/ruby/fs.rb +245 -0
- data/packages/ivory/lib/ruby/process.rb +28 -0
- data/packages/ivory/lib/stream.js +115 -0
- data/packages/ivory/lib/util.js +414 -0
- data/packages/ivory/package.json +11 -0
- data/packages/ivory/spade-boot.js +78 -0
- data/packages/jquery/main.js +7179 -0
- data/packages/jquery/package.json +10 -0
- data/packages/json/lib/main.js +14 -0
- data/packages/json/package.json +8 -0
- data/packages/lproj/README.md +77 -0
- data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
- data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
- data/packages/lproj/examples/demo-app/index.html +8 -0
- data/packages/lproj/examples/demo-app/lib/main.js +7 -0
- data/packages/lproj/examples/demo-app/package.json +9 -0
- data/packages/lproj/lib/main.js +78 -0
- data/packages/lproj/lib/strings-format.js +6 -0
- data/packages/lproj/package.json +9 -0
- data/packages/optparse/README.md +161 -0
- data/packages/optparse/TODO +1 -0
- data/packages/optparse/examples/browser-test.html +75 -0
- data/packages/optparse/examples/nodejs-test.js +90 -0
- data/packages/optparse/lib/optparse.js +309 -0
- data/packages/optparse/package.json +13 -0
- data/packages/optparse/seed.yml +5 -0
- data/packages/text/lib/main.js +8 -0
- data/packages/text/package.json +9 -0
- data/packages/web-file/README.md +7 -0
- data/packages/web-file/lib/errors.js +32 -0
- data/packages/web-file/lib/file-reader.js +10 -0
- data/packages/web-file/lib/file-system.js +234 -0
- data/packages/web-file/lib/file-writer.js +10 -0
- data/packages/web-file/lib/file.js +9 -0
- data/packages/web-file/lib/main.js +34 -0
- data/packages/web-file/lib/platform.js +25 -0
- data/packages/web-file/lib/ruby/file.rb +252 -0
- data/packages/web-file/lib/ruby/file_reader.rb +69 -0
- data/packages/web-file/lib/ruby/file_system.rb +134 -0
- data/packages/web-file/lib/ruby/file_writer.rb +78 -0
- data/packages/web-file/package.json +12 -0
- data/packages/web-typed-array/README.md +7 -0
- data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
- data/packages/web-typed-array/lib/array-buffer.js +7 -0
- data/packages/web-typed-array/lib/main.js +33 -0
- data/packages/web-typed-array/lib/platform.js +20 -0
- data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
- data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
- data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
- data/packages/web-typed-array/lib/typed-array.js +26 -0
- data/packages/web-typed-array/package.json +9 -0
- data/spade-packager.gemspec +39 -0
- data/spec/cli/build_spec.rb +57 -0
- data/spec/cli/install_spec.rb +119 -0
- data/spec/cli/installed_spec.rb +55 -0
- data/spec/cli/list_spec.rb +74 -0
- data/spec/cli/login_spec.rb +75 -0
- data/spec/cli/new_spec.rb +5 -0
- data/spec/cli/owner_spec.rb +114 -0
- data/spec/cli/push_spec.rb +73 -0
- data/spec/cli/uninstall_spec.rb +58 -0
- data/spec/cli/unpack_spec.rb +72 -0
- data/spec/cli/unyank_spec.rb +73 -0
- data/spec/cli/yank_spec.rb +73 -0
- data/spec/credentials_spec.rb +23 -0
- data/spec/fixtures/badrake-0.8.7.spd +0 -0
- data/spec/fixtures/builder-3.0.0.spd +0 -0
- data/spec/fixtures/bundler-1.1.pre.spd +0 -0
- data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
- data/spec/fixtures/core-test-0.4.3.spd +0 -0
- data/spec/fixtures/core-test/bin/cot +3 -0
- data/spec/fixtures/core-test/lib/main.js +1 -0
- data/spec/fixtures/core-test/resources/runner.css +0 -0
- data/spec/fixtures/core-test/tests/test.js +1 -0
- data/spec/fixtures/highline-1.6.1.spd +0 -0
- data/spec/fixtures/ivory-0.0.1.spd +0 -0
- data/spec/fixtures/jquery-1.4.3.spd +0 -0
- data/spec/fixtures/optparse-1.0.1.spd +0 -0
- data/spec/fixtures/package.json +30 -0
- data/spec/fixtures/rake-0.8.6.spd +0 -0
- data/spec/fixtures/rake-0.8.7.spd +0 -0
- data/spec/gauntlet_spec.rb +27 -0
- data/spec/package_spec.rb +267 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/cli.rb +103 -0
- data/spec/support/fake.rb +48 -0
- data/spec/support/fake_gem_server.rb +67 -0
- data/spec/support/fake_gemcutter.rb +50 -0
- data/spec/support/matchers.rb +32 -0
- data/spec/support/path.rb +61 -0
- data/templates/project/LICENSE +19 -0
- data/templates/project/README.md +21 -0
- data/templates/project/lib/main.js +9 -0
- data/templates/project/project.json +31 -0
- data/templates/project/tests/main-test.js +8 -0
- 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)
|