[PATCH v2 libinput 4/4] tools: add a verification tool to make sure the json format is correct
Peter Hutterer
peter.hutterer at who-t.net
Thu Feb 22 05:55:30 UTC 2018
---
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
More information about the wayland-devel
mailing list