UNPKG

3.13 kBSource Map (JSON)View Raw
1{"version":3,"file":"marble-unparser.js","sourceRoot":"","sources":["../../src/marble-unparser.ts"],"names":[],"mappings":";;;AAIA,SAAgB,aAAa,CAC3B,MAAoB,EACpB,cAAgD;IAEhD,IAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC,6DAA6D;IAC3F,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAM,2BAA2B,GAAG;QAClC,IAAM,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACtC,OAAO,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IAClE,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,UAAC,WAAW,EAAE,CAAC;QAC5B,KAAK,GAAG,CAAC,CAAC;QAEV,IAAM,UAAU,GAAG,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC;QAC9C,IAAM,iBAAiB,GACrB,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAExC,IAAI,2BAA2B,EAAE,EAAE;YACjC,IAAI,CAAC,SAAS,EAAE;gBACd,MAAM,IAAI,GAAG,CAAC;aACf;YACD,SAAS,GAAG,IAAI,CAAC;SAClB;QAED,QAAQ,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE;YACrC,KAAK,GAAG;gBACN,MAAM,IAAI,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM;YACR,KAAK,GAAG;gBACN,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM;SACT;QAED,IAAI,SAAS,EAAE;YACb,kBAAkB,IAAI,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,2BAA2B,EAAE,IAAI,SAAS,EAAE;YAC/C,MAAM,IAAI,GAAG,CAAC;YACd,SAAS,GAAG,KAAK,CAAC;YAClB,MAAM,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC;YACvD,kBAAkB,GAAG,CAAC,CAAC;SACxB;aAAM;YACL,MAAM,GAAG,WAAW,CAAC,KAAK,GAAG,iBAAiB,CAAC;SAChD;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AA1DD,sCA0DC","sourcesContent":["import { Notification } from 'rxjs';\n\nimport { TestMessages } from './types';\n\nexport function unparseMarble(\n result: TestMessages,\n assignSymbolFn: (a: Notification<any>) => string,\n): string {\n const FRAME_TIME_FACTOR = 10; // need to be up to date with `TestScheduler.frameTimeFactor`\n let frames = 0;\n let marble = '';\n let isInGroup = false;\n let groupMembersAmount = 0;\n let index = 0;\n\n const isNextMessageInTheSameFrame = () => {\n const nextMessage = result[index + 1];\n return nextMessage && nextMessage.frame === result[index].frame;\n };\n\n result.forEach((testMessage, i) => {\n index = i;\n\n const framesDiff = testMessage.frame - frames;\n const emptyFramesAmount =\n framesDiff > 0 ? framesDiff / FRAME_TIME_FACTOR : 0;\n marble += '-'.repeat(emptyFramesAmount);\n\n if (isNextMessageInTheSameFrame()) {\n if (!isInGroup) {\n marble += '(';\n }\n isInGroup = true;\n }\n\n switch (testMessage.notification.kind) {\n case 'N':\n marble += assignSymbolFn(testMessage.notification);\n break;\n case 'E':\n marble += '#';\n break;\n case 'C':\n marble += '|';\n break;\n }\n\n if (isInGroup) {\n groupMembersAmount += 1;\n }\n\n if (!isNextMessageInTheSameFrame() && isInGroup) {\n marble += ')';\n isInGroup = false;\n frames += (groupMembersAmount + 1) * FRAME_TIME_FACTOR;\n groupMembersAmount = 0;\n } else {\n frames = testMessage.frame + FRAME_TIME_FACTOR;\n }\n });\n\n return marble;\n}\n"]}
\No newline at end of file