Merge branch 'blender2.7'
[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 sorted(test):
53             print("\t%s" % km_id)
54         err = True
55
56     test = maps_bl - maps_py
57     if test:
58         print("Keymaps that are in blender but not in 'bl_keymap_utils.keymap_hierarchy'")
59         for km_id in sorted(test):
60             km = keyconf.keymaps[km_id]
61             print("    ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
62         err = True
63
64     # Check space/region's are OK
65     print("Comparing keymap space/region types...")
66     for km_id, km in keyconf.keymaps.items():
67         km_py = maps.get(km_id)
68         if km_py is not None:
69             km_space_type, km_region_type = km_py
70             if km_space_type != km.space_type or km_region_type != km.region_type:
71                 print("  Error:")
72                 print("    expected -- ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
73                 print("    got      -- ('%s', '%s', '%s', [])," % (km_id, km_space_type, km_region_type))
74     print("done!")
75
76     return err
77
78
79 def main():
80     err = check_maps()
81
82     import bpy
83     if err and bpy.app.background:
84         # alert CTest we failed
85         import sys
86         sys.exit(1)
87
88
89 if __name__ == "__main__":
90     main()