diff --git a/.travis.yml b/.travis.yml index 3ea5d4f..1680a00 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,12 @@ node_js: -- "4" -- "5" -- "6" -- "7" + - stable + - 8 sudo: false language: node_js -script: "npm run test" +before_script: + - 'curl https://sh.rustup.rs -sSf | sh -s -- -y -v' + - 'export PATH="$HOME/.cargo/bin:$PATH"' + - 'sh scripts/install.sh' +script: + - 'npm test' # after_success: "npm i -g codecov && npm run coverage && codecov" diff --git a/example/package.json b/example/package.json new file mode 100644 index 0000000..0836c93 --- /dev/null +++ b/example/package.json @@ -0,0 +1,7 @@ +{ + "browserify": { + "transform": [ + "../" + ] + } +} diff --git a/package.json b/package.json index 2b1dbf2..81f258f 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,7 @@ "start:external": "bankai start example/external", "build": "mkdir -p dist/ && browserify -t ./ example/inline.js -o dist/bundle.js", "build:external": "mkdir -p dist/ && browserify -t ./ example/external.js -o dist/bundle.js", - "test": "standard" - }, - "browserify": { - "transform": [ - "./" - ] + "test": "standard && node test/index.js" }, "dependencies": { "falafel": "^2.1.0", @@ -27,6 +22,11 @@ "standard": "^10.0.3", "tape": "^4.8.0" }, + "standard": { + "ignore": [ + "test/*/**.js" + ] + }, "keywords": [ "browserify", "rust", diff --git a/test/external.js b/test/external.js new file mode 100644 index 0000000..48d108e --- /dev/null +++ b/test/external.js @@ -0,0 +1,15 @@ +var test = require('tape') +var path = require('path') +var vm = require('vm') +var browserify = require('browserify') +var rustify = require('../') + +test('external', function (t) { + t.plan(2) + browserify(path.join(__dirname, 'external/main.js')) + .transform(rustify) + .bundle(function (err, src) { + t.ifError(err) + vm.runInNewContext(src, { T: t }) + }) +}) diff --git a/test/external/main.js b/test/external/main.js new file mode 100644 index 0000000..663ead2 --- /dev/null +++ b/test/external/main.js @@ -0,0 +1,9 @@ +var rust = require('rustify') + +var wasm = rust('./module.rs') + +WebAssembly.instantiate(wasm, {}) + .then(function (res) { + var module = res.instance.exports + T.equal(module.fib(7), 13) + }).catch(T.fail) diff --git a/test/external/module.rs b/test/external/module.rs new file mode 100644 index 0000000..3956812 --- /dev/null +++ b/test/external/module.rs @@ -0,0 +1,8 @@ +#[no_mangle] +pub fn fib(n: u32) -> u32 { + match n { + 0 => 0, + 1 => 1, + _ => fib(n - 1) + fib(n - 2), + } +} diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..0d81ca9 --- /dev/null +++ b/test/index.js @@ -0,0 +1,2 @@ +require('./rust') +require('./external') diff --git a/test/rust.js b/test/rust.js new file mode 100644 index 0000000..5441bd2 --- /dev/null +++ b/test/rust.js @@ -0,0 +1,15 @@ +var test = require('tape') +var path = require('path') +var vm = require('vm') +var browserify = require('browserify') +var rustify = require('../') + +test('rust', function (t) { + t.plan(3) + browserify(path.join(__dirname, 'rust/main.js')) + .transform(rustify) + .bundle(function (err, src) { + t.ifError(err) + vm.runInNewContext(src, { T: t }) + }) +}) diff --git a/test/rust/main.js b/test/rust/main.js new file mode 100644 index 0000000..9eaa779 --- /dev/null +++ b/test/rust/main.js @@ -0,0 +1,14 @@ +var rust = require('rustify') + +var wasm = rust` + #[no_mangle] + pub fn add_one(x: i32) -> i32 { + x + 1 + } +` + +WebAssembly.instantiate(wasm, {}).then(function (res) { + var addOne = res.instance.exports.add_one + T.equal(addOne(41), 42) + T.equal(addOne(68), 69) +}).catch(T.fail)