definition-inspector.test.mjs (1226B)
1 import test from 'node:test'; 2 import assert from 'node:assert/strict'; 3 import {definitionSites,inspectionText} from '../dist/definition-inspector.js'; 4 test('inspection sites are unique top-level heads, never comments, strings or local binders',()=>{ 5 const source='!export answer\n-- fake = 1\nanswer = 42\nf [] = 0\nf xs = 1\ntext = "not = a definition"\nouter x =\n let local = x\n in local\n|- hidden = 2 -|'; 6 assert.deepEqual(definitionSites('outer = let\n answer = 1\n in answer\nanswer = 42').map(s=>s.name),['outer','answer']); 7 assert.deepEqual(definitionSites(source).map(s=>s.name),['answer','f','text','outer']); 8 for(const site of definitionSites(source))assert.equal(source.slice(site.start,site.start+site.name.length),site.name); 9 }); 10 test('inspection text respects decoder output and preserves zero/false/empty text',()=>{ 11 assert.equal(inspectionText({type:'number',value:'0'}),'0'); 12 assert.equal(inspectionText({type:'bool',value:false}),'false'); 13 assert.equal(inspectionText({type:'string',value:''}),''); 14 assert.equal(inspectionText({type:'tricu',value:'ignored',file:{text:'t',extension:'tri',bytes:1}}),'t'); 15 assert.throws(()=>inspectionText({type:'tree',value:{}}),/source interpretation/); 16 });