diff --git a/src/boilerplate/post-module.js b/src/boilerplate/post-module.js index f4ae949e..6a8285ff 100644 --- a/src/boilerplate/post-module.js +++ b/src/boilerplate/post-module.js @@ -36,7 +36,10 @@ if (typeof importScripts === "function") { var result = render(instance, src, options); postMessage({ id: id, result: result }); } catch (error) { - postMessage({ id: id, error: { message: error.message, fileName: error.fileName, lineNumber: error.lineNumber } }); + var error = error instanceof Error + ? { message: error.message, fileName: error.fileName, lineNumber: error.lineNumber } + : { message: error.toString() }; + postMessage({ id: id, error: error }); } } } diff --git a/test-node/render.js b/test-node/render.js index 72cc5c14..21623de1 100644 --- a/test-node/render.js +++ b/test-node/render.js @@ -23,3 +23,27 @@ it('should render a graph using the Module and render functions exported by the assert.ok(result); }); }); + +it('should throw descriptive error when not enough memory allocated', function() { + let worker = new Worker(path.resolve(__dirname, '../full.render.js')); + let viz = new Viz({ worker }); + let dot = 'digraph {'; + for (let i = 0; i < 50000; ++i) { + dot += `node${i} -> node${i + 1};`; + } + dot += '}'; + + return viz.renderString(dot).then( + () => { + worker.terminate(); + assert.fail('should throw'); + }, + error => { + worker.terminate(); + assert( + /Cannot enlarge memory arrays/.test(error.message), + 'should return descriptive error', + ); + }, + ); +});