// test_registry.mbt — Tests for the offline IANA Link Relation Types
// registry snapshot (relation_registry.mbt).
///|
test "the offline registry snapshot is populated and lookup is case-insensitive" {
// The snapshot holds a substantial number of relation types.
let count = registered_relation_count()
assert_true(count >= 60)
// Well-known registered relations are present.
assert_true(is_registered_relation("next"))
assert_true(is_registered_relation("self"))
assert_true(is_registered_relation("alternate"))
assert_true(is_registered_relation("canonical"))
assert_true(is_registered_relation("prev"))
assert_true(is_registered_relation("stylesheet"))
assert_true(is_registered_relation("icon"))
assert_true(is_registered_relation("manifest"))
assert_true(is_registered_relation("preconnect"))
// Matching is case-insensitive per RFC 8288 Section 2.1.1.
assert_true(is_registered_relation("NEXT"))
assert_true(is_registered_relation("Canonical"))
// Unknown names, empty strings and extension URIs are not registered.
assert_true(is_registered_relation("nxt") == false)
assert_true(is_registered_relation("") == false)
assert_true(is_registered_relation("https://rel.example/x") == false)
// relation_info returns the canonical entry, or None for unknown names.
match relation_info("canonical") {
Some(info) => {
assert_str_eq(info.name(), "canonical")
assert_true(info.description().length() > 0)
assert_true(info.reference().length() > 0)
}
None => fail("canonical should be present")
}
assert_true(relation_info("not-a-real-rel") is None)
// registered_relations() is a fresh, complete copy in registry order.
let all = registered_relations()
assert_true(all.length() == count)
for i = 1; i < all.length(); i = i + 1 {
assert_true(all[i - 1].name() <= all[i].name())
}
// Mutating the returned copy does not affect later calls.
all[0] = { name: "zzz", description: "", reference: "", notes: "" }
assert_true(is_registered_relation(all[0].name()) == false)
assert_true(registered_relations().length() == count)
}