1import { Driver, UpdateSummary } from "@citeproc-rs/wasm"; 2 3export const mkStyle = (inner: string, bibliography?: string) => { 4 return ` 5 <style class="note"> 6 <info> 7 <id>https://github.com/cormacrelf/citeproc-rs/test-style</id> 8 <title>test-style</title> 9 <updated>2000-01-01T00:00:00Z</updated> 10 </info> 11 <citation> 12 <layout> 13 ${inner} 14 </layout> 15 </citation> 16 ${ bibliography != null ? bibliography : "" } 17 </style> 18 `; 19} 20 21export const mkLocale = (lang: string, terms: { [key: string]: string }) => { 22 return ` 23 <?xml version="1.0" encoding="utf-8"?> <locale xml:lang="${lang}"> 24 <terms> 25 ${ Object.entries(terms).map((k,v) => `<term name="${k}">${v}</term>`).join("\n") } 26 </terms> 27 </locale> 28 `; 29} 30 31export class Fetcher { 32 constructor(private callback: (lang: string) => void, private factory: (lang: string) => string) { } 33 async fetchLocale(lang: string) { 34 this.callback(lang); 35 return this.factory(lang); 36 } 37} 38 39export const boringFetcher = new Fetcher( 40 () => {}, 41 (lang: string) => mkLocale(lang, {}) 42); 43 44export const withDriver = (cfg: any, callback: (driver: Driver) => void) => { 45 let style = cfg.style || mkStyle('<text variable="title" />'); 46 let fetcher = cfg.fetcher || boringFetcher; 47 let format = cfg.format || "plain"; 48 let driver = Driver.new({ style, fetcher, format }).unwrap(); 49 callback(driver); 50 driver.free(); 51}; 52 53export const oneOneOne = (driver: Driver, r?: any, cid?: string) => { 54 let refr = { 55 type: "book", 56 title: "TEST_TITLE", 57 id: "citekey", 58 ...r, 59 }; 60 let id = refr.id; 61 cid = cid || "one"; 62 driver.insertReference(refr).unwrap(); 63 driver.insertCluster({id: cid, cites: [{ id }]}).unwrap(); 64 driver.setClusterOrder([{ id: cid }]).unwrap(); 65}; 66 67export const checkUpdatesLen = (up: UpdateSummary, clusterCount: number, bibCount: number) => { 68 let updates = up; 69 expect(updates.clusters.length).toBe(clusterCount); 70 let updatedKeys = Object.keys(updates.bibliography?.updatedEntries || {}); 71 expect(updatedKeys.length).toBe(bibCount); 72}; 73 74