from pathlib import Path

root = Path(__file__).resolve().parents[2]
checks = {
    "selector factory": (root / "MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Buttons.vb", "Public Function AddSelectorItemList(Optional items As IEnumerable(Of MASSelectorItemEntry) = Nothing"),
    "selector stable": (root / "docs/reference/api/all-public-types-index.md", "`MASSelectorItemControl` | Class | Stable | V1Stable"),
    "entry advanced": (root / "docs/reference/api/all-public-types-index.md", "`MASSelectorItemEntry` | Class | Advanced | —"),
    "entry empty id": (root / "Component/Selectors/SelectorItem/MASSelectorItemEntry.vb", 'If safeId.Length = 0 Then Throw New ArgumentException("Selector item id cannot be empty."'),
    "entry nonnegative count": (root / "Component/Selectors/SelectorItem/MASSelectorItemEntry.vb", "Me.Count = Math.Max(0, count)"),
    "selector duplicate ids": (root / "Component/Selectors/SelectorItem/SelectorItem.vb", "Dim ids As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)"),
    "selector selected id": (root / "Component/Selectors/SelectorItem/MASSelectorItemControl.vb", "Public ReadOnly Property SelectedId As String"),
    "selector invalid index": (root / "Component/Selectors/SelectorItem/MASSelectorItemControl.vb", 'Throw New ArgumentOutOfRangeException(NameOf(index), "Selected index is outside the selector item range.")'),
    "selector default size": (root / "Component/Tokens/Component/SelectorItemTokens.vb", "Friend Const DefaultWidth As Single = 260.0F"),
    "selector max visible": (root / "Component/Tokens/Component/SelectorItemTokens.vb", "Friend Const MaxVisibleRows As Integer = 6"),
    "transfer factory": (root / "MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Navigation.vb", "Public Function AddTransferList(Optional availableItems As IEnumerable(Of String) = Nothing"),
    "transfer advanced": (root / "docs/reference/api/all-public-types-index.md", "`MASTransferList` | Class | Advanced | —"),
    "transfer defaults": (root / "Component/Tokens/Component/TransferListTokens.vb", 'Friend Const DefaultTitle As String = "Transfer list"'),
    "transfer capacity": (root / "Component/Tokens/Component/TransferListTokens.vb", "Friend Const MaxStoredItems As Integer = 512"),
    "transfer visible rows": (root / "Component/Tokens/Component/TransferListTokens.vb", "Friend Const MaxVisibleRows As Integer = 8"),
    "transfer preferred size": (root / "Component/Tokens/Component/TransferListTokens.vb", "Friend Const PreferredWidthDip As Single = 760.0F"),
    "transfer normalization": (root / "Component/Navigation/TransferList/MASTransferListPolicy.vb", "Dim normalized As String = NormalizeItem(value)"),
    "transfer duplicates retained": (root / "Component/Navigation/TransferList/MASTransferListPolicy.vb", "result.Add(normalized)"),
    "transfer one move order": (root / "Component/Navigation/TransferList/MASTransferList.ItemModel.vb", "RaiseSelectionChangedSafe()\n            RaiseItemsTransferredSafe()"),
    "transfer filter keyboard": (root / "Component/Navigation/TransferList/MASTransferList.Interaction.vb", "If keyCode = Keys.Back Then"),
    "transfer rtl": (root / "Component/Navigation/TransferList/MASTransferList.Interaction.vb", "If MASTransferListPolicy.ResolveRightToLeft() Then"),
    "documentation": (root / "docs/reference/controls/selector-items-and-transfer-lists.md", "# Selector Items and Transfer Lists"),
    "reference link": (root / "docs/reference-guide.md", "reference/controls/selector-items-and-transfer-lists.md"),
    "user link": (root / "docs/user/controls.md", "../reference/controls/selector-items-and-transfer-lists.md"),
}
failed = []
for name, (path, needle) in checks.items():
    text = path.read_text(encoding="utf-8-sig")
    if needle not in text:
        failed.append(f"{name}: {path} missing {needle!r}")
if failed:
    print("Assertions failed:")
    print("\n".join(failed))
    raise SystemExit(1)
print(f"Assertions: {len(checks)} passed, 0 failed")
