diff --git a/.gitignore b/.gitignore index fcd3dc26..a6df58a7 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,9 @@ stamp-h1 /content/*.gresource /content/*.gresource.xml /data/eos-save-icon-grid -/data/settings/icon-grid-*.json +/data/test-suite.log +/data/settings/validate-grid-json.py.log +/data/settings/validate-grid-json.py.trs /debian/eos-acknowledgements /debian/eos-shell-content /debian/eos-shell-content-dev @@ -53,4 +55,5 @@ stamp-h1 /po/stamp-po /po/*.gmo /py-compile +/test-driver /unzipped diff --git a/data/Makefile.am b/data/Makefile.am index eb377a00..aba644f5 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -2,13 +2,9 @@ foldersdir = $(datadir)/desktop-directories folders_DATA = $(wildcard folders/*.directory) settingsdir = $(pkgdatadir)/icon-grid-defaults -settings_in_files = $(wildcard settings/icon-grid-*.json.in) -settings_DATA = $(settings_in_files:.in=) -dist_noinst_SCRIPTS = settings/write-grid-json.py +settings_DATA = $(wildcard settings/icon-grid-*.json) -%.json: %.json.in settings/arch-blacklist.json settings/write-grid-json.py - $(AM_V_GEN)$(srcdir)/settings/write-grid-json.py -o $@ \ - $< $(srcdir)/settings/arch-blacklist.json $(host_cpu) +TESTS = settings/validate-grid-json.py do_subst = sed \ -e 's|@PKG_DATA_DIR[@]|$(pkgdatadir)|g' \ @@ -20,8 +16,6 @@ eos-save-icon-grid: eos-save-icon-grid.in Makefile EXTRA_DIST = \ $(folders_DATA) \ - $(settings_in_files) \ - settings/arch-blacklist.json \ eos-save-icon-grid.in \ $(NULL) @@ -30,6 +24,5 @@ bin_SCRIPTS = \ $(NULL) CLEANFILES = \ - $(settings_DATA) \ eos-save-icon-grid \ $(NULL) diff --git a/data/settings/arch-blacklist.json b/data/settings/arch-blacklist.json deleted file mode 100644 index bd4310de..00000000 --- a/data/settings/arch-blacklist.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "arm" : [ - "eos-folder-games-to-hack.directory" - ] -} diff --git a/data/settings/icon-grid-C.json.in b/data/settings/icon-grid-C.json similarity index 100% rename from data/settings/icon-grid-C.json.in rename to data/settings/icon-grid-C.json diff --git a/data/settings/icon-grid-ar.json.in b/data/settings/icon-grid-ar.json similarity index 100% rename from data/settings/icon-grid-ar.json.in rename to data/settings/icon-grid-ar.json diff --git a/data/settings/icon-grid-bn.json.in b/data/settings/icon-grid-bn.json similarity index 100% rename from data/settings/icon-grid-bn.json.in rename to data/settings/icon-grid-bn.json diff --git a/data/settings/icon-grid-es.json.in b/data/settings/icon-grid-es.json similarity index 100% rename from data/settings/icon-grid-es.json.in rename to data/settings/icon-grid-es.json diff --git a/data/settings/icon-grid-es_GT.json.in b/data/settings/icon-grid-es_GT.json similarity index 100% rename from data/settings/icon-grid-es_GT.json.in rename to data/settings/icon-grid-es_GT.json diff --git a/data/settings/icon-grid-fr.json.in b/data/settings/icon-grid-fr.json similarity index 100% rename from data/settings/icon-grid-fr.json.in rename to data/settings/icon-grid-fr.json diff --git a/data/settings/icon-grid-id.json.in b/data/settings/icon-grid-id.json similarity index 100% rename from data/settings/icon-grid-id.json.in rename to data/settings/icon-grid-id.json diff --git a/data/settings/icon-grid-pt.json.in b/data/settings/icon-grid-pt.json similarity index 100% rename from data/settings/icon-grid-pt.json.in rename to data/settings/icon-grid-pt.json diff --git a/data/settings/icon-grid-th.json.in b/data/settings/icon-grid-th.json similarity index 100% rename from data/settings/icon-grid-th.json.in rename to data/settings/icon-grid-th.json diff --git a/data/settings/icon-grid-vi.json.in b/data/settings/icon-grid-vi.json similarity index 100% rename from data/settings/icon-grid-vi.json.in rename to data/settings/icon-grid-vi.json diff --git a/data/settings/icon-grid-zh_CN.json.in b/data/settings/icon-grid-zh_CN.json similarity index 100% rename from data/settings/icon-grid-zh_CN.json.in rename to data/settings/icon-grid-zh_CN.json diff --git a/data/settings/validate-grid-json.py b/data/settings/validate-grid-json.py new file mode 100755 index 00000000..0aca7593 --- /dev/null +++ b/data/settings/validate-grid-json.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +from argparse import ArgumentParser, FileType +import json +import os +import sys +import glob + +def check(filename): + print(f"Checking {filename}") + + # Load template + with open(filename) as f: + grid = json.load(f) + + # Check that all directories are in the top-level "desktop" pseudo-directory + desktop = grid["desktop"] + for directory in grid: + if directory != "desktop" and directory not in desktop: + raise ValueError( + '"{}" defined but not in "desktop" directory'.format(directory) + ) + +def main(): + aparser = ArgumentParser(description='Validate icon grid JSON files') + aparser.add_argument('input', + help='input template file (default: all grid files in script directory)', + nargs="*") + args = aparser.parse_args() + + if not args.input: + args.input = glob.glob( + os.path.dirname(__file__) + "/icon-grid-*.json", + ) + + for filename in args.input: + check(filename) + +if __name__ == "__main__": + main() diff --git a/data/settings/write-grid-json.py b/data/settings/write-grid-json.py deleted file mode 100755 index 6241b5f8..00000000 --- a/data/settings/write-grid-json.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python3 - -from argparse import ArgumentParser -from collections import OrderedDict -import errno -import json -import os -import sys - -aparser = ArgumentParser(description='Write icon grid json file') -aparser.add_argument('-o', '--output', help='output file') -aparser.add_argument('input', help='input template file') -aparser.add_argument('blacklist', help='blacklist file') -aparser.add_argument('cpu', help='CPU for blacklisting') -args = aparser.parse_args() - -# Load with template and blacklist. Use OrderedDict for the grid to -# maintain sorting of the keys. -with open(args.input, 'r') as infile: - grid = json.load(infile, object_pairs_hook=OrderedDict) -with open(args.blacklist, 'r') as blfile: - blacklist = json.load(blfile) - -# Open the a temporary version of the output file if specified, ensuring -# that leading directories are created first. -if args.output is None: - outfile = sys.stdout -else: - outdir = os.path.dirname(args.output) - if len(outdir) > 0: - try: - os.makedirs(outdir) - except OSError as err: - if err.errno != errno.EEXIST: - raise - outfile = open(args.output + '.tmp', 'w') - -# Strip out blacklisted apps -cpu_blacklist = blacklist.get(args.cpu, []) -for app in cpu_blacklist: - if app in grid: - del grid[app] - for sect, apps in grid.items(): - if app in apps: - grid[sect].remove(app) - -# Check that all directories are in the top-level "desktop" pseudo-directory -desktop = grid["desktop"] -for directory in grid: - if directory != "desktop" and directory not in desktop: - raise ValueError( - '"{}" defined but not in "desktop" directory'.format(directory) - ) - -# Write out the new json, keeping the indentation, separators and -# trailing newline from the original. If successful, rename the -# temporary file to the final name. -json.dump(grid, outfile, indent=2, separators=(',', ' : ')) -outfile.write('\n') -if args.output is not None: - outfile.close() - os.rename(args.output + '.tmp', args.output)