From 60879568dad615575d1c1ebe8d43b53b34fcc94f Mon Sep 17 00:00:00 2001 From: Timur Borkhodoev Date: Sat, 3 Feb 2018 22:39:23 -0500 Subject: [PATCH] servo: Merge #19929 - Verify that all values in include.ini represent real directories (from terracotaPie:master); r=jdm wpt manifest(include.ini) contains directories as headers. With this test in **test-tidy** we check if they are present in respective wtp test folders. --- - [X] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [X] These changes fix #19703 Source-Repo: https://github.com/servo/servo Source-Revision: f84e9236aee15348dc9bb3555500117fef922e12 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 3c9eb35064df9e7743837a585e06677ca52c488f --- servo/python/tidy/servo_tidy/tidy.py | 47 ++++++++++++++++++- .../servo_tidy_tests/manifest-include.ini | 5 ++ .../python/tidy/servo_tidy_tests/test_tidy.py | 9 ++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 servo/python/tidy/servo_tidy_tests/manifest-include.ini diff --git a/servo/python/tidy/servo_tidy/tidy.py b/servo/python/tidy/servo_tidy/tidy.py index e12ae4cdeb3e..56e466760e51 100644 --- a/servo/python/tidy/servo_tidy/tidy.py +++ b/servo/python/tidy/servo_tidy/tidy.py @@ -22,10 +22,19 @@ import colorama import toml import voluptuous import yaml - from licenseck import MPL, APACHE, COPYRIGHT, licenses_toml, licenses_dep_toml +topdir = os.path.abspath(os.path.dirname(sys.argv[0])) +wpt = os.path.join(topdir, "tests", "wpt") + + +def wpt_path(*args): + return os.path.join(wpt, *args) + +sys.path.append(wpt_path("web-platform-tests", "tools", "wptrunner", "wptrunner")) +from wptmanifest import parser, node CONFIG_FILE_PATH = os.path.join(".", "servo-tidy.toml") +WPT_MANIFEST_PATH = wpt_path("include.ini") # Default configs config = { @@ -440,6 +449,38 @@ def check_shell(file_name, lines): yield(idx + 1, "variable substitutions should use the full \"${VAR}\" form") +def rec_parse(current_path, root_node): + dirs = [] + for item in root_node.children: + if isinstance(item, node.DataNode): + next_depth = os.path.join(current_path, item.data) + dirs.append(next_depth) + dirs += rec_parse(next_depth, item) + return dirs + + +def check_manifest_dirs(config_file, print_text=True): + if not os.path.exists(config_file): + yield(config_file, 0, "%s manifest file is required but was not found" % config_file) + return + + # Load configs from include.ini + with open(config_file) as content: + conf_file = content.read() + lines = conf_file.splitlines(True) + + if print_text: + print '\rChecking the wpt manifest file...' + + p = parser.parse(lines) + paths = rec_parse(wpt_path("web-platform-tests"), p) + for idx, path in enumerate(paths): + if path.endswith("_mozilla"): + continue + if not os.path.isdir(path): + yield(config_file, idx + 1, "Path in manifest was not found: {}".format(path)) + + def check_rust(file_name, lines): if not file_name.endswith(".rs") or \ file_name.endswith(".mako.rs") or \ @@ -1122,6 +1163,8 @@ def run_lint_scripts(only_changed_files=False, progress=True, stylo=False): def scan(only_changed_files=False, progress=True, stylo=False): # check config file for errors config_errors = check_config_file(CONFIG_FILE_PATH) + # check ini directories exist + manifest_errors = check_manifest_dirs(WPT_MANIFEST_PATH) # check directories contain expected files directory_errors = check_directory_files(config['check_ext']) # standard checks @@ -1135,7 +1178,7 @@ def scan(only_changed_files=False, progress=True, stylo=False): # other lint checks lint_errors = run_lint_scripts(only_changed_files, progress, stylo=stylo) # chain all the iterators - errors = itertools.chain(config_errors, directory_errors, lint_errors, + errors = itertools.chain(config_errors, manifest_errors, directory_errors, lint_errors, file_errors, dep_license_errors) error = None diff --git a/servo/python/tidy/servo_tidy_tests/manifest-include.ini b/servo/python/tidy/servo_tidy_tests/manifest-include.ini new file mode 100644 index 000000000000..ade00f2fa31b --- /dev/null +++ b/servo/python/tidy/servo_tidy_tests/manifest-include.ini @@ -0,0 +1,5 @@ +skip: true +[html] + skip: false +[never_going_to_exist] + skip: false diff --git a/servo/python/tidy/servo_tidy_tests/test_tidy.py b/servo/python/tidy/servo_tidy_tests/test_tidy.py index 432d5c1117e8..dbc3f9d4f8b4 100644 --- a/servo/python/tidy/servo_tidy_tests/test_tidy.py +++ b/servo/python/tidy/servo_tidy_tests/test_tidy.py @@ -33,6 +33,15 @@ class CheckTidiness(unittest.TestCase): self.assertEqual("ignored directory './fake/dir' doesn't exist", errors.next()[2]) self.assertNoMoreErrors(errors) + def test_non_existing_wpt_manifest_checks(self): + wrong_path = "/wrong/path.ini" + errors = tidy.check_manifest_dirs(wrong_path, print_text=False) + self.assertEqual("%s manifest file is required but was not found" % wrong_path, errors.next()[2]) + self.assertNoMoreErrors(errors) + errors = tidy.check_manifest_dirs(os.path.join(base_path, 'manifest-include.ini'), print_text=False) + self.assertTrue(errors.next()[2].endswith("never_going_to_exist")) + self.assertNoMoreErrors(errors) + def test_directory_checks(self): dirs = { os.path.join(base_path, "dir_check/webidl_plus"): ['webidl', 'test'],