Gizmo: show extrude gizmos with dark '+' instead of negative space
[blender.git] / tests / python / bl_keymap_completeness.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20
21 # simple script to test 'bl_keymap_utils.keymap_hierarchy' contains correct values.
22
23 # Needed for 'bl_keymap_utils.keymap_hierarchy' which inspects tools.
24 import sys
25 import os
26 sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "release", "scripts", "startup"))
27 del sys, os
28
29 from bl_keymap_utils import keymap_hierarchy
30
31
32 def check_maps():
33     maps = {}
34
35     def fill_maps(seq):
36         for km_name, km_space_type, km_region_type, km_sub in seq:
37             maps[km_name] = (km_space_type, km_region_type)
38             fill_maps(km_sub)
39
40     fill_maps(keymap_hierarchy.generate())
41
42     import bpy
43     keyconf = bpy.context.window_manager.keyconfigs.active
44     maps_bl = set(keyconf.keymaps.keys())
45     maps_py = set(maps.keys())
46
47     err = False
48     # Check keyconfig contains only maps that exist in blender
49     test = maps_py - maps_bl
50     if test:
51         print("Keymaps that are in 'bl_keymap_utils.keymap_hierarchy' but not blender")
52         for km_id in test:
53             if callable(km_id):
54                 # Keymap functions of tools are not in blender anyway...
55                 continue
56             print("\t%s" % km_id)
57             # TODO T65963, broken keymap hierarchy tests disabled until fixed.
58             # err = True
59
60     test = maps_bl - maps_py
61     if test:
62         print("Keymaps that are in blender but not in 'bl_keymap_utils.keymap_hierarchy'")
63         for km_id in test:
64             km = keyconf.keymaps[km_id]
65             print("    ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
66         # TODO T65963, broken keymap hierarchy tests disabled until fixed.
67         # err = True
68
69     # Check space/region's are OK
70     print("Comparing keymap space/region types...")
71     for km_id, km in keyconf.keymaps.items():
72         km_py = maps.get(km_id)
73         if km_py is not None:
74             km_space_type, km_region_type = km_py
75             if km_space_type != km.space_type or km_region_type != km.region_type:
76                 print("  Error:")
77                 print("    expected -- ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
78                 print("    got      -- ('%s', '%s', '%s', [])," % (km_id, km_space_type, km_region_type))
79     print("done!")
80
81     return err
82
83
84 def main():
85     err = check_maps()
86
87     import bpy
88     if err and bpy.app.background:
89         # alert CTest we failed
90         import sys
91         sys.exit(1)
92
93
94 if __name__ == "__main__":
95     main()