diff --git a/src/etc/htmldocck.py b/src/etc/htmldocck.py index 7e8fde2034640..8a11c6f7cfc4c 100644 --- a/src/etc/htmldocck.py +++ b/src/etc/htmldocck.py @@ -99,6 +99,8 @@ * `@count PATH XPATH COUNT' checks for the occurrence of given XPath in the given file. The number of occurrences must match the given count. +* `@has-dir PATH` checks for the existence of the given directory. + All conditions can be negated with `!`. `@!has foo/type.NoSuch.html` checks if the given file does not exist, for example. @@ -308,6 +310,12 @@ def get_tree(self, path): self.trees[path] = tree return self.trees[path] + def get_dir(self, path): + path = self.resolve_path(path) + abspath = os.path.join(self.root, path) + if not(os.path.exists(abspath) and os.path.isdir(abspath)): + raise FailedCheck('Directory does not exist {!r}'.format(path)) + def check_string(data, pat, regexp): if not pat: @@ -407,6 +415,16 @@ def check_command(c, cache): ret = expected == found else: raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd)) + elif c.cmd == 'has-dir': # has-dir test + if len(c.args) == 1: # @has-dir = has-dir test + try: + cache.get_dir(c.args[0]) + ret = True + except FailedCheck as err: + cerr = str(err) + ret = False + else: + raise InvalidCheck('Invalid number of @{} arguments'.format(c.cmd)) elif c.cmd == 'valid-html': raise InvalidCheck('Unimplemented @valid-html') diff --git a/src/test/rustdoc/inline_local/glob-private.rs b/src/test/rustdoc/inline_local/glob-private.rs index b5e256dfdce94..ecc754f012ed1 100644 --- a/src/test/rustdoc/inline_local/glob-private.rs +++ b/src/test/rustdoc/inline_local/glob-private.rs @@ -34,16 +34,19 @@ pub use mod1::*; // @has foo/struct.Mod2Public.html // @!has foo/struct.Mod2Private.html +// @has-dir foo/mod1 // @!has foo/mod1/index.html // @has foo/mod1/struct.Mod1Public.html // @!has foo/mod1/struct.Mod1Private.html // @!has foo/mod1/struct.Mod2Public.html // @!has foo/mod1/struct.Mod2Private.html +// @has-dir foo/mod1/mod2 // @!has foo/mod1/mod2/index.html // @has foo/mod1/mod2/struct.Mod2Public.html // @!has foo/mod1/mod2/struct.Mod2Private.html +// @!has-dir foo/mod2 // @!has foo/mod2/index.html // @!has foo/mod2/struct.Mod2Public.html // @!has foo/mod2/struct.Mod2Private.html