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,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"""
|