╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ ui.zig ───────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
49 50 // a ref name with a '/' is url-encoded in the route, so it survives the 51 // '/'-delimited url round-trip as a single segment (kind + value) rather than 52 // being mis-parsed as extra path. 53 test "encoded ref name survives the commits url round-trip" { 54 var arena = std.heap.ArenaAllocator.init(std.testing.allocator); 55 defer arena.deinit(); 56 const RP = ui.RoutablePage; 57 58 // the route layer holds the value already url-encoded ("feature%2Ffoo"). 59 const route = RP.repoCommitsRoute("alice/ziglings", .branch, "feature%2Ffoo", 0, "").?; 60 const url = try route.toUrl(&arena); 61 try std.testing.expectEqualStrings("/repo/alice/ziglings/commits/branch:feature%2Ffoo", url); 62 63 // parsing it back yields the same route, and the ref splits out intact. 64 const parsed = RP.fromUrl(url); 65 try std.testing.expect(parsed != null); 66 const parsed_route = parsed.?.repo_commits; 67 try std.testing.expectEqual(RP.RefOrOid.branch, parsed_route.ref_or_oid.?); 68 try std.testing.expectEqualStrings("feature%2Ffoo", parsed_route.value.slice()); 69 } 70