review/tests/test_delete.py @ e29d33ec47b1

cli: add support for deleting items
author Steve Losh <steve@stevelosh.com>
date Sat, 19 Jun 2010 02:03:37 -0400
parents (none)
children 40e13965af72
from nose import *
from util import *
from .. import api, messages

from mercurial import util as hgutil

a1, a2 = (messages.REVIEW_LOG_COMMENT_AUTHOR % '|').split('|')
s1, s2 = (messages.REVIEW_LOG_SIGNOFF_AUTHOR % ('|', 'neutral')).split('|')

def _get_identifiers(rev='.'):
    return [l.split(' ')[-1].strip('()\n')
            for l in review(rev=rev, verbose=True).splitlines()
            if (a1 in l and a2 in l) or (s1 in l and s2 in l)]


@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_delete_invalid():
    # TODO: rename files.

    try:
        review(delete=True)
    except hgutil.Abort, e:
        error = str(e)
        assert messages.DELETE_REQUIRES_IDS in error
    else:
        assert False, 'The correct error message was not printed.'

    try:
        review(delete=True, files=['a'])
    except hgutil.Abort, e:
        error = str(e)
        assert messages.DELETE_UNKNOWN_ID % 'a' in error
    else:
        assert False, 'The correct error message was not printed.'

    review(comment=True, message='test')

    try:
        review(delete=True, files=['z'])
    except hgutil.Abort, e:
        error = str(e)
        assert messages.DELETE_UNKNOWN_ID % 'z' in error
    else:
        assert False, 'The correct error message was not printed.'

    # Use the pidgeonhole princicple to create ambiguous identifiers.
    for i in range(17):
        review(comment=True, message='test%d' % i)

    ids = _get_identifiers()
    id_map = {}
    for i in ids:
        id_map[i[0]] = id_map.get(i[0], 0) + 1
    i = str(filter(lambda k: id_map[k] > 1, id_map.keys())[0])

    try:
        review(delete=True, files=[i])
    except hgutil.Abort, e:
        error = str(e)
        print error
        assert messages.DELETE_AMBIGUOUS_ID % i in error
    else:
        assert False, 'The correct error message was not printed.'

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_delete_comment():
    def t(rev):
        review(rev=rev, comment=True, message='test')
        i = _get_identifiers(rev)[0]

        output = review(rev=rev, delete=True, files=[i])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i not in output

        review(rev=rev, comment=True, message='test2')
        review(rev=rev, comment=True, message='test3')
        i1, i2 = _get_identifiers(rev)

        output = review(rev=rev, delete=True, files=[i1])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i1 not in output
        assert '(%s)\n' % i2 in output

        review(rev=rev, comment=True, message='test4')
        i1, i2 = _get_identifiers(rev)

        output = review(rev=rev, delete=True, files=[i1, i2])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i1 not in output
        assert '(%s)\n' % i2 not in output
    t('.')
    t('0')

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_delete_signoff():
    # TODO: test multiple signoff deletions
    review(signoff=True, message='test')
    i = _get_identifiers()[0]

    output = review(delete=True, files=[i])
    assert not output
    output = review(verbose=True)
    assert '(%s)\n' % i not in output

    review(comment=True, message='test2')
    review(signoff=True, message='test3')
    i1, i2 = _get_identifiers()

    output = review(delete=True, files=[i2])
    assert not output
    output = review(verbose=True)
    assert '(%s)\n' % i1 in output
    assert '(%s)\n' % i2 not in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_delete_both():
    def t(rev):
        review(rev=rev, signoff=True, message='test')
        review(rev=rev, comment=True, message='test')
        ids = _get_identifiers(rev)

        output = review(rev=rev, delete=True, files=ids)
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % ids[0] not in output
        assert '(%s)\n' % ids[1] not in output

        review(rev=rev, signoff=True, message='test2')
        review(rev=rev, comment=True, message='test3')
        review(rev=rev, comment=True, message='test4')
        ids = _get_identifiers(rev)

        output = review(rev=rev, delete=True, files=ids[:2])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % ids[0] not in output
        assert '(%s)\n' % ids[1] not in output
        assert '(%s)\n' % ids[2] in output
    t('.')
    t('0')