about summary refs log tree commit diff
path: root/src/etc/htmldocck.py
diff options
context:
space:
mode:
authorSeo Sanghyeon <sanxiyn@gmail.com>2015-02-27 00:27:57 +0900
committerSeo Sanghyeon <sanxiyn@gmail.com>2015-02-27 00:27:57 +0900
commit5e1d4fffff1516758f43b22b2e89327e5ec0918c (patch)
treec8e65257d2d393eed473d1614c1e946e2a79835b /src/etc/htmldocck.py
parentf7aafcced8d7374ddbe50a509cb0bcec959254c4 (diff)
downloadrust-5e1d4fffff1516758f43b22b2e89327e5ec0918c.tar.gz
rust-5e1d4fffff1516758f43b22b2e89327e5ec0918c.zip
Add a way to assert the number of occurrences to htmldocck
Diffstat (limited to 'src/etc/htmldocck.py')
-rw-r--r--src/etc/htmldocck.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/etc/htmldocck.py b/src/etc/htmldocck.py
index 22792ff7635..a212e3a0435 100644
--- a/src/etc/htmldocck.py
+++ b/src/etc/htmldocck.py
@@ -96,6 +96,9 @@ There are a number of supported commands:
   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.
 
@@ -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:
@@ -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))