tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

draft-storage.test.mjs (1592B)


      1 import test from 'node:test';
      2 import assert from 'node:assert/strict';
      3 import {DRAFT_KEY,savedDraft,readDraft,writeDraft} from '../dist/draft-storage.js';
      4 const draft={schema:1,source:'invalid unfinished source is still saved',name:'id',arguments:'[]',output:'tree',mode:'pure'};
      5 function storage(){const values=new Map();return {getItem:k=>values.get(k)??null,setItem:(k,v)=>values.set(k,v),removeItem:k=>values.delete(k)};}
      6 test('recovery retains source and exact demo context but no risky mode or executable state',()=>{
      7  const s=storage();assert.equal(readDraft(s),undefined);
      8  const demo={hash:'a'.repeat(64),environment:'practical'};
      9  writeDraft(s,{...draft,demo,uncapped:true,compiled:true});
     10  assert.deepEqual(readDraft(s),{...draft,demo});
     11  s.removeItem(DRAFT_KEY);assert.equal(readDraft(s),undefined);
     12 });
     13 test('recovery rejects malformed, oversized or unavailable storage without silent success',()=>{
     14  for(const value of [null,[],{}, {...draft,schema:2},{...draft,source:'x'.repeat(32769)},{...draft,demo:{hash:'bad',environment:'empty'}}])assert.throws(()=>savedDraft(value));
     15  const s=storage();s.setItem(DRAFT_KEY,'{');assert.throws(()=>readDraft(s));
     16  s.setItem(DRAFT_KEY,' '.repeat(100001));assert.throws(()=>readDraft(s),/large/);
     17  assert.throws(()=>writeDraft(s,{...draft,source:'\0'.repeat(32768)}),/large/);
     18  assert.throws(()=>writeDraft({setItem(){throw new Error('quota');}},draft),/quota/);
     19  assert.throws(()=>writeDraft({setItem(){},getItem(){return null;}},draft),/verification/);
     20  assert.throws(()=>readDraft({getItem(){throw new Error('denied');}}),/denied/);
     21 });