--- tools/libinput-record-json-verify.py | 88 ++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 tools/libinput-record-json-verify.py
diff --git a/tools/libinput-record-json-verify.py b/tools/libinput-record-json-verify.py new file mode 100755 index 00000000..0ecba215 --- /dev/null +++ b/tools/libinput-record-json-verify.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 + +import json +import sys + +def verify_json_format_1(json): + assert json['version'] == 1 + assert json['ndevices'] >= 1 + assert 'system' in json + + system = json['system'] + assert system['libinput'] + assert system['kernel'] + assert system['dmi'] + + assert 'devices' in json + devices = json['devices'] + + assert len(devices) == json['ndevices'] + for d in json['devices']: + assert 'evdev' in d + evdev = d['evdev'] + + assert evdev['name'] + assert len(evdev['id']) == 4 + for i in evdev['id']: + assert i >= 0 + + # bus, vid, pid should not be 0 on recorded devices + assert evdev['id'][0] != 0 # bus type + assert evdev['id'][1] != 0 # vendor id + assert evdev['id'][2] != 0 # product id + + # All EV_SYN bits are always set + assert evdev['syn'] == list(range(0, 16)) + + if 'key' in evdev: + assert len(evdev['key']) > 0 + + if 'rel' in evdev: + assert len(evdev['rel']) > 0 + + if 'abs' in evdev: + assert len(evdev['abs']) > 0 + assert 'absinfo' in evdev + + for ai in evdev['absinfo']: + # any abs entry must be in absinfo, and vice versa + assert ai[0] in evdev['abs'] + # min < max + assert ai[1] <= ai[2] + assert len(ai) == 6 + + # any abs entry must be in absinfo, and vice versa + ai_codes = [ai[0] for ai in evdev['absinfo']] + for code in evdev['abs']: + assert code in ai_codes + + assert 'key' in evdev or 'rel' in evdev or 'abs' in evdev + + assert len(evdev['properties']) >= 0 + for p in evdev['properties']: + assert p >= 0 and p <= 6 # current max + + assert 'events' in d + for frame in d['events']: + assert 'evdev' in frame + first_event = frame['evdev'][0] + last_event = frame['evdev'][-1] + for event in frame['evdev']: + data = event['data'] + assert len(data) == 5 + # All timestamps within a frame are the same + assert data[0:1] == first_event['data'][0:1] + + # SYN_REPORT + assert last_event['data'][2] == 0 + assert last_event['data'][3] == 0 + assert last_event['data'][4] == 0 + + +def main(argv): + with open(argv[1]) as f: + verify_json_format_1(json.load(f)) + + +if __name__ == "__main__": + main(sys.argv) -- 2.14.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel