[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