export const description = ` Test for "pp" preprocessor. `; import { makeTestGroup } from '../common/framework/test_group.js'; import { pp } from '../common/util/preprocessor.js'; import { UnitTest } from './unit_test.js'; class F extends UnitTest { test(act: string, exp: string): void { this.expect(act === exp, 'got: ' + act.replace('\n', '⏎')); } } export const g = makeTestGroup(F); g.test('empty').fn(t => { t.test(pp``, ''); t.test(pp`\n`, '\n'); t.test(pp`\n\n`, '\n\n'); }); g.test('plain').fn(t => { t.test(pp`a`, 'a'); t.test(pp`\na`, '\na'); t.test(pp`\n\na`, '\n\na'); t.test(pp`\na\n`, '\na\n'); t.test(pp`a\n\n`, 'a\n\n'); }); g.test('substitutions,1').fn(t => { const act = pp`a ${3} b`; const exp = 'a 3 b'; t.test(act, exp); }); g.test('substitutions,2').fn(t => { const act = pp`a ${'x'}`; const exp = 'a x'; t.test(act, exp); }); g.test('substitutions,3').fn(t => { const act = pp`a ${'x'} b`; const exp = 'a x b'; t.test(act, exp); }); g.test('substitutions,4').fn(t => { const act = pp` a ${pp._if(false)} ${'x'} ${pp._endif} b`; const exp = '\na\n\nb'; t.test(act, exp); }); g.test('if,true').fn(t => { const act = pp` a ${pp._if(true)}c${pp._endif} d `; const exp = '\na\nc\nd\n'; t.test(act, exp); }); g.test('if,false').fn(t => { const act = pp` a ${pp._if(false)}c${pp._endif} d `; const exp = '\na\n\nd\n'; t.test(act, exp); }); g.test('else,1').fn(t => { const act = pp` a ${pp._if(true)} b ${pp._else} c ${pp._endif} d `; const exp = '\na\n\nb\n\nd\n'; t.test(act, exp); }); g.test('else,2').fn(t => { const act = pp` a ${pp._if(false)} b ${pp._else} c ${pp._endif} d `; const exp = '\na\n\nc\n\nd\n'; t.test(act, exp); }); g.test('elif,1').fn(t => { const act = pp` a ${pp._if(false)} b ${pp._elif(true)} e ${pp._else} c ${pp._endif} d `; const exp = '\na\n\ne\n\nd\n'; t.test(act, exp); }); g.test('elif,2').fn(t => { const act = pp` a ${pp._if(true)} b ${pp._elif(true)} e ${pp._else} c ${pp._endif} d `; const exp = '\na\n\nb\n\nd\n'; t.test(act, exp); }); g.test('nested,1').fn(t => { const act = pp` a ${pp._if(false)} b ${pp.__if(true)} e ${pp.__endif} c ${pp._endif} d `; const exp = '\na\n\nd\n'; t.test(act, exp); }); g.test('nested,2').fn(t => { const act = pp` a ${pp._if(false)} b ${pp._else} h ${pp.__if(false)} e ${pp.__elif(true)} f ${pp.__else} g ${pp.__endif} c ${pp._endif} d `; const exp = '\na\n\nh\n\nf\n\nc\n\nd\n'; t.test(act, exp); }); g.test('errors,pass').fn(() => { pp`${pp._if(true)}${pp._endif}`; pp`${pp._if(true)}${pp._else}${pp._endif}`; pp`${pp._if(true)}${pp.__if(true)}${pp.__endif}${pp._endif}`; }); g.test('errors,fail').fn(t => { const e = (fn: () => void) => t.shouldThrow('Error', fn); e(() => pp`${pp._if(true)}`); e(() => pp`${pp._elif(true)}`); e(() => pp`${pp._else}`); e(() => pp`${pp._endif}`); e(() => pp`${pp.__if(true)}`); e(() => pp`${pp.__elif(true)}`); e(() => pp`${pp.__else}`); e(() => pp`${pp.__endif}`); e(() => pp`${pp._if(true)}${pp._elif(true)}`); e(() => pp`${pp._if(true)}${pp._elif(true)}${pp._else}`); e(() => pp`${pp._if(true)}${pp._else}`); e(() => pp`${pp._else}${pp._endif}`); e(() => pp`${pp._if(true)}${pp.__endif}`); e(() => pp`${pp.__if(true)}${pp.__endif}`); e(() => pp`${pp.__if(true)}${pp._endif}`); e(() => pp`${pp._if(true)}${pp._else}${pp._else}${pp._endif}`); e(() => pp`${pp._if(true)}${pp.__if(true)}${pp.__else}${pp.__else}${pp.__endif}${pp._endif}`); });