import { assert } from 'chai'; import { pprintNumber, pprintArray, pprintString, render, pprint, Pprint } from '../../main/ts/api/Pprint'; import { single, pnode } from '../../main/ts/api/Pnode'; interface Some { 'kind': 'some'; value: T; } interface None { 'kind': 'none'; } type Maybe = Some | None; const some = (value: A): Maybe => ({ kind: 'some', value }); const none = (): Maybe => ({ kind: 'none' }); const pprintMaybe = (pprintA: Pprint): Pprint> => pprint((oa) => { if (oa.kind === 'none') { return single('None()'); } else { return pnode('Some(', [ pprintA.pprint(oa.value) ], ')'); } }); describe('pprintMaybe', () => { it('renders', () => { assert.strictEqual( render( some([ some('a') ]), pprintMaybe(pprintArray(pprintMaybe(pprintString)))), 'Some(\n' + ' [\n' + ' Some(\n' + ' "a"\n' + ' )\n' + ' ]\n' + ')' ); assert.strictEqual( render(none(), pprintMaybe(pprintNumber)), 'None()' ); assert.strictEqual( render(some(22), pprintMaybe(pprintNumber)), 'Some(\n' + ' 22\n' + ')' ); }); });