from pathlib import Path
import sys
root=Path(__file__).resolve().parents[2]
doc=(root/'docs/reference/controls/file-explorer-property-grid-and-filter-builder.md').read_text(encoding='utf-8')
checks={
'filter factory':'Public Function AddFilterBuilder' in (root/'MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Data.vb').read_text(encoding='utf-8'),
'property factory':'Public Function AddPropertyGrid' in (root/'MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Inputs.vb').read_text(encoding='utf-8'),
'explorer factory':'Public Function AddFileExplorerView' in (root/'MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Media.vb').read_text(encoding='utf-8'),
'filter max':'MaxStoredRules As Integer = 64' in (root/'Component/Tokens/Component/FilterBuilderTokens.vb').read_text(encoding='utf-8'),
'filter default':'DefaultTitle As String = "Filter builder"' in (root/'Component/Tokens/Component/FilterBuilderTokens.vb').read_text(encoding='utf-8'),
'filter events':all(x in (root/'Component/Data/FilterBuilder/MASFilterBuilder.vb').read_text(encoding='utf-8') for x in ['Public Event RulesChanged','Public Event SelectedRuleChanged','Public Function RemoveSelectedRule']),
'property defaults':'Private _title As String = "Properties"' in (root/'Component/Editor/PropertyGrid/Control/MASPropertyGrid.vb').read_text(encoding='utf-8'),
'property sizes':all(x in (root/'Component/Editor/PropertyGrid/Rendering/MASPropertyGridTokens.vb').read_text(encoding='utf-8') for x in ['360.0F, 420.0F','260.0F, 220.0F']),
'property null guard':'If source Is Nothing Then Throw New ArgumentNullException' in (root/'Component/Editor/PropertyGrid/Control/MASPropertyGrid.vb').read_text(encoding='utf-8'),
'explorer children':all(x in (root/'Component/Navigation/FileExplorer/Core/MASFileExplorerView.Api.vb').read_text(encoding='utf-8') for x in ['Public ReadOnly Property TreeView','Public ReadOnly Property ListView','Public ReadOnly Property SearchBox']),
'explorer events':all(x in (root/'Component/Navigation/FileExplorer/Core/MASFileExplorerView.vb').read_text(encoding='utf-8') for x in ['Public Event CurrentFolderChanged','Public Event ExplorerItemActivated','Public Event CloseRequested']),
'item model':all(x in (root/'Component/Navigation/FileExplorer/Core/MASFileExplorerItem.vb').read_text(encoding='utf-8') for x in ['Public Function AddFolder','Public Function AddFile','Public Sub AddChild','Public Function BuildCanonicalPath']),
'doc classifications':doc.count('**Advanced**')>=1,
'doc limits':'64 rules' in doc and 'five rows' in doc,
}
failed=[k for k,v in checks.items() if not v]
print(f'Assertions: {len(checks)-len(failed)} passed, {len(failed)} failed')
if failed:
    print('\n'.join('FAIL: '+x for x in failed)); sys.exit(1)
