char/sorcery
static-files based git repo viewer
git clone https://git.t4t.associates/char/sorcery
42f80d8
main
1import { assertEquals } from "jsr:@std/assert@1" ; 2import { canonical , pageAt , viewAt } from "./route.ts" ; 3 4const tip = "a" . repeat ( 40 ); 5const old = "b" . repeat ( 40 ); 6 7Deno . test ( "accepts SHA-1 and SHA-256 object ids" , () => { 8const page = pageAt ( "/u/r/" , "main" , tip ); 9const sha256 = "c" . repeat ( 64 ); 10assertEquals ( viewAt ( page , `#commit/ ${ sha256 } ` ), { kind :"commit" , oid :sha256 , path :[] }); 11assertEquals ( viewAt ( page , `#commit/ ${ "c" . repeat ( 48 )} ` ), null ); 12}); 13 14Deno . test ( "pathname parses to a page" , () => { 15assertEquals ( pageAt ( "/u/r/" , "main" , tip ), { base :"/u/r" , rootBase :"/u/r/" , refBase :"/u/r/ref/main/" , tip, kind :"tree" , path :[] }); 16assertEquals ( pageAt ( "/u/r/refs" , "main" , tip ). rootBase , "/u/r/" ); 17assertEquals ( pageAt ( "/u/r/ref/main/" , "main" , tip ). refBase , "/u/r/ref/main/" ); 18assertEquals ( pageAt ( "/u/r/ref/feat/x/tree/src/a%20b/" , "feat/x" , tip ), { 19base :"/u/r" , 20rootBase :"/u/r/ref/feat/x/" , 21refBase :"/u/r/ref/feat/x/" , 22 tip, 23kind :"tree" , 24path :[ "src" , "a b" ], 25}); 26assertEquals ( pageAt ( "/u/r/ref/main/blob/src/lib.rs" , "main" , tip ). kind , "blob" ); 27}); 28 29Deno . test ( "hash is a delta on the page" , () => { 30const page = pageAt ( "/u/r/ref/main/blob/src/lib.rs" , "main" , tip ); 31assertEquals ( viewAt ( page , "" ), null ); 32assertEquals ( viewAt ( page , "#L12" ), null ); 33assertEquals ( viewAt ( page , `# ${ old } ` ), { kind :"blob" , oid :old , path :[ "src" , "lib.rs" ] }); 34assertEquals ( viewAt ( page , "#history" ), { kind :"history" , oid :tip , path :[ "src" , "lib.rs" ] }); 35assertEquals ( viewAt ( page , `#history/ ${ old } ` ), { kind :"history" , oid :old , path :[ "src" , "lib.rs" ] }); 36assertEquals ( viewAt ( page , `#commit/ ${ old } ` ), { kind :"commit" , oid :old , path :[] }); 37assertEquals ( viewAt ( page , "#language/rust" ), { kind :"language" , oid :tip , path :[ "rust" ] }); 38assertEquals ( viewAt ( page , `#tree/ ${ old } /a%20b/c` ), { kind :"tree" , oid :old , path :[ "a b" , "c" ] }); 39assertEquals ( viewAt ( page , `#tree/ ${ old } ` ), { kind :"tree" , oid :old , path :[] }); 40assertEquals ( viewAt ( pageAt ( "/u/r/" , "main" , null ), "#history" ), null ); 41}); 42 43Deno . test ( "canonical picks the shortest valid form" , () => { 44const page = pageAt ( "/u/r/ref/main/tree/src/" , "main" , tip ); 45const lib = [ "src" , "lib.rs" ]; 46assertEquals ( canonical ( page , { kind :"blob" , oid :tip , path :lib }, "blob" ), "/u/r/ref/main/blob/src/lib.rs" ); 47assertEquals ( canonical ( page , { kind :"blob" , oid :old , path :lib }, "blob" ), `/u/r/ref/main/blob/src/lib.rs# ${ old } ` ); 48assertEquals ( canonical ( page , { kind :"blob" , oid :old , path :lib }, null ), `#blob/ ${ old } /src/lib.rs` ); 49assertEquals ( canonical ( page , { kind :"blob" , oid :old , path :lib }, "tree" ), `#blob/ ${ old } /src/lib.rs` ); 50assertEquals ( canonical ( page , { kind :"tree" , oid :old , path :[] }, "tree" ), `/u/r/ref/main/# ${ old } ` ); 51assertEquals ( canonical ( page , { kind :"history" , oid :tip , path :lib }, "blob" ), "/u/r/ref/main/blob/src/lib.rs#history" ); 52assertEquals ( canonical ( page , { kind :"history" , oid :old , path :[] }, "tree" ), `/u/r/ref/main/#history/ ${ old } ` ); 53assertEquals ( canonical ( page , { kind :"history" , oid :old , path :lib }, null ), `#history/ ${ old } /src/lib.rs` ); 54assertEquals ( canonical ( page , { kind :"commit" , oid :tip , path :[] }, null ), `#commit/ ${ tip } ` ); 55assertEquals ( canonical ( page , { kind :"language" , oid :tip , path :[ "rust" ] }, null ), "/u/r/ref/main/#language/rust" ); 56assertEquals ( canonical ( page , { kind :"language" , oid :old , path :[ "rust" ] }, null ), `/u/r/ref/main/#language/rust/ ${ old } ` ); 57}); 58 59Deno . test ( "canonical round-trips through viewAt" , () => { 60const page = pageAt ( "/u/r/" , "main" , tip ); 61for ( const view of [ 62{ kind :"blob" as const , oid :old , path :[ "a b" , "c.rs" ] }, 63{ kind :"history" as const , oid :old , path :[ "a b" ] }, 64{ kind :"tree" as const , oid :old , path :[ "a b" ] }, 65]) { 66const at = view . kind === "blob" ?"blob" :"tree" ; 67const url = new URL ( canonical ( page , view , at ), "http://x/u/r/" ); 68assertEquals ( viewAt ( pageAt ( url . pathname , "main" , tip ), url . hash ), view ); 69} 70});