Coverage for tests/test_renderer.py: 100.00%

15 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-03-09 18:38 +0100

1"""Tests for the handlers.python module.""" 

2 

3from __future__ import annotations 

4 

5from copy import deepcopy 

6 

7from mkdocstrings_handlers.python.rendering import ( 

8 rebuild_category_lists, 

9 sort_key_alphabetical, 

10 sort_key_source, 

11 sort_object, 

12) 

13 

14 

15def test_members_order() -> None: 

16 """Assert that members sorting functions work correctly.""" 

17 subcategories: dict[str, list] = {key: [] for key in ("attributes", "classes", "functions", "methods", "modules")} 

18 categories = {"children": {}, **subcategories} 

19 collected = { 

20 "name": "root", 

21 "children": { 

22 "b": {"name": "b", "source": {"line_start": 0}, **categories}, 

23 "a": {"name": "a", **categories}, 

24 "z": {"name": "z", "source": {"line_start": 100}, **categories}, 

25 "no_name": {"source": {"line_start": 10}, **categories}, 

26 "c": { 

27 "name": "c", 

28 "source": {"line_start": 30}, 

29 "children": { 

30 "z": {"name": "z", "source": {"line_start": 200}, **categories}, 

31 "a": {"name": "a", "source": {"line_start": 20}, **categories}, 

32 }, 

33 **subcategories, 

34 }, 

35 }, 

36 "attributes": ["b", "c", "no_name", "z", "a"], 

37 "classes": [], 

38 "functions": [], 

39 "methods": [], 

40 "modules": [], 

41 } 

42 rebuild_category_lists(collected) 

43 alphebetical = deepcopy(collected) 

44 sort_object(alphebetical, sort_key_alphabetical) 

45 

46 rebuilt_categories = {"children": [], **subcategories} 

47 assert ( 

48 alphebetical["children"] 

49 == alphebetical["attributes"] 

50 == [ 

51 {"name": "a", **rebuilt_categories}, 

52 {"name": "b", "source": {"line_start": 0}, **rebuilt_categories}, 

53 { 

54 "name": "c", 

55 "source": {"line_start": 30}, 

56 "children": [ 

57 {"name": "a", "source": {"line_start": 20}, **rebuilt_categories}, 

58 {"name": "z", "source": {"line_start": 200}, **rebuilt_categories}, 

59 ], 

60 **subcategories, 

61 }, 

62 {"name": "z", "source": {"line_start": 100}, **rebuilt_categories}, 

63 {"source": {"line_start": 10}, **rebuilt_categories}, 

64 ] 

65 ) 

66 

67 source = deepcopy(collected) 

68 sort_object(source, sort_key_source) 

69 

70 assert ( 

71 source["children"] 

72 == source["attributes"] 

73 == [ 

74 {"name": "a", **rebuilt_categories}, 

75 {"name": "b", "source": {"line_start": 0}, **rebuilt_categories}, 

76 {"source": {"line_start": 10}, **rebuilt_categories}, 

77 { 

78 "name": "c", 

79 "source": {"line_start": 30}, 

80 "children": [ 

81 {"name": "a", "source": {"line_start": 20}, **rebuilt_categories}, 

82 {"name": "z", "source": {"line_start": 200}, **rebuilt_categories}, 

83 ], 

84 **subcategories, 

85 }, 

86 {"name": "z", "source": {"line_start": 100}, **rebuilt_categories}, 

87 ] 

88 )