view tests/hypothesishelpers.py @ 28796:08a686a4a0a2

hghave: add cvsnt cvsnt is a maintained commercial fork of cvs https://en.wikipedia.org/wiki/CVSNT It is possible to build a version of it from sources (github), it requires libpcre and libltdl (libtool). We already have a test that relates to cvsnt: test-convert-cvsnt-mergepoints.t cvsnt installs: cvs, cvslockd, cvsnt, cvsscript I think we should definitely have a check for cvsnt because it makes the version checks for cvs make a lot more sense. When I use the version I built, cvs --version says: """ Concurrent Versions System (CVSNT) 2.5.05 (Gan) Build 3744 (Suite) (client/server) CVSNT 2.5.05 (Apr 4 2016) Copyright (c) 2008 March Hare Software Ltd. see http://www.march-hare.com/cvspro CVS Copyright (c) 1989-2001 Brian Berliner, david d `zoo' zuhn, Jeff Polk, and other authors CVSNT Copyright (c) 1999-2008 Tony Hoyle and others see http://www.cvsnt.org Commercial support and training provided by March Hare Software Ltd. see http://www.march-hare.com/cvspro CVSNT may be copied only under the terms of the GNU General Public License v2, a copy of which can be found with the CVS distribution. The CVSNT Application API is licensed under the terms of the GNU Library (or Lesser) General Public License. Specify the --help option for further information about CVS """
author timeless <timeless@mozdev.org>
date Mon, 04 Apr 2016 06:27:12 +0000
parents 8699c89f3ae9
children 2372284d9457
line wrap: on
line source

# Helper module to use the Hypothesis tool in tests
#
# Copyright 2015 David R. MacIver
#
# For details see http://hypothesis.readthedocs.org

from __future__ import absolute_import, print_function
import os
import sys
import traceback

try:
    # hypothesis 2.x
    from hypothesis.configuration import set_hypothesis_home_dir
    from hypothesis import settings
except ImportError:
    # hypothesis 1.x
    from hypothesis.settings import set_hypothesis_home_dir
    from hypothesis import Settings as settings
import hypothesis.strategies as st
from hypothesis import given

# hypothesis store data regarding generate example and code
set_hypothesis_home_dir(os.path.join(
    os.getenv('TESTTMP'), ".hypothesis"
))

def check(*args, **kwargs):
    """decorator to make a function a hypothesis test

    Decorated function are run immediately (to be used doctest style)"""
    def accept(f):
        # Workaround for https://github.com/DRMacIver/hypothesis/issues/206
        # Fixed in version 1.13 (released 2015 october 29th)
        f.__module__ = '__anon__'
        try:
            with settings(max_examples=2000):
                given(*args, **kwargs)(f)()
        except Exception:
            traceback.print_exc(file=sys.stdout)
            sys.exit(1)
    return accept


def roundtrips(data, decode, encode):
    """helper to tests function that must do proper encode/decode roundtripping
    """
    @given(data)
    def testroundtrips(value):
        encoded = encode(value)
        decoded = decode(encoded)
        if decoded != value:
            raise ValueError(
                "Round trip failed: %s(%r) -> %s(%r) -> %r" % (
                    encode.__name__, value, decode.__name__, encoded,
                    decoded
                ))
    try:
        testroundtrips()
    except Exception:
        # heredoc swallow traceback, we work around it
        traceback.print_exc(file=sys.stdout)
        raise
    print("Round trip OK")


# strategy for generating bytestring that might be an issue for Mercurial
bytestrings = (
    st.builds(lambda s, e: s.encode(e), st.text(), st.sampled_from([
        'utf-8', 'utf-16',
    ]))) | st.binary()