Skip to content

Commit 73acb90

Browse files
Accept new style backtrace for Ruby 3.4
https://bugs.ruby-lang.org/issues/19117
1 parent 0ca28b0 commit 73acb90

File tree

2 files changed

+48
-5
lines changed

2 files changed

+48
-5
lines changed

packages/npm-packages/ruby-wasm-wasi/test/init.js

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,42 @@ const initRubyVM = async ({ suppressStderr } = { suppressStderr: false }) => {
4646
return vm;
4747
};
4848

49-
module.exports = { initRubyVM };
49+
class RubyVersion {
50+
constructor(version) {
51+
this.version = version;
52+
}
53+
54+
toComponents() {
55+
const parts = this.version.split(".").map((x) => parseInt(x, 10));
56+
// Fill in missing parts with 0 until we have major, minor, and tiny.
57+
while (parts.length < 3) {
58+
parts.push(0);
59+
}
60+
return parts;
61+
}
62+
63+
isGreaterThanOrEqualTo(other) {
64+
const a = this.toComponents();
65+
if (!(other instanceof RubyVersion)) {
66+
other = new RubyVersion(other);
67+
}
68+
const b = other.toComponents();
69+
for (let i = 0; i < 3; i++) {
70+
if (a[i] > b[i]) {
71+
return true;
72+
}
73+
if (a[i] < b[i]) {
74+
return false;
75+
}
76+
}
77+
return true;
78+
}
79+
}
80+
81+
const rubyVersion = (async () => {
82+
const vm = await initRubyVM({ suppressStderr: true });
83+
const result = vm.eval("RUBY_VERSION");
84+
return new RubyVersion(result.toString());
85+
})();
86+
87+
module.exports = { initRubyVM, rubyVersion };

packages/npm-packages/ruby-wasm-wasi/test/vm.test.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { initRubyVM } = require("./init");
1+
const { initRubyVM, rubyVersion } = require("./init");
22

33
describe("RubyVM", () => {
44
test("empty expression", async () => {
@@ -106,11 +106,16 @@ describe("RubyVM", () => {
106106
foo
107107
`);
108108
};
109-
expect(throwError)
110-
.toThrowError(`eval:9:in \`fizz': fizz raised (RuntimeError)
109+
const expectedBacktrace = ((await rubyVersion).isGreaterThanOrEqualTo("3.4.0"))
110+
? `eval:9:in 'Object#fizz': fizz raised (RuntimeError)
111+
eval:6:in 'Object#bar'
112+
eval:3:in 'Object#foo'
113+
eval:11:in '<main>'`
114+
: `eval:9:in \`fizz': fizz raised (RuntimeError)
111115
eval:6:in \`bar'
112116
eval:3:in \`foo'
113-
eval:11:in \`<main>'`);
117+
eval:11:in \`<main>'`
118+
expect(throwError).toThrowError(expectedBacktrace);
114119
});
115120

116121
test("exception while formatting exception backtrace", async () => {

0 commit comments

Comments
 (0)