Skip to content

Commit

Permalink
Add a way to assert the number of occurrences to htmldocck
Browse files Browse the repository at this point in the history
  • Loading branch information
sanxiyn committed Feb 26, 2015
1 parent f7aafcc commit 5e1d4ff
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/etc/htmldocck.py
Expand Up @@ -96,6 +96,9 @@
highlights for example. If you want to simply check the presence of
given node or attribute, use an empty string (`""`) as a `PATTERN`.
* `@count PATH XPATH COUNT' checks for the occurrence of given XPath
in the given file. The number of occurrences must match the given count.
All conditions can be negated with `!`. `@!has foo/type.NoSuch.html`
checks if the given file does not exist, for example.
Expand Down Expand Up @@ -333,6 +336,11 @@ def check_tree_text(tree, path, pat, regexp):
return ret


def check_tree_count(tree, path, count):
path = normalize_xpath(path)
return len(tree.findall(path)) == count


def check(target, commands):
cache = CachedFiles(target)
for c in commands:
Expand Down Expand Up @@ -360,6 +368,13 @@ def check(target, commands):
raise RuntimeError('Invalid number of @{} arguments \
at line {}'.format(c.cmd, c.lineno))

elif c.cmd == 'count': # count test
if len(c.args) == 3: # @count <path> <pat> <count> = count test
ret = check_tree_count(cache.get_tree(c.args[0]), c.args[1], int(c.args[2]))
else:
raise RuntimeError('Invalid number of @{} arguments \
at line {}'.format(c.cmd, c.lineno))

elif c.cmd == 'valid-html':
raise RuntimeError('Unimplemented @valid-html at line {}'.format(c.lineno))

Expand Down

0 comments on commit 5e1d4ff

Please sign in to comment.