/test/helper.js

https://github.com/bluewings/pug-as-jsx-loader · JavaScript · 52 lines · 44 code · 8 blank · 0 comment · 10 complexity · 9aca9a3b658c1c4569d5c54d7893dd68 MD5 · raw file

  1. const pugAsJsxLoader = require('../');
  2. function run(input, addOptions = {}) {
  3. return new Promise((resolve) => {
  4. const opt = {
  5. cacheable: () => {},
  6. resourcePath: '.test.pug',
  7. detail: true,
  8. };
  9. Object.keys(addOptions).forEach((key) => {
  10. opt[key] = addOptions[key];
  11. });
  12. const { jsx, jsxTemplate: output, variables: params } = pugAsJsxLoader.call(opt, input);
  13. const { components, variables } = params.reduce((prev, e) => {
  14. if (e.search(/^[A-Z]/) === 0 && e.search(/[a-z]/) !== -1) {
  15. return { ...prev, components: [...prev.components, e] };
  16. }
  17. return { ...prev, variables: [...prev.variables, e] };
  18. }, { components: [], variables: [] });
  19. resolve({ jsx, output, variables, components });
  20. });
  21. }
  22. function toTestArr(b) {
  23. const { tests } = b.split(/\n/).reduce((prev, curr) => {
  24. let next = { ...prev };
  25. if (curr.search(/^@\s*NAME\s*:/) === 0) {
  26. const cursor = { name: curr.replace(/^@\s*NAME\s*:/g, '').trim(), input: [], expected: [] };
  27. next = { type: null, tests: [...next.tests, cursor], cursor };
  28. } else if (curr.search(/^@\s*INPUT\s*:/) === 0) {
  29. next = { ...next, type: 'input' };
  30. } else if (curr.search(/^@\s*EXPECTED\s*:/) === 0) {
  31. next = { ...next, type: 'expected' };
  32. } else if (next.type && Array.isArray(next.cursor[next.type])) {
  33. next.cursor[next.type] = [...next.cursor[next.type], curr];
  34. }
  35. return next;
  36. }, { type: null, tests: [], cursor: null });
  37. return tests.map(({ name, input, expected }) => ({
  38. name,
  39. input: input.join('\n').trim(),
  40. expected: expected.join('\n').trim(),
  41. }));
  42. }
  43. module.exports.run = run;
  44. module.exports.toTestArr = toTestArr;