2010-10-11 22:22:01 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
|
|
<title>CoffeeScript Test Suite</title>
|
2017-02-13 01:00:05 +00:00
|
|
|
<script src="browser-compiler/coffeescript.js"></script>
|
2016-11-30 06:20:38 +00:00
|
|
|
<script src="https://cdn.jsdelivr.net/underscorejs/1.8.3/underscore-min.js"></script>
|
2010-10-11 22:22:01 +00:00
|
|
|
<style>
|
2016-11-30 02:13:12 +00:00
|
|
|
body, pre {
|
|
|
|
font-family: Consolas, Menlo, Monaco, monospace;
|
|
|
|
}
|
2010-10-11 22:22:01 +00:00
|
|
|
body {
|
2016-11-30 02:13:12 +00:00
|
|
|
margin: 1em;
|
2010-10-11 22:22:01 +00:00
|
|
|
}
|
|
|
|
h1 {
|
2016-11-30 02:13:12 +00:00
|
|
|
font-size: 1.3em;
|
|
|
|
}
|
|
|
|
div {
|
|
|
|
margin: 0.6em;
|
|
|
|
}
|
|
|
|
.good {
|
|
|
|
color: #22b24c
|
2010-10-11 22:22:01 +00:00
|
|
|
}
|
2016-11-30 02:13:12 +00:00
|
|
|
.bad {
|
|
|
|
color: #eb6864
|
2010-10-11 22:22:01 +00:00
|
|
|
}
|
2016-11-30 05:37:54 +00:00
|
|
|
.subtle {
|
|
|
|
font-size: 0.7em;
|
|
|
|
color: #999999
|
|
|
|
}
|
2010-10-11 22:22:01 +00:00
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
|
2016-11-30 02:13:12 +00:00
|
|
|
<h1>CoffeeScript Test Suite</h1>
|
|
|
|
|
|
|
|
<pre id="stdout"></pre>
|
|
|
|
|
|
|
|
<script type="text/coffeescript">
|
2016-11-30 05:37:54 +00:00
|
|
|
@testingBrowser = yes
|
2016-11-30 08:34:07 +00:00
|
|
|
@global = window
|
[CS2] Destructuring object spreads (#4493)
* Don’t confuse the syntax highlighter
* Comment Assign::compilePatternMatch a bit
* Assignment expressions in conditionals are a bad practice
* Rename `wrapInBraces` to `wrapInParentheses`, to set the stage for future `wrapInBraces` that uses `{` and `wrapInBrackets` that uses `[`
* Correct comment
* object destructuring
* Allow custom position of the rest element.
* Output simple array destructuring assignments to ES2015
* Output simple object destructured assignments to ES2015
* Compile shorthand object properties to ES2015 shorthand properties
This dramatically improves the appearance of destructured imports.
* Don’t confuse the syntax highlighter
* Comment Assign::compilePatternMatch a bit
* Assignment expressions in conditionals are a bad practice
* Rename `wrapInBraces` to `wrapInParentheses`, to set the stage for future `wrapInBraces` that uses `{` and `wrapInBrackets` that uses `[`
* object destructuring
* Allow custom position of the rest element.
* rest element in object destructuring
* rest element in object destructuring
* fix string interpolation
* merging
* fixing splats in object literal
* Rest element in parameter destructuring
* merging with CS2
* merged with CS2
* Add support for the object spread initializer. https://github.com/tc39/proposal-object-rest-spread/blob/master/Spread.md
* Fix misspellings, trailing whitespace, other minor details
* merging with beta2
* refactor object spread properties
* small fix
* - Fixed object spread function parameters.
- Clean up "Assign" and moved all logic for object rest properties in single method (compileObjectDestruct).
- Add helper function "objectWithoutKeys" to the "UTILITIES" for use with object rest properties,
e.g. {a, b, r...} = obj => {a, b} = obj, r = objectWithoutKeys(...)
- Clean up "Obj" and moved all logic for object spread properties in single method (compileSpread).
- Clean up "Code".
- Add method "hasSplat" to "Obj" and "Value" for checking if Obj contains the splat.
- Enable placing spread syntax triple dots on either right or left, per #85 (https://github.com/coffeescript6/discuss/issues/85)
* Fixed typos
* Remove unused code
* Removed dots (e.g. splat) on the left side from the grammar
* Initial release for deep spread properties, e.g. obj2 = {obj.b..., a: 1} or {obj[b][c]..., d: 7}
Tests need to be prepared!
* 1. Object literal spread properties
Object literals:
- obj = { {b:{c:{d:1}}}..., a:1 }
Parenthetical:
- obj = { ( body ), a:1 }
- obj = { ( body )..., a:1 }
Invocation:
- obj = { ( (args) -> ... )(params), a:1 }
- obj = { ( (args) -> ... )(params)..., a:1 }
- obj = { foo(), a:1 }
- obj = { foo()..., a:1 }
2. Refactor, cleanup & other optimizations.
* Merged with 2.0
* Cleanup
* Some more cleanup.
* Fixed error with freeVariable and object destructuring.
* Fixed errors with object spread properties.
* Improvements, fixed errors.
* Minor improvement.
* Minor improvements.
* Typo.
* Remove unnecessary whitespace.
* Remove unnecessary whitespace.
* Changed few "assertErrorFormat" tests since parentheses are now allowed in the Obj.
* Whitespace cleanup
* Comments cleanup
* fix destructured obj param declarations
* refine fix; add test
* Refactor function args ({a, b...})
* Additional tests for object destructuring in function argument.
* Minor improvement for object destructuring variable declaration.
* refactor function args ({a, b...}) and ({a, b...} = {}); Obj And Param cleanup
* fix comment
* Fix object destructuring variable declaration.
* more tests with default values
* fix typo
* Fixed default values in object destructuring.
* small fix
* Babel’s tests for object rest spread
* Style: spaces after colons in object declarations
* Cleanup comments
* Simplify Babel tests
* Fix comments
* Fix destructuring with splats in multiple objects
* Add test for default values in detsructuring assignment with splats
* Handle default values when assigning to object splats
* Rewrite traverseRest to fix handling of dynamic keys
* Fix double parens around destructuring with splats
* Update compileObjectDestruct comments
* Improve formatting of top-level destructures with splats and tidy parens
* Added a bigger destructuring-with-defaults test and fixed a bug
* Refactor destructuring grammar to allow additional forms
* Add a missing case to ObjSpreadExpr
* These tests shouldn’t run in the browser
* Fix test.html
2017-06-30 05:57:42 +00:00
|
|
|
bold = red = green = reset = ''
|
2017-02-20 23:35:45 +00:00
|
|
|
stdout = document.getElementById 'stdout'
|
|
|
|
start = new Date
|
|
|
|
@currentFile = ''
|
|
|
|
@passedTests = failedTests = total = done = 0
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 05:37:54 +00:00
|
|
|
say = (msg, className) ->
|
2016-11-30 02:13:12 +00:00
|
|
|
div = document.createElement 'div'
|
2016-11-30 05:37:54 +00:00
|
|
|
div.className = className if className?
|
2016-11-30 02:13:12 +00:00
|
|
|
div.appendChild document.createTextNode msg
|
|
|
|
stdout.appendChild div
|
|
|
|
msg
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 02:27:34 +00:00
|
|
|
@test = (description, fn) ->
|
2016-11-30 08:34:07 +00:00
|
|
|
++total
|
|
|
|
try
|
|
|
|
fn.call(fn)
|
2017-02-20 23:35:45 +00:00
|
|
|
++passedTests
|
|
|
|
catch error
|
|
|
|
failures.push
|
|
|
|
error: error
|
|
|
|
description: description
|
|
|
|
source: fn.toString() if fn.toString?
|
|
|
|
|
|
|
|
@failures =
|
|
|
|
push: (failure) -> # Match function called by regular tests
|
|
|
|
++failedTests
|
|
|
|
say "#{failure.description}:", 'bad'
|
|
|
|
say failure.source, 'subtle' if failure.source?
|
|
|
|
say failure.error, 'bad'
|
|
|
|
console.error failure.error
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 06:20:38 +00:00
|
|
|
@ok = (good, msg = 'Error') ->
|
2016-11-30 08:34:07 +00:00
|
|
|
throw Error msg unless good
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 06:20:38 +00:00
|
|
|
# Polyfill Node assert's fail
|
|
|
|
@fail = ->
|
|
|
|
ok no
|
|
|
|
|
|
|
|
# Polyfill Node assert's deepEqual with Underscore's isEqual
|
|
|
|
@deepEqual = (a, b) ->
|
|
|
|
ok _.isEqual(a, b), "Expected #{JSON.stringify a} to deep equal #{JSON.stringify b}"
|
|
|
|
|
2016-11-30 05:19:11 +00:00
|
|
|
<%= testHelpers %>
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 02:13:12 +00:00
|
|
|
@doesNotThrow = (fn) ->
|
|
|
|
fn()
|
2016-11-30 06:20:38 +00:00
|
|
|
ok yes
|
2010-10-11 22:22:01 +00:00
|
|
|
|
2016-11-30 02:13:12 +00:00
|
|
|
@throws = (fun, err, msg) ->
|
|
|
|
try
|
|
|
|
fun()
|
|
|
|
catch e
|
|
|
|
if err
|
2016-11-30 06:20:38 +00:00
|
|
|
if typeof err is 'function' and e instanceof err # Handle comparing exceptions
|
|
|
|
ok yes
|
2016-12-11 07:25:20 +00:00
|
|
|
else if e.toString().indexOf('[stdin]') is 0 # Handle comparing error messages
|
|
|
|
ok err e
|
2016-11-30 06:20:38 +00:00
|
|
|
else
|
|
|
|
eq e, err
|
2010-12-13 11:28:17 +00:00
|
|
|
else
|
2016-11-30 02:13:12 +00:00
|
|
|
ok yes
|
|
|
|
return
|
|
|
|
ok no
|
|
|
|
|
2016-11-30 06:20:38 +00:00
|
|
|
|
2016-11-30 02:13:12 +00:00
|
|
|
# Run the tests
|
|
|
|
for test in document.getElementsByClassName 'test'
|
|
|
|
say '\u2714 ' + test.id
|
2016-11-30 08:34:07 +00:00
|
|
|
options = {}
|
2017-02-20 23:35:45 +00:00
|
|
|
options.filename = currentFile = test.id
|
2016-11-30 08:34:07 +00:00
|
|
|
options.literate = yes if test.type is 'text/x-literate-coffeescript'
|
|
|
|
CoffeeScript.run test.innerHTML, options
|
2016-11-30 02:13:12 +00:00
|
|
|
|
|
|
|
# Finish up
|
2017-02-20 23:35:45 +00:00
|
|
|
yay = passedTests is total and not failedTests
|
2016-11-30 02:13:12 +00:00
|
|
|
sec = (new Date - start) / 1000
|
2017-02-20 23:35:45 +00:00
|
|
|
msg = "passed #{passedTests} tests in #{sec.toFixed 2} seconds"
|
|
|
|
msg = "failed #{total - passedTests} tests and #{msg}" unless yay
|
2016-11-30 05:37:54 +00:00
|
|
|
say msg, (if yay then 'good' else 'bad')
|
2016-11-30 02:13:12 +00:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<%= tests %>
|
2010-10-11 22:22:01 +00:00
|
|
|
|
|
|
|
</body>
|
2010-12-13 11:28:17 +00:00
|
|
|
</html>
|