tests/test-minifileset.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sun, 11 Mar 2018 10:51:14 -0700
changeset 36895 a5c478843c82
parent 35741 73432eee0ac4
child 37877 2cdae2582d8a
permissions -rw-r--r--
hgweb: construct static URL like hgweb does hgwebdir has a bit of code for constructing URLs. This reinvents wheels from our parsedrequest instance. And sometimes the behavior varies from what hgweb does. We'll want to converge that behavior. This commit changes hgwebdir so its staticurl template keyword is constructed the same way as hgweb's. There's probably room to factor this into a shared function. But let's solve the problem of divergence first. Differential Revision: https://phab.mercurial-scm.org/D2817

from __future__ import absolute_import
from __future__ import print_function

import os
import sys

# make it runnable directly without run-tests.py
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), '..')]

from mercurial import minifileset

def check(text, truecases, falsecases):
    f = minifileset.compile(text)
    for args in truecases:
        if not f(*args):
            print('unexpected: %r should include %r' % (text, args))
    for args in falsecases:
        if f(*args):
            print('unexpected: %r should exclude %r' % (text, args))

check('all()', [('a.php', 123), ('b.txt', 0)], [])
check('none()', [], [('a.php', 123), ('b.txt', 0)])
check('!!!!((!(!!all())))', [], [('a.php', 123), ('b.txt', 0)])

check('"path:a" & (**.b | **.c)', [('a/b.b', 0), ('a/c.c', 0)], [('b/c.c', 0)])
check('(path:a & **.b) | **.c',
      [('a/b.b', 0), ('a/c.c', 0), ('b/c.c', 0)], [])

check('**.bin - size("<20B")', [('b.bin', 21)], [('a.bin', 11), ('b.txt', 21)])

check('!!**.bin or size(">20B") + "path:bin" or !size(">10")',
      [('a.bin', 11), ('b.txt', 21), ('bin/abc', 11)],
      [('a.notbin', 11), ('b.txt', 11), ('bin2/abc', 11)])

check('(**.php and size(">10KB")) | **.zip | ("path:bin" & !"path:bin/README") '
      ' | size(">1M")',
      [('a.php', 15000), ('a.zip', 0), ('bin/a', 0), ('bin/README', 1e7)],
      [('a.php', 5000), ('b.zip2', 0), ('t/bin/a', 0), ('bin/README', 1)])