diff --git a/packages/npm-packages/ruby-wasm-wasi/test/init.js b/packages/npm-packages/ruby-wasm-wasi/test/init.js index c9e57008d5..6591ccecd6 100644 --- a/packages/npm-packages/ruby-wasm-wasi/test/init.js +++ b/packages/npm-packages/ruby-wasm-wasi/test/init.js @@ -46,4 +46,42 @@ const initRubyVM = async ({ suppressStderr } = { suppressStderr: false }) => { return vm; }; -module.exports = { initRubyVM }; +class RubyVersion { + constructor(version) { + this.version = version; + } + + toComponents() { + const parts = this.version.split(".").map((x) => parseInt(x, 10)); + // Fill in missing parts with 0 until we have major, minor, and tiny. + while (parts.length < 3) { + parts.push(0); + } + return parts; + } + + isGreaterThanOrEqualTo(other) { + const a = this.toComponents(); + if (!(other instanceof RubyVersion)) { + other = new RubyVersion(other); + } + const b = other.toComponents(); + for (let i = 0; i < 3; i++) { + if (a[i] > b[i]) { + return true; + } + if (a[i] < b[i]) { + return false; + } + } + return true; + } +} + +const rubyVersion = (async () => { + const vm = await initRubyVM({ suppressStderr: true }); + const result = vm.eval("RUBY_VERSION"); + return new RubyVersion(result.toString()); +})(); + +module.exports = { initRubyVM, rubyVersion }; diff --git a/packages/npm-packages/ruby-wasm-wasi/test/vm.test.js b/packages/npm-packages/ruby-wasm-wasi/test/vm.test.js index 096ddbeef8..1e5cd1d7da 100644 --- a/packages/npm-packages/ruby-wasm-wasi/test/vm.test.js +++ b/packages/npm-packages/ruby-wasm-wasi/test/vm.test.js @@ -1,4 +1,4 @@ -const { initRubyVM } = require("./init"); +const { initRubyVM, rubyVersion } = require("./init"); describe("RubyVM", () => { test("empty expression", async () => { @@ -106,11 +106,16 @@ describe("RubyVM", () => { foo `); }; - expect(throwError) - .toThrowError(`eval:9:in \`fizz': fizz raised (RuntimeError) + const expectedBacktrace = ((await rubyVersion).isGreaterThanOrEqualTo("3.4.0")) + ? `eval:9:in 'Object#fizz': fizz raised (RuntimeError) +eval:6:in 'Object#bar' +eval:3:in 'Object#foo' +eval:11:in '
'` + : `eval:9:in \`fizz': fizz raised (RuntimeError) eval:6:in \`bar' eval:3:in \`foo' -eval:11:in \`
'`); +eval:11:in \`
'` + expect(throwError).toThrowError(expectedBacktrace); }); test("exception while formatting exception backtrace", async () => {