review/tests/test_comment.py @ 802d01307f77

web: add a bit of context for colorboxes
author Steve Losh <steve@stevelosh.com>
date Fri, 18 Jun 2010 21:12:56 -0400
parents d5280b38dd4c
children bc5a004bfcca
from nose import *
from util import *
from .. import api, messages

import os
from mercurial import util as hgutil
from mercurial.node import hex

a1, a2 = (messages.REVIEW_LOG_COMMENT_AUTHOR % '|').split('|')

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_no_comments():
    output = review()
    assert messages.REVIEW_LOG_COMMENTS % (0, 0) in output


# TODO: Figure out how to handle external editors nicely with nose.
#@with_setup(setup_reviewed_sandbox, teardown_sandbox)
#def test_blank_comment():
    #try:
        #review(comment=True, message=' \t\n')
    #except hgutil.Abort, e:
        #error = str(e)
        #assert messages.COMMENT_REQUIRES_MESSAGE in error
    #else:
        #assert False, 'The correct error message was not printed.'

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

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_comment_formatting():
    review(comment=True, message=' \tTest comment one.\t ')
    output = review()

    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % ' \tTest comment one.' not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.\t ' not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % ' \tTest comment one.\t ' not in output
    review(rev=0, comment=True,
           message=' \tTest\n  indented\n\ttabindented\noutdented  \ndone\t ')
    output = review(rev=0)

    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % '  indented' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % '\ttabindented' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'outdented  ' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'done' in output


@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_parent_rev():
    review(comment=True, message='Test comment one.')

    output = review()
    assert messages.REVIEW_LOG_COMMENTS % (1, 1) in output

    assert a1 in output
    assert a2 in output

    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    review(comment=True, message='Test comment two.')

    output = review()
    assert messages.REVIEW_LOG_COMMENTS % (2, 1) in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment two.' in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_specific_rev():
    review(comment=True, message='Test comment one.', rev='0')

    output = review(rev='0')
    assert messages.REVIEW_LOG_COMMENTS % (1, 1) in output

    assert a1 in output
    assert a2 in output

    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    output = review()
    assert messages.REVIEW_LOG_COMMENTS % (0, 0) in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

    review(comment=True, message='Test comment two.', rev='0')

    output = review(rev='0')
    assert messages.REVIEW_LOG_COMMENTS % (2, 1) in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment two.' in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file():
    review(comment=True, message='Test comment one.', rev='1', files=['file_one'])

    output = review(rev='1', files=['file_one'])
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    output = review(rev='1', files=['file_two'])
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

    output = review(rev='0', files=['file_one'])
    assert a1 not in output
    assert a2 not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_multiple_files():
    review(comment=True, message='Test comment.', rev='1',
        files=['file_one', 'always_changing'])

    output = review(rev='1')
    assert output.count(messages.REVIEW_LOG_COMMENT_LINE % 'Test comment.') == 2

    try:
        review(comment=True, rev='1', message='Test bad comment.', lines='1',
            files=['file_one', 'always_changing'])
    except hgutil.Abort, e:
        error = str(e)
        assert messages.COMMENT_LINES_REQUIRE_FILE in error
    else:
        assert False, 'The correct error message was not printed.'

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_bad_file():
    try:
        review(comment=True, message='Test comment one.', files=['bad'])
    except hgutil.Abort, e:
        error = str(e)
        assert messages.COMMENT_FILE_DOES_NOT_EXIST % ('bad', '2') in error
    else:
        assert False, 'The correct error message was not printed.'

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file_line():
    try:
        review(comment=True, rev='1', message='Test bad comment.', lines='1')
    except hgutil.Abort, e:
        error = str(e)
        assert messages.COMMENT_LINES_REQUIRE_FILE in error
    else:
        assert False, 'The correct error message was not printed.'

    review(comment=True, rev='1', message='Test comment one.',
        files=['file_one'], lines='1')

    output = review(rev='1', files=['file_one'])

    # Make sure the comment is present at all.
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    # Make sure it's in the correct place
    output = output.splitlines()
    for n, line in enumerate(output):
        if line.startswith('#'):
            assert output[n-1].strip().startswith('1')
            break

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file_lines():
    review(comment=True, rev='1', message='Test comment one.',
        files=['file_one'], lines='1,2')

    output = review(rev='1', files=['file_one'])

    # Make sure the comment is present at all.
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    # Make sure it's in the correct place
    output = output.splitlines()
    for n, line in enumerate(output):
        if line.startswith('#'):
            assert output[n-1].strip().startswith('2')
            break

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file_in_subdir():
    filename = os.path.join('test_dir', 'test_file')

    review(comment=True, message='Test comment one.', rev='1', files=[filename])

    output = review(rev='1', files=[filename])
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    output = review(rev='1', files=['file_two'])
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

    output = review(rev='0', files=[filename])
    assert a1 not in output
    assert a2 not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file_in_cwd():
    os.chdir('test_dir')
    review(comment=True, message='Test comment one.', rev='1', files=['test_file'])

    output = review(rev='1', files=['test_file'])
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    output = review(rev='1', files=['file_two'])
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

    output = review(rev='0', files=['test_file'])
    assert a1 not in output
    assert a2 not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_add_comments_to_file_in_reldir():
    filename = os.path.join('..', 'file_three')

    os.chdir('test_dir')
    review(comment=True, message='Test comment one.', rev='1', files=[filename])

    output = review(rev='1', files=[filename])
    assert a1 in output
    assert a2 in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' in output

    output = review(rev='1', files=['file_two'])
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

    output = review(rev='0', files=[filename])
    assert a1 not in output
    assert a2 not in output
    assert messages.REVIEW_LOG_COMMENT_LINE % 'Test comment one.' not in output

@with_setup(setup_reviewed_sandbox, teardown_sandbox)
def test_comment_identifiers():
    review(comment=True, message='Test comment one.', rev='1', files=['file_one'])

    rd = api.ReviewDatastore(get_ui(), get_sandbox_repo())
    dsr = get_datastore_repo()

    comment = rd['1'].comments[0]

    identifier = comment.identifier
    short_identifier = identifier[:12]

    comment_filename = api._split_path_dammit(dsr['tip'].files()[0])[-1]
    comment_cset = hex(dsr['tip'].node())

    assert identifier == comment_filename
    assert identifier != comment_cset

    verbose_identifier = messages.REVIEW_LOG_IDENTIFIER % identifier[:12]
    debug_identifier = messages.REVIEW_LOG_IDENTIFIER % identifier

    normal_output = review(rev='1')
    assert verbose_identifier not in normal_output
    assert debug_identifier not in normal_output

    verbose_output = review(rev='1', verbose=True)
    assert verbose_identifier in verbose_output
    assert debug_identifier not in verbose_output

    debug_output = review(rev='1', debug=True)
    assert verbose_identifier not in debug_output
    assert debug_identifier in debug_output