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