| const REPORT_URL = '/gold_rpc/report'; |
| const pngPrefx = 'data:image/png;base64,' |
| |
| function reportCanvas(canvas, testname, config) { |
| // toDataURL returns a base64 encoded string with a data prefix. We only |
| // want the PNG data itself, so we strip that off before submitting it. |
| const b64 = canvas.toDataURL('image/png') |
| .substring(pngPrefx.length); |
| return fetch(REPORT_URL, { |
| method: 'POST', |
| mode: 'no-cors', |
| headers: { |
| 'Content-Type': 'application/json', |
| }, |
| body: JSON.stringify({ |
| 'b64_data': b64, |
| 'name': testname, |
| 'config': config, |
| }) |
| }).then((resp) => { |
| expect(resp.status).toEqual(201); // StatusCreated |
| console.log(`${testname}: ${resp.statusText}`); |
| }); |
| } |
| |
| function reportError(done) { |
| return (e) => { |
| fail(e); |
| done(); |
| }; |
| } |
| |
| // A wrapper to catch and print a stacktrace to the logs. |
| // Exceptions normally shows up in the browser console, |
| // but not in the logs that appear on the bots AND a thrown |
| // exception will normally cause a test to time out. |
| // This wrapper mitigates both those pain points. |
| function catchException(done, fn) { |
| return () => { |
| try { |
| fn() |
| } catch (e) { |
| console.log('Failed with the following error', e); |
| expect(e).toBeFalsy(); |
| debugger; |
| done(); |
| } |
| // We don't call done with finally because |
| // that would make the break the asynchronous nature |
| // of fn(). |
| } |
| } |