Commit Graph

522 Commits

Author SHA1 Message Date
Nick Fitzgerald
549e5a9be9 tests: Pull the project() builder out into its own crate
The WebIDL-based -sys crate will also use this, but I want its tests to be a
separate suite that we can run separately and in parallel in CI. Therefore, this
testing infrastructure code needs to be share-able between them :)
2018-07-05 14:27:26 -07:00
Nick Fitzgerald
7ff90f1490 js: Return scalar types instead of Number objects
99% of the time we don't want to deal with opaque handles to `Number`
objects.
2018-07-05 13:02:40 -07:00
Sendil Kumar N
52a00d5e16
Merge pull request #392 from brisad/add-more-bindings
Add bindings in Date and Number
2018-07-05 19:51:58 +02:00
Michael Hoffmann
9f3722bbd9 Change assert to assert.ok to fix test 2018-07-05 17:34:45 +02:00
Michael Hoffmann
260183a522 Add binding for Number.isInteger 2018-07-05 17:09:59 +02:00
Michael Hoffmann
9d3b26341e Add binding for Date.prototype.getDate 2018-07-05 17:09:59 +02:00
Nick Fitzgerald
59b3b4dc8d Headless browser testing infrastructure (#371)
* tests: Add newlines between impl methods for Project

* WIP headless browser testing with geckodriver and selenium

* Get some more of headless testing working

* Extract `console.log` invocations and print them from the console
* Ship the error message from an exception from the browser back to the command
  line
* Cleanup some "if headless" and `else` branches
* Fix killing `webpack-dev-server` in the background with `--watch-stdin`

* Fix path appending logic for Windows

* Always log logs/errors in headless mode

* Install Firefox on Travis

* Don't duplicate full test suite with `yarn`

No need to run that many tests, we should be able to get by with a smoke test
that it just works.

* headless tests: Move `run-headless.js` to its own file and `include_str!` it

* Run `rustfmt` on `tests/all/main.rs`

* guide: Add note about headless browser tests and configuration

* test: Log WASM_BINDGEN_FIREFOX_BIN_PATH in run-headless.js

* TEMP only run add_headless test in CI

* Add more logging to headless testing

* Allow headless tests to run for 60 seconds before timeout

* TEMP add logging to add_headless test

* Fix headless browser tests

* Another attempt to fix Travis

* More attempts at debugging

* Fix more merge conflicts

* Touch up an error message

* Fixup travis again

* Enable all travis tests again

* Test everything on AppVeyor
2018-07-05 09:22:01 -05:00
Stephan Renatus
06b8d3535d js_globals::Proxy::*: make tests plain JS
Signed-off-by: Stephan Renatus <srenatus@chef.io>
2018-07-05 09:03:16 +02:00
Jannik Keye
8dd8475000 fix: Reflec.defineProperty no longer returns Result 2018-07-05 08:33:22 +02:00
Stephan Renatus
b704ceeb3a Bindings for Proxy.revocable()
Signed-off-by: Stephan Renatus <srenatus@chef.io>
2018-07-05 08:04:41 +02:00
Stephan Renatus
2b8e789c9c Bindings for Proxy.new()
Signed-off-by: Stephan Renatus <srenatus@chef.io>
2018-07-05 08:04:41 +02:00
Alex Crichton
efa4a2b8fa
Speed up Travis by running Webpack in fewer tests (#381)
* Reorganize Travis configuration

* Add a `JOB` env var descriptor to all matrix entries. Not used anywhere but is
  useful when viewing the whole build on Travis's web interface.
* Reorganize where builds are located, moving slow builds first and fast ones
  last.
* Change checking the CLI builds from `cargo build` to `cargo check`
* Use YAML references to reduce some duplication

* Print some more timing statistics for each test

* Extract `Project` helper in tests to a module

This'll help make it a bit more extensible over time. At the same time the
methods are also slightly reorganized to read more clearly from top to bottom.

* Migrate all tests away from Webpack

Wepback can take a significant amount of time to execute and when it's
multiplied by hundreds of tests that adds up really quickly! After investigating
Node's `--experimental-modules` option it looks like it's suitable for our use
so this switches all tests to using JS files (moving away from TypeScript as
well) with `--experimental-modules` with Node.

Tests will be selectively re-enabled with webpack and node.js specific output
(that doesn't require `--experimental-modules`), coming in later commits.

* Restore the node test for node.js output

Ensures it's workable as-is

* Only generate typescript with webpack

* Only read wasm files for webpack

* Skip package.json/node_modules for now

* Only generate webpack config if needed

* Start a dedicated test module for typescript

Will hopefully verify the generated Typescript compiles OK.

* Remove unneeded `node` method

* Fixup some rebase conflicts

* Don't run asmjs example on travis

* Fixup generator tests

* Attempt to fix windows

* Comment windows fix

* More test fixes

* More exclusions

* More test fixes

* Relax eslint regex

Catch mjs modules as well

* Fix eslint

* Speed up travis on examples slightly
2018-07-04 22:37:09 -05:00
Sendil Kumar N
e912b9d2a2
Merge pull request #374 from Hywan/js_test_date_locale
test(js) Fix expectations regarding given locales
2018-07-04 22:25:05 +02:00
Ivan Enderlin
43de00b347 feat(js) Add ArrayBuffer::new, ::is_view & ::slice bindings. (#388)
* feat(js) Add `ArrayBuffer::new`, `::is_view` & `::slice` bindings.

* fix(js) Fix number units, comments, add `slice_with_end`.

* test(js) Fix a function name.
2018-07-04 13:53:49 -05:00
Ivan Enderlin
f5d4751c0b
test(js) Check the types and lightly the data, but not that much.
Because NodeJS can have different i18n behaviors depending of the
version, let's keep things simple. In this case, we want to test the
types,
period. Cf. https://github.com/rustwasm/wasm-bindgen/pull/374#issuecomment-402447333
2018-07-04 16:47:51 +02:00
Jannik Keye
7790b34c07 fix: simplify signatures to avoid Result usage 2018-07-04 16:10:17 +02:00
Jannik Keye
40b7b069bc fix: return actual error message 2018-07-04 15:52:12 +02:00
Ivan Enderlin
c450fbf237
feat(js) Support exception on WebAssembly::validate. 2018-07-04 15:51:55 +02:00
Jannik Keye
008f17143b fix: Reflect.has target should be &Object 2018-07-04 15:32:34 +02:00
Ivan Enderlin
fe25a9a268
feat(js) Implement the WebAssembly.validate binding. 2018-07-04 15:27:01 +02:00
Marcin Baraniecki
2694dd4dee
Merge pull request #385 from toVersus/js_date
bindings for date.getDay/getFullYear
2018-07-04 14:56:22 +02:00
Jannik Keye
1397f9b05a feat: add Reflect.setPrototypeOf 2018-07-04 13:13:35 +02:00
Jannik Keye
eb3f67a36f feat: add Reflect.set 2018-07-04 13:08:43 +02:00
Jannik Keye
fc82ba4ec3 feat: add Reflect.preventExtensions 2018-07-04 12:56:37 +02:00
Jannik Keye
e36f982391 feat: add Reflect.ownKeys 2018-07-04 12:53:38 +02:00
toversus
e95994fd19 bindings for Date.prototype.getFullYear() 2018-07-04 19:52:12 +09:00
Jannik Keye
eb245d5503 feat: add Reflect.isExtensible 2018-07-04 12:49:07 +02:00
Jannik Keye
7c297ccfb4 feat: add Reflect.has 2018-07-04 12:44:49 +02:00
toversus
3007e813ea bindings for Date.prototype.getDay() 2018-07-04 19:41:06 +09:00
Jannik Keye
edddd4b08e feat: add Reflect.getPrototypeOf 2018-07-04 12:39:56 +02:00
Jannik Keye
2422c5e945 feat: add Reflect.getOwnPropertyDescriptor 2018-07-04 12:35:40 +02:00
Jannik Keye
3ba00bc13c feat: add Reflect.get 2018-07-04 12:31:24 +02:00
Jannik Keye
5fa18f8f40 feat: add Reflect.deleteProperty 2018-07-04 12:24:52 +02:00
Jannik Keye
07a726b9dc feat: add Reflect.defineProperty 2018-07-04 12:17:01 +02:00
Jannik Keye
13b3b0d87a feat: add Reflect.construct 2018-07-04 12:07:02 +02:00
Jannik Keye
592d426e4f feat: add Reflect.apply 2018-07-04 11:43:34 +02:00
Nick Fitzgerald
fbbd97bbe0
Merge pull request #380 from akryvomaz/master
bindings for Generator.next(), Generator.return() and Generator.throw()
2018-07-03 16:30:46 -07:00
Alexander Kryvomaz
eac2b05b1b added catch attribute to the Generator methods, consistent rust keyword name 2018-07-04 01:22:56 +03:00
Nick Fitzgerald
e644ee6dad
Merge pull request #375 from sendilkumarn/fix-node-webpack
fix webpack to handle node global functions
2018-07-03 13:50:39 -07:00
Alexander Kryvomaz
b797bbc39c bindings for Generator.throw() 2018-07-03 23:48:54 +03:00
Alexander Kryvomaz
39d79eb037 bindings for Generator.return() 2018-07-03 23:47:10 +03:00
Alexander Kryvomaz
6e95ba20f1 bindings for Generator.next() 2018-07-03 23:42:49 +03:00
Jonathan Sundqvist
17fde01243
Merge pull request #378 from jhenninger/math-bindings
Bindings for Math.pow, round, sign, sin, sinh, sqrt, tan, tanh and trunc
2018-07-03 21:08:28 +02:00
Sendil Kumar
f5075eb3be use simplified logic 2018-07-03 20:48:31 +02:00
Sendil Kumar
99ca230bdb add some comments 2018-07-03 20:44:34 +02:00
Johannes Henninger
b689a78351 Bindings for Math.pow, round, sign, sin, sinh, sqrt, tan, tanh and trunc 2018-07-03 20:00:56 +02:00
Sendil Kumar
8f034bc078 fix webpack to handle node global functions 2018-07-03 18:14:30 +02:00
Ivan Enderlin
54523d82ed
test(js) Fix expectations regarding given locales. 2018-07-03 14:37:38 +02:00
Ivan Enderlin
df5fec22d9
fix(js) Use f64 instead of Number. 2018-07-03 14:26:00 +02:00
Ivan Enderlin
fe4c150431
Merge branch 'master' into js_date 2018-07-03 14:12:05 +02:00
Johannes Henninger
6dede6f20f Use f64 for most Math.* bindings (#369) 2018-07-02 23:41:57 -05:00
Alex Crichton
4ceaf3e0f4
Some small cleanups (#366)
* No need for version deps in dev-deps

These are all internal so we can drop the version

* Remove wasm-bindgen-cli's parity-wasm dep

No longer needed

* Tweak file hierarchy in webidl tests

Use Cargo's conventions to avoid the need to define `[[test]]` sections

* Remove unused imports
2018-07-02 11:57:39 -05:00
Marcin Baraniecki
dcb3415da8 Expose bindings/object is* methods (#363)
* implements Object.isExtensible() binding

* implements Object.isFrozen() binding

* implements Object.isSealed() binding
2018-07-02 10:32:16 -05:00
Marcin Baraniecki
37fc159061 implements Object.preventExtensions() binding (#364) 2018-07-02 10:31:40 -05:00
Sendil Kumar N
10ffe8b3be
Merge pull request #361 from brisad/string-lower-and-upper-case
Bindings for string lower and upper case
2018-07-02 09:26:47 +02:00
belfz
1d04203e89 implements Object.values() binding 2018-07-01 23:50:10 +02:00
Michael Hoffmann
d5d451b94b Add binding for String.prototype.toUpperCase 2018-07-01 23:12:42 +02:00
Michael Hoffmann
58560f1408 Add binding for String.prototype.toLowerCase 2018-07-01 23:11:13 +02:00
Jonathan Sundqvist
bfffd58683
Merge pull request #359 from akryvomaz/master
bindings for Function.prototype.bind, decodeURIComponent, encodeURIComponent
2018-07-01 16:55:18 +02:00
Alexander Kryvomaz
609bf34d60 bindings for encodeURIComponent 2018-07-01 15:59:12 +03:00
Alexander Kryvomaz
0f07dd9048 bindings for decodeURIComponent 2018-07-01 15:53:44 +03:00
Alexander Kryvomaz
f850a6fafc bindings for Function.prototype.bind() 2018-07-01 15:44:36 +03:00
belfz
ce9b95635d implements Object.setPrototypeOf() binding 2018-07-01 11:52:22 +02:00
Alex Crichton
cf08aee341 Tidy up a test 2018-06-30 11:19:27 -07:00
Alex Crichton
e06255fba5 Don't generate JS bindings for unused imports
If a JS import's shim isn't actually imported that means that somewhere along
the way it was optimized out or it was never used in the first place! In that
case we can skip generation of the JS bindings for it as it's not needed.
2018-06-29 15:56:12 -07:00
Satoshi Amemiya
f9c804db20 Add support for js::Error 2018-06-29 23:24:46 +09:00
Alex Crichton
e55af85edc
Support by-value self methods (#348)
Refactor slightly to use the same internal support that the other reference
conversions are using.

Closes #329
2018-06-28 20:09:11 -05:00
Alex Crichton
9a3ff77ea9
Support returning custom types in imports (#350)
Closes #320
2018-06-28 20:08:02 -05:00
Alex Crichton
4138583dff
Support wildcard arguments in foreign functions (#351)
No real reason to not support them!

Closes #346
2018-06-28 20:06:35 -05:00
Nick Fitzgerald
37293ee42a
Merge pull request #344 from autodidaddict/math-externs
Binding for Math.cos,cosh,exp,expml,fround,imul,log,log10,log1p,log2
2018-06-28 15:52:45 -07:00
Nick Fitzgerald
5ff6329d29
Merge pull request #349 from jannikkeye/bindings-map
Add bindings for Map.xx
2018-06-28 15:46:07 -07:00
Nick Fitzgerald
e31da84bce
Merge pull request #340 from ohanar/rustfmt
Use rustfmt for standarized formatting
2018-06-28 15:17:23 -07:00
Jannik Keye
d868ff26ef Add bindings for Set.xx (#347)
* feat(Set): add Set.add

* feat(Set): add Set.clear

* feat(Set): add Set.delete

* feat(Set): add Set.has

* feat(Set): add Set.new

* feat(Set): add Set.size

* feat(Set/SetIterator): add Set.entries

* feat(Set/SetIterator): add Set.keys

* feat(Set/SetIterator): add Set.values
2018-06-28 15:57:49 -05:00
Chris Kolodin
9193218648 add bindings for array.prototype.some() (#341)
following the example set in https://github.com/rustwasm/wasm-bindgen/pull/314
2018-06-28 15:57:01 -05:00
Jannik Keye
e0a70417ce feat(Map/MapIterator): add Map.values 2018-06-28 22:00:02 +02:00
Jannik Keye
fc131ee97e feat(Map/MapIterator): add Map.keys 2018-06-28 21:59:11 +02:00
Jannik Keye
228abaa4ae feat(Map/MapIterator): add Map.entries 2018-06-28 21:58:34 +02:00
Jannik Keye
ea19775639 feat(Map): add Map.size 2018-06-28 21:56:49 +02:00
Jannik Keye
6f90bd677b feat(Map): add Map.set 2018-06-28 21:55:55 +02:00
Jannik Keye
27ee57175a feat(Map): add Map.new 2018-06-28 21:55:10 +02:00
Jannik Keye
07e61e1175 feat(Map): add Map.has 2018-06-28 21:54:10 +02:00
Jannik Keye
e0b399643a feat(Map): add Map.get 2018-06-28 21:53:20 +02:00
Jannik Keye
f7e4019e72 feat(Map): add Map.delete 2018-06-28 21:52:27 +02:00
Jannik Keye
ab0546963b feat(Map): add Map.clear 2018-06-28 21:51:39 +02:00
Kevin Hoffman
81e68517f2 Adding line separator in code docs above MDN URLs. 2018-06-28 15:05:10 -04:00
Kevin Hoffman
3e84b97de2 Binding for Math.cos,cosh,exp,expml,fround,imul,log,log10,log1p,log2 2018-06-28 12:46:53 -04:00
R. Andrew Ohana
9127a0419f rustfmt all the things 2018-06-27 22:42:34 -07:00
Nick Fitzgerald
40722b7ae3
Merge pull request #333 from Hywan/js_boolean
feat(js) Implement `Boolean` bindings.
2018-06-27 14:36:00 -07:00
Nick Fitzgerald
5aa648a2e8
Merge pull request #335 from xeqlol/weakset-bindings
Implement Weakset bindings
2018-06-27 14:27:48 -07:00
Nick Fitzgerald
e40a359278
Merge pull request #336 from belfz/expose-bindings/array-prototype-every
implements Array.prototype.every()
2018-06-27 09:11:21 -07:00
Nick Fitzgerald
4ba61c1c20
Merge pull request #332 from Hywan/js_test
test(js) Fix file permissions, and update a comment
2018-06-27 09:08:26 -07:00
belfz
dacf406dbd implements Array.prototype.every() 2018-06-27 13:45:47 +02:00
Dimitrii Nemkov
761a9272ca Added WeakSet delete method 2018-06-27 13:44:01 +05:00
Dimitrii Nemkov
6b798a3508 Added WeakSet add method 2018-06-27 13:38:33 +05:00
Dimitrii Nemkov
846e5aaacc Added WeakSet has method 2018-06-27 13:26:53 +05:00
Dimitrii Nemkov
a0dda505d9 Added WeakSet constructor 2018-06-27 13:15:47 +05:00
Ivan Enderlin
a4d47afda6
feat(js) Implement the Date.UTC binding. 2018-06-27 09:41:16 +02:00
Ivan Enderlin
e334c0c5af
feat(js) Implement the Date.now binding. 2018-06-27 09:40:40 +02:00
Ivan Enderlin
869d99b870
feat(js) Implement Number.new binding. 2018-06-27 09:36:37 +02:00
Ivan Enderlin
91bc7a199c
feat(js) Implement Boolean bindings.
Cf https://github.com/rustwasm/wasm-bindgen/issues/275.
2018-06-27 09:07:47 +02:00
Ivan Enderlin
c99c0f8483
test(js) Fix file permissions, and update a comment. 2018-06-27 08:33:37 +02:00
gaurikholkar
073cf7455b binding for Math.floor 2018-06-27 10:44:43 +05:30
Nick Fitzgerald
c16b9a903c
Merge pull request #330 from elpiel/string-prototypes
String - length, trim, trimLeft, trimRight, trimStart, trimEnd, valueOf, toString
2018-06-26 17:10:15 -07:00
Lachezar Lechev
16517fadcb String - toString and valueOf 2018-06-26 22:21:51 +02:00
Lachezar Lechev
9f087241a1 String - length, trim, trimStart & trimLeft, trimEnd & trimRight 2018-06-26 22:10:25 +02:00
Nick Fitzgerald
919c2bedac
Merge pull request #318 from xeqlol/weakmap-bindings
WeakMap bindings
2018-06-26 12:55:30 -07:00
Nick Fitzgerald
f0614e92e8
Merge pull request #328 from akryvomaz/master
bindings for Function.apply() and Function.toString()
2018-06-26 12:54:10 -07:00
Dimitrii Nemkov
ec8ed3a48d Fixed missed error in WeakMap::set 2018-06-27 00:20:36 +05:00
Dimitrii Nemkov
a6c7b4b69f Changed keys' type JsValue -> Object, changed description of WeakMap constructor 2018-06-26 23:50:31 +05:00
Alexander Kryvomaz
48061aaab6 bindings for Function.prototype.apply() and Function.prototype.toString() 2018-06-26 21:35:28 +03:00
Dimitrii Nemkov
a6d62c696f Merge branch 'master' into weakmap-bindings 2018-06-26 23:29:48 +05:00
Herman J. Radtke III
3833c94400
js: Implement bindings for Array.isArray 2018-06-26 11:11:02 -07:00
Nick Fitzgerald
16bc3eb7e7
Merge pull request #315 from ohanar/yarn2
use both npm and yarn in ci
2018-06-26 10:43:12 -07:00
Nick Fitzgerald
df5862bd7e
Merge branch 'master' into string-code_point_at 2018-06-26 10:39:26 -07:00
Nick Fitzgerald
ff80029cf0
Merge branch 'master' into string-concat 2018-06-26 10:32:42 -07:00
Nick Fitzgerald
6dcbc4a0cc
Merge branch 'master' into date 2018-06-26 10:25:26 -07:00
Nick Fitzgerald
e8c6c40f10
Merge pull request #323 from rail44/string-char_code_at
Support String.prototype.charCodeAt
2018-06-26 10:23:10 -07:00
Nick Fitzgerald
c836639229
Merge pull request #322 from belfz/expose-bindings/object-seal
implements Object.seal() binding
2018-06-26 10:22:00 -07:00
Nick Fitzgerald
552f3c7c66 Merge branch 'string-includes' of https://github.com/rail44/wasm-bindgen into string-includes 2018-06-26 10:17:26 -07:00
Satoshi Amemiya
3d72a90481 Support String.prototype.concat 2018-06-27 00:48:09 +09:00
Sendil Kumar
ef27cb6392 Add date constructor 2018-06-26 16:55:40 +02:00
Sendil Kumar
f9ae7f49ad Add date to date string
fix failing test case
2018-06-26 16:55:40 +02:00
Sendil Kumar
dd3e8cc8b8 Add date to iso string 2018-06-26 16:55:40 +02:00
Sendil Kumar
8f21393c6b Add date to json 2018-06-26 16:55:40 +02:00
Sendil Kumar
be44ad8ad8 Add date to locale date string 2018-06-26 16:55:40 +02:00
Sendil Kumar
4e05bc470f Add date to locale string 2018-06-26 16:55:40 +02:00
Sendil Kumar
c0aba821d5 Add date to locale time string 2018-06-26 16:55:40 +02:00
Sendil Kumar
ca17ef8d7c Add date to string 2018-06-26 16:55:40 +02:00
Sendil Kumar
f30de17c2b Add date to time string 2018-06-26 16:55:39 +02:00
Sendil Kumar
033ba3f3a7 Add date to utc string 2018-06-26 16:55:39 +02:00
Sendil Kumar
cd189d53c4 Add date value of 2018-06-26 16:55:36 +02:00
Satoshi Amemiya
22fdcf02b2 Support String.prototype.charCodeAt 2018-06-26 22:09:43 +09:00
Satoshi Amemiya
efeefbd4c1 Support String.prototype.codePointAt 2018-06-26 22:07:34 +09:00
Satoshi Amemiya
ae847861e7 String - includes() support 2018-06-26 21:10:19 +09:00
belfz
a30509d142 implements Object.seal binding 2018-06-26 14:02:42 +02:00
xeqlol
a369f7a246 WeakMap bindings 2018-06-26 13:12:32 +05:00
Tim Ryan
5925871a05 Adds support for the UInt8Array constructor and its fill method. 2018-06-26 00:34:17 -04:00
R. Andrew Ohana
cc1db03e5a use both npm and yarn in ci 2018-06-25 17:22:51 -07:00
Nick Fitzgerald
0851025ca5 js: Implement bindings for Array.prototype.filter 2018-06-25 16:19:07 -07:00
Nick Fitzgerald
3212b0a019
Merge pull request #312 from jonathan-s/moar-methods
Lots of methods for Math
2018-06-25 14:44:36 -07:00
Jonathan Sundqvist
e05b1ae6ba Add clz32 to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
9b70f14a1c Add ceil to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
2de2a815d5 Add cube root (cbrt) to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
5eb744c7d6 Add atanh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
3223a9af75 Add atan2 to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
7e514b939f Add atan to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
4b812ee47d Add asinh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
94255c1ba9 Add asin to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
d40a314a91 Add acosh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
230650055c Add acos to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
9633642e6e Add abs to Math 2018-06-25 22:52:04 +02:00
Lachezar Lechev
44444920a4 Merge branch 'master' into string-support 2018-06-25 22:20:38 +02:00
Lachezar Lechev
36e79d23c4 String - startsWith/substring/indexOf 2018-06-25 21:30:04 +02:00
Nick Fitzgerald
7a688d6967
Merge branch 'master' into string-substr 2018-06-25 11:31:42 -07:00
Lachezar Lechev
d28d81f38d Add basic support for String.prototype.charAt() (#306)
* String - charAt() implementation

* String - charAt() - add js_class
2018-06-25 11:24:44 -07:00
Nick Fitzgerald
eb04d15a65 js: Add bindings to Object.keys 2018-06-25 10:45:53 -07:00
Lachezar Lechev
b81dc46220 String - substr() support 2018-06-24 23:03:39 +02:00
Sendil Kumar
32bc9f271c rebase to handle JsString 2018-06-24 20:48:37 +02:00
Sendil Kumar
233b35254f Merge branch 'master' into number-fixed-exponential 2018-06-24 20:46:53 +02:00
R. Andrew Ohana
21f49d0302 reenable part of js_globals::Number::to_locale_string 2018-06-24 10:43:24 -07:00
Sendil Kumar
0f57398917 Add to_fixed and to_exponential function 2018-06-24 10:08:23 +02:00
R. Andrew Ohana
8abecba983 fix and disable test js_globals::Number::to_locale_string 2018-06-23 18:25:47 -07:00
R. Andrew Ohana
35c5dafdd2 js globals: return JsString rather than String 2018-06-23 17:15:13 -07:00
Nick Fitzgerald
b1cbb56224
Merge branch 'master' into master 2018-06-23 16:19:08 -07:00
Nick Fitzgerald
0f5badf95e
Merge pull request #299 from jonathan-s/number
Adds valueOf and toString to Number
2018-06-23 16:04:35 -07:00
Alexander Kryvomaz
9e07c4935c bindings for Function.length and Function.name 2018-06-23 23:41:28 +03:00
Jonathan Sundqvist
6b5974d1bd Add toLocaleString to Number 2018-06-23 19:03:55 +02:00
Jonathan Sundqvist
f636f7b28d Add toPrecision to Number 2018-06-23 18:18:58 +02:00
Jonathan Sundqvist
bf56d5815b Add the binding of to_string to Number 2018-06-23 17:38:13 +02:00
Jonathan Sundqvist
a7f8e071fe Add the binding valueOf to number 2018-06-23 14:43:43 +02:00
belfz
e255925292 implements Object.prototype.valueOf() binding 2018-06-23 12:11:46 +02:00
kzvi
5ae6ee7aec add JsString binding to src/js.rs and tests 2018-06-22 17:51:44 -07:00
Jonathan Sundqvist
99ee74d153 Add binding for concat 2018-06-22 10:55:50 -07:00
Nick Fitzgerald
7825122feb Merge branch 'expose-bindings/object-to-locale-string' of https://github.com/belfz/wasm-bindgen into rollup 2018-06-22 10:51:17 -07:00
Nick Fitzgerald
ce14de21c3 Merge branch 'array-method' of https://github.com/jonathan-s/wasm-bindgen into rollup 2018-06-22 10:45:33 -07:00
belfz
39465c896c implements Object.prototype.toLocaleString() binding 2018-06-22 13:36:44 +02:00
Jonathan Sundqvist
a7bb555944 Add Sort to Array 2018-06-22 09:01:41 +02:00
robertdurst
a9ca64b689 Implement Array.length binding 2018-06-21 21:30:57 -07:00
Nick Fitzgerald
9e01e67aa3
Merge pull request #289 from wismer/array-iterator-method-bindings
Array iterator method bindings
2018-06-21 15:24:25 -07:00
Matt Long
a95476a8ee add binding for entries method 2018-06-21 17:21:35 -04:00
Matt Long
4cc73877a6 add binding for keys method 2018-06-21 17:00:02 -04:00
belfz
dd3740e2fb allows using &JsValue as an arg to Object's has_own_property 2018-06-21 22:51:30 +02:00
belfz
420eaffcb3 adds missing unit tests for property_is_enumerable 2018-06-21 21:32:03 +02:00
belfz
1e1276410a implements Object.prototype.isPrototypeOf() binding 2018-06-21 13:56:24 +02:00
belfz
77ad68673c implements Object.isPrototypeOf binding 2018-06-21 07:36:24 +02:00
Matt Long
a8cd428850 add binding for includes 2018-06-20 18:36:10 -04:00
Matt Long
eb6c2a239c add binding for toString 2018-06-20 18:23:26 -04:00
Matt Long
3cf522d2df add bindings for unshift 2018-06-20 18:07:30 -04:00
Matt Long
68acbeab25 add binding for shift 2018-06-20 18:03:26 -04:00
Matt Long
d705cd8bbf add binding for reverse 2018-06-20 18:00:58 -04:00
Matt Long
4611d7bdba add binding for push 2018-06-20 17:58:15 -04:00
Matt Long
73081180cd add binding for pop 2018-06-20 17:55:25 -04:00
Matt Long
2f6f734216 add binding for copyWithin 2018-06-20 17:51:02 -04:00
Matt Long
d155136f0e add binding for fill 2018-06-20 17:49:34 -04:00
Matt Long
e8bb0c2f98 add binding for slice 2018-06-20 17:46:10 -04:00
Matt Long
0b80888c0d add binding for join 2018-06-20 17:38:47 -04:00
Matt Long
667733e929 add binding for lastIndexOf 2018-06-20 17:36:35 -04:00
Matt Long
4a96ba3c72 add binding for indexOf 2018-06-20 17:23:38 -04:00
Jonathan Sundqvist
d89c7958eb Js binding for to_string 2018-06-20 21:55:41 +02:00
Nick Fitzgerald
5eda5504e9
Merge pull request #273 from FreeMasen/validate-ptr
Validate ptr
2018-06-19 16:45:31 -07:00
Nick Fitzgerald
224d20337f
Merge pull request #274 from fitzgen/js-sys
Expose objects and functions from the JavaScript global scope
2018-06-19 10:42:04 -07:00
Nick Fitzgerald
7b0e779ffd test: remove unnecessary test.ts files
The testing infrastructure will add exactly this default `test.ts` when it isn't
explicitly specified.
2018-06-19 10:17:42 -07:00
Nick Fitzgerald
a201cafdea test: Move Object-related js_globals tests to submodule file 2018-06-19 10:15:09 -07:00
Nick Fitzgerald
161fce9d50 Expose objects and functions from the JavaScript global scope
These are bindings to JavaScript's standard, built-in objects and their methods
and properties.

This does *not* include any Web, Node, or any other JS environment APIs. Only
the things that are guaranteed to exist in the global scope by the ECMAScript
standard.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
2018-06-18 16:41:01 -07:00
Robert Masen
e9ea2dabc1 add Validate ptr test 2018-06-18 15:34:48 -05:00
R. Andrew Ohana
d123bedc20 change some asserts to assert_(eq|ne)s 2018-06-18 13:10:07 -07:00
R. Andrew Ohana
0938858aa8 webidl: add support for static attributes 2018-06-15 12:22:14 -07:00
R. Andrew Ohana
fe5cde8636 webidl: add support for static methods 2018-06-15 12:09:42 -07:00
Nick Fitzgerald
639ccd53ce
Merge pull request #269 from ohanar/webidl_constructor
webidl: add support for (named) constructors
2018-06-15 11:35:29 -07:00
Robert Masen
19d6cf1488 Copy doc comments from Rust to JS (#265)
* backend comments complete

* better matching

* gen comments

* Add example

* Move test bindings gen to own fn

* move build step into build fn

* add fn to read js, refactor gen_bindings/test to allow for this

* Add comments test

* Update readmes

* add comments to travis

* fix broken tests

* +x on build.sh

* fix wbg cmd in build.sh

* Address fitzgen's comments
2018-06-15 09:20:56 -07:00
R. Andrew Ohana
cbec42e86c webidl: add support for named constructors 2018-06-14 16:20:20 -07:00
R. Andrew Ohana
c65cb51fba webidl: add support for constructors 2018-06-14 16:15:25 -07:00
R. Andrew Ohana
9b8c0b8fb9 small cleanup in testing framework 2018-06-11 18:00:33 -07:00
R. Andrew Ohana
077f50c6f2 webidl: add initial support for integration tests 2018-06-10 23:04:17 -07:00
Alex Crichton
659583b40d
Implement PartialEq for JsValue (#217)
Dispatch to JS's `===` operator internally
2018-06-01 16:47:45 -05:00
Alex Crichton
ad89d8457e
Fix tests by pinning versions of webpack (#219)
Looks like a newer version of webpack has broken tests, so let's use
package-lock.json to pin to an older version while we wait for a fix.
2018-06-01 13:42:59 -05:00
Nick Fitzgerald
daabbbd06e Add a stub test module for when we have webidl tests 2018-05-29 14:20:15 -07:00
Robert Masen
4ddd93d75d add char support (#206)
* add char support

* add char test

* remove __wbindgen_char fns

* re-order travis script

* update serve script

* remove binds to unused char functions

* add more wide character items to chars list

* remove unused code

* add char to readme

* remove built file
2018-05-22 12:34:41 -05:00
Alex Crichton
dd76707ea1 Prevent use-after-free with vectors
Awhile back slices switched to being raw views into wasm memory, but this
doens't work if we free the underlying memory unconditionally! Moving around a
`Vec` is already moving a lot of data, so let's copy it onto the JS heap instead
of leaving it in the wasm heap.
2018-05-21 11:23:46 -07:00
Alex Crichton
ca8809b4e9 Don't try to codegen static into an impl
Closes #194
2018-05-11 08:28:09 -07:00
Alex Crichton
06664b34ce Fix parsing some Rust keywords in attributes
Closes #193
2018-05-09 08:01:57 -07:00
Alex Crichton
237fff0698 Map u64/i64 to BigInt in JS
This commit is an implementation of mapping u64/i64 to `BigInt` in JS through
the unstable BigInt APIs. The BigInt type will ship soon in Chrome and so this
commit builds out the necessary support for wasm-bindgen to use it!
2018-05-05 18:51:20 -07:00
Alex Crichton
48a823c685 Remove slice logic of "commit to wasm"
When adding support for mutable slices I was under the impression that if the
wasm memory was reallocated while we were using it then we'd have to commit the
changes from the original buffer back to the new buffer. What I didn't know,
however, is that once the wasm memory is reallocated then all views into it are
supposed to be defunkt.

It looks like node 9 didn't have this implementation quite right and it appears
fixed in node 10, causing the deleted test here to fail. While this commit does
raise the question of whether this is the right approach to interact with slices
in JS I think the answer is still "yes". The user can always initiate the copy
if need be and that seems strictly better than copying 100% of the time.
2018-05-05 14:52:22 -07:00
Alex Crichton
139b7a1aae Don't use the global stack for string lengths
This commit updates the `Abi` associated type for all slice types to a
`WasmSlice` type, an aggregate of two `u32` integers. This translates to an ABI
where when passed as a function argument it expands to two integer arguments,
and when passed as a return value it passes a return pointer as the first
argument to get filled in.

This is hopefully more forwards-compatible with the host bindings proposal which
uses this strategy for passing string arguments at least. It's a little sketchy
what we're doing as there's not really a stable ABI yet, but hopefully this'll
all be relatively stable for awhile!
2018-05-02 21:03:50 -07:00
Alex Crichton
4304a262c6 Fix enums defined in submodules 2018-05-02 10:17:16 -07:00
Alex Crichton
0566a97485 Add support for mutable slices
This commit adds support for mutable slices to pass the boundary between JS and
Rust. While mutable slices cannot be used as return values they can be listed as
arguments to both exported functions as well as imported functions.

When passing a mutable slice into a Rust function (aka having it as an argument
to an exported Rust function) then like before with a normal slice it's copied
into the wasm memory. Afterwards, however, the updates in the wasm memory will
be reflected back into the original slice. This does require a lot of copying
and probably isn't the most efficient, but it should at least work for the time
being.

The real nifty part happens when Rust passes a mutable slice out to JS. When
doing this it's a very cheap operation that just gets a subarray of the main
wasm memory. Now the wasm memory's buffer can change over time which can produce
surprising results where memory is modified in JS but it may not be reflected
back into Rust. To accomodate this when a JS imported function returns any
updates to the buffer are copied back to Rust if Rust's memory buffer has
changed in the meantime.

Along the way this fixes usage of `slice` to instead use `subarray` as that's
what we really want, no copying. All methods have been updated to use `subarray`
accessors instead of `slice` or constructing new arrays.

Closes #53
2018-05-01 10:06:35 -07:00
Alex Crichton
4a873af8d1 Enable cargo test where possible
Currently `#[wasm_bindgen]` generates a bunch of references to symbols that
don't actually exist on non-wasm targets, making it more difficult to get a
crate working across multiple platforms. This commit updates the symbol
references to be dummy ones that panic on non-wasm targets to allow simple
testing/benchmarking to work on native targets.

While this isn't a perfect solution for #114 it's probably as good as we can do
for now pending upstream Cargo features, so I'm gonna say that it...

Closes #114
2018-04-27 15:01:35 -07:00
Alex Crichton
b8895b3a95 Add JsValue::{from_serde, into_serde}
These functions are activated with the `serde-serialization` feature of the
`wasm-bindgen` crate. When activated they will allow passing any arbitrary value
into JS that implements the `Serialize` trait and receiving any value from JS
using the `Deserialize` trait. The interchange between JS and Rust is JSON.

Closes #96
2018-04-26 20:45:22 -07:00
Alex Crichton
412bebca72 Add support for version specifications
This commit adds a `#[wasm_bindgen(version = "...")]` attribute support. This
information is eventually written into a `__wasm_pack_unstable` section.
Currently this is a strawman for the proposal in ashleygwilliams/wasm-pack#101
2018-04-25 22:23:02 -07:00
Alex Crichton
d9a71b43db Assert empty JS heap/stack in tests
Turns out there was a bug when passing a vector of `JsValue` instances back to
JS all objects were leaked rather than correctly removed from the global slab.
2018-04-25 22:15:28 -07:00
Alex Crichton
faed98b843 Correct how slices are iterated over
This commit fixes how the `getArrayJsValueFromWasm` function is defined to
correctly iterate over the slice by looking at the values rather than the
indices.

Closes #169
2018-04-25 21:58:49 -07:00
Alex Crichton
7108206835 Implement readonly struct fields
Add support for `#[wasm_bindgen(readonly)]` which indicates that an exported
struct field is readonly and attempting to set it in JS will throw an exception.

Closes #151
2018-04-20 10:56:10 -07:00
Alex Crichton
c6f7d3dfd5 Fix methods returning Self
Rewrite any instance of `Self` to the name of the class

Closes #137
2018-04-19 18:43:37 -07:00
Alex Crichton
ce31859590 Generate accessors for public struct fields
Automatically infer public struct fields as "JS wants to access this" and
generate appropriate getters/setters for the field. At this time the field is
required to implement `Copy`, but we will probably want to relax that in the
future to at least encompass `JsValue` and maybe other `Clone` values as well.

Closes #121
2018-04-19 16:49:46 -07:00
Alex Crichton
212703671a No need to expose ptr in TypeScript
This was needed long ago but is no longer needed!

Closes #147
2018-04-19 13:28:50 -07:00
Alex Crichton
748184ae66 Work with #![no_std] contexts
This commit adds support for both `#![no_std]` in the wasm-bindgen runtime
support (disabled by default with an on-by-default `std` feature). This also
adds support to work and compile in the context of `#![no_std]` crates.

Closes #146
2018-04-19 13:24:30 -07:00
Alex Crichton
792a8e132e Fix unused variables in generated code
Also deny all warnings in tests to prevent this creeping back in.

Closes #141
2018-04-19 13:16:59 -07:00
Alex Crichton
0e032955fb Use a length accessor instead of byteLength
This way we should be naturally compatible with normal JS arrays that get passed
in as well!

Closes #133
2018-04-16 13:50:21 -07:00
Alex Crichton
5efde3abe9 Be sure to generate classes for empty structs
Closes #131
2018-04-16 08:05:18 -07:00
Alex Crichton
c64f178543 Support closures with "rich" arguments
This commit adds support for closures with arguments like strings and such. In
other words, closures passed to JS can now have the same suite of arguments as
all functions that can be exported from Rust, as one might expect!

At this time due to the way trait objects work closures still cannot use types
with references like `&str`, but bare values like `String` or `ImportedType`
should work just fine.

Closes #104
2018-04-16 07:51:51 -07:00
konstin
3999642f66 Merge remote-tracking branch 'upstream/master' into new 2018-04-15 01:50:23 +02:00
konstin
f45ce1f239 Do only use ConstructorToken when needed
Also removing some effectively dead code
2018-04-15 01:29:09 +02:00
konstin
e87b32fb22 Allow arbitratry constructor names 2018-04-14 11:19:17 -07:00
konstin
32ab5a5644 Suppport for javascript constructors
This is a conservative version where the function used for the constructor must be called `new`
2018-04-14 11:19:17 -07:00
Alex Crichton
a8d6ca3d62 Add support for mutable stack closures
This commit adds support for passing `&mut FnMut(..)` to JS via imports. These
closures cannot be invoked recursively in JS (they invalidate themselves while
they're being invoked) and otherwise work the same as `&Fn(..)` closures.

Closes #123
2018-04-14 11:16:16 -07:00
Alex Crichton
656d69816d Move all tests to the same suite
Nowadays the compile times are mitigated with incremental compilation and
otherwise it's much more ergonomic to run only one test if they're all in the
same suite.
2018-04-09 15:32:06 -07:00
Alex Crichton
aaff0be441 Fix closure tests 2018-04-09 14:40:01 -07:00
Alex Crichton
f7f0d578e7 Support long-lived closures
Docs coming soon!
2018-04-09 14:34:21 -07:00
Alex Crichton
c0cad447c1 Initial support for closures
This commit starts wasm-bindgen down the path of supporting closures. We
discussed this at the recent Rust All-Hands but I ended up needing to pretty
significantly scale back the ambitions of what closures are supported. This
commit is just the initial support and provides only a small amount of support
but will hopefully provide a good basis for future implementations.

Specifically this commit adds support for passing `&Fn(...)` to an *imported
function*, but nothing elese. The `&Fn` type can have any lifetime and the JS
object is invalidated as soon as the import returns. The arguments and return
value of `Fn` must currently implement the `WasmAbi` trait, aka they can't
require any conversions like strings/types/etc.

I'd like to soon expand this to `&mut FnMut` as well as `'static` closures that
can be passed around for a long time in JS, but for now I'm putting that off
until later. I'm not currently sure how to implement richer argument types, but
hopefully that can be figured out at some point!
2018-04-09 14:34:21 -07:00
Alex Crichton
7f614c3c3a Reduce node/browser duplication
Centralize the export of a function to one location to reduce duplication in
various other locations checking whether Node is being targeted or not.
2018-04-03 13:12:28 -07:00