utils.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import * as process from 'node:process';
  2. import {init as initLibthreema} from '../../build/wasm/nodejs/libthreema.js';
  3. export function assert(condition, message) {
  4. if (!condition) {
  5. throw new Error(`Assertion failed, message: ${message}`);
  6. }
  7. }
  8. export async function init() {
  9. const logTag = '[libthreema]';
  10. initLibthreema(
  11. {handle: (info) => console.error('PANIC!', info)},
  12. {
  13. debug: console.debug.bind(console, logTag),
  14. info: console.info.bind(console, logTag),
  15. warn: console.warn.bind(console, logTag),
  16. error: console.error.bind(console, logTag),
  17. },
  18. 'debug',
  19. );
  20. }
  21. /**
  22. * Run a test and log information about passing or failure. Returns whether the
  23. * test passed.
  24. */
  25. export function runTest(testFunction, name) {
  26. console.info('> 📝 Test', name);
  27. try {
  28. testFunction();
  29. } catch (error) {
  30. console.info('> ❌ Test', name, 'failed');
  31. console.error(error);
  32. return false;
  33. }
  34. console.info('> ✅ Test', name, 'passed');
  35. return true;
  36. }
  37. /**
  38. * Evaluate all tests results from {@link runTest} and exit the process
  39. * accordingly.
  40. */
  41. export function evaluateTestResults(testResults) {
  42. const results = testResults.reduce(
  43. (results, passed) => {
  44. if (passed) {
  45. ++results.passed;
  46. } else {
  47. ++results.failed;
  48. }
  49. return results;
  50. },
  51. {passed: 0, failed: 0},
  52. );
  53. console.info(
  54. `${results.passed} tests passed, ${results.failed} tests failed`,
  55. );
  56. process.exit(results.failed === 0 ? 0 : 1);
  57. }