def test_difference_between(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 4
    assert s.evaluate_expression('the difference between yourself and nothing', 'Juliet') == 4
    assert s.evaluate_expression('the difference between yourself and my chihuahua', 'Juliet') == 3
    assert s.evaluate_expression('the difference between yourself and my codpiece', 'Juliet') == 5
    assert s.evaluate_expression('the difference between yourself and my big big chihuahua', 'Juliet') == 0
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('the difference between yourself and nothing', 'Juliet') == 1
    assert s.evaluate_expression('the difference between yourself and my chihuahua', 'Juliet') == 0
    assert s.evaluate_expression('the difference between yourself and my codpiece', 'Juliet') == 2
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('the difference between thyself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the difference between yourself and my chihuahua', 'Juliet') == -1
    assert s.evaluate_expression('the difference between yourself and my codpiece', 'Juliet') == 1
    s._character_by_name('Romeo').value = -1
    assert s.evaluate_expression('the difference between yourself and nothing', 'Juliet') == -1
    assert s.evaluate_expression('the difference between yourself and my chihuahua', 'Juliet') == -2
    assert s.evaluate_expression('the difference between yourself and my codpiece', 'Juliet') == 0
    s._character_by_name('Romeo').value = -4
    assert s.evaluate_expression('the difference between yourself and nothing', 'Juliet') == -4
    assert s.evaluate_expression('the difference between yourself and my chihuahua', 'Juliet') == -5
    assert s.evaluate_expression('the difference between yourself and my codpiece', 'Juliet') == -3
    assert s.evaluate_expression('the difference between thyself and thy foul stupid devil', 'Juliet') == 0
def test_product_of(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 4
    assert s.evaluate_expression('the product of yourself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my chihuahua', 'Juliet') == 4
    assert s.evaluate_expression('the product of yourself and my codpiece', 'Juliet') == -4
    assert s.evaluate_expression('the product of yourself and my big big chihuahua', 'Juliet') == 16
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('the product of yourself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my chihuahua', 'Juliet') == 1
    assert s.evaluate_expression('the product of yourself and my codpiece', 'Juliet') == -1
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('the product of thyself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my chihuahua', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my codpiece', 'Juliet') == 0
    s._character_by_name('Romeo').value = -1
    assert s.evaluate_expression('the product of yourself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my chihuahua', 'Juliet') == -1
    assert s.evaluate_expression('the product of yourself and my codpiece', 'Juliet') == 1
    s._character_by_name('Romeo').value = -4
    assert s.evaluate_expression('the product of yourself and nothing', 'Juliet') == 0
    assert s.evaluate_expression('the product of yourself and my chihuahua', 'Juliet') == -4
    assert s.evaluate_expression('the product of yourself and my codpiece', 'Juliet') == 4
    assert s.evaluate_expression('the product of thyself and thy foul stupid devil', 'Juliet') == 16
def test_outputs_correct_character(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s._character_by_name('Romeo').value = 97
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'a'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 98
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'b'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 10
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '\n'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 65
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'A'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 66
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'B'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 9
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '\t'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 38
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '&'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 64
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '@'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 32
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == ' '
    assert captured.err == ''
def test_errors_without_character_opposite(monkeypatch, capsys):
    monkeypatch.setattr(Shakespeare, 'evaluate_expression',
                        lambda x, y, z: 400)
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_dramatis_persona('Macbeth, a test.')
    s.run_event('[Enter Juliet]')

    assert s._character_by_name('Romeo').value == 0
    assert s._character_by_name('Macbeth').value == 0
    with pytest.raises(Exception) as exc:
        s.run_sentence('You are as good as me!',
                       s._on_stage_character_by_name('Juliet'))
    assert 'talking to nobody' in str(exc.value).lower()
    assert s._character_by_name('Romeo').value == 0
    assert s._character_by_name('Macbeth').value == 0

    s.run_event('[Enter Macbeth and Romeo]')
    assert s._character_by_name('Romeo').value == 0
    assert s._character_by_name('Macbeth').value == 0
    with pytest.raises(Exception) as exc:
        s.run_sentence('You are as good as me!',
                       s._on_stage_character_by_name('Juliet'))
    assert 'ambiguous' in str(exc.value).lower()
    assert s._character_by_name('Romeo').value == 0
    assert s._character_by_name('Macbeth').value == 0

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_first_person_pronouns(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s._character_by_name('Juliet').value = 895
    assert s.evaluate_expression('me', 'Juliet') == 895
    assert s.evaluate_expression('myself', 'Juliet') == 895
    assert s.evaluate_expression('I', 'Juliet') == 895
def test_past_eof(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO(''))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == -1

    monkeypatch.setattr('sys.stdin', StringIO('a'))
    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 97
    captured = capsys.readouterr()

    assert captured.out == ''
    assert captured.err == ''
def test_square_root_of(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 16
    assert s.evaluate_expression('the square root of yourself', 'Juliet') == 4
    assert s.evaluate_expression('the square root of my big big big big chihuahua', 'Juliet') == 4
    s._character_by_name('Romeo').value = 18
    assert s.evaluate_expression('the square root of yourself', 'Juliet') == 4
    s._character_by_name('Romeo').value = 41
    assert s.evaluate_expression('the square root of yourself', 'Juliet') == 6
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('the square root of thyself', 'Juliet') == 1
    assert s.evaluate_expression('the square root of my chihuahua', 'Juliet') == 1
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('the square root of thyself', 'Juliet') == 0
    assert s.evaluate_expression('the square root of nothing', 'Juliet') == 0
    s._character_by_name('Romeo').value = -1
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the square root of thyself', 'Juliet')
    assert 'negative' in str(exc.value).lower()
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the square root of thy devil', 'Juliet')
    assert 'negative' in str(exc.value).lower()
    s._character_by_name('Romeo').value = -4
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the square root of thyself', 'Juliet')
    assert 'negative' in str(exc.value).lower()
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the square root of thy foul stupid devil', 'Juliet')
    assert 'negative' in str(exc.value).lower()
def test_character_name(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 895
    assert s.evaluate_expression('Romeo', 'Juliet') == 895
    s.run_event('[Exit Romeo]')
    assert s.evaluate_expression('Romeo', 'Juliet') == 895
def test_assign_character(monkeypatch, capsys):
    monkeypatch.setattr(Shakespeare, 'evaluate_expression',
                        lambda x, y, z: 400)
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    assert s._character_by_name('Romeo').value == 0
    s.run_sentence('You are as good as me!',
                   s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 400

    s._character_by_name('Romeo').value = 0
    s.run_sentence('You are a pig!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 400
    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_twice(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 4
    assert s.evaluate_expression('twice yourself', 'Juliet') == 8
    assert s.evaluate_expression('twice my big big chihuahua', 'Juliet') == 8
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('twice thyself', 'Juliet') == 2
    assert s.evaluate_expression('twice my chihuahua', 'Juliet') == 2
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('twice thyself', 'Juliet') == 0
    assert s.evaluate_expression('twice nothing', 'Juliet') == 0
    s._character_by_name('Romeo').value = -1
    assert s.evaluate_expression('twice thyself', 'Juliet') == -2
    assert s.evaluate_expression('twice thy devil', 'Juliet') == -2
    s._character_by_name('Romeo').value = -4
    assert s.evaluate_expression('twice thyself', 'Juliet') == -8
    assert s.evaluate_expression('twice thy foul stupid devil', 'Juliet') == -8
def test_eof_character_code(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('&'))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 38

    # shakespearelang assumes an implicit \n at the end of files
    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 10

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == -1

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_errors_without_digits(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('a123'))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    with pytest.raises(Exception) as exc:
        s.run_sentence('Listen to your heart!', s._on_stage_character_by_name('Juliet'))
    assert 'no numeric input' in str(exc.value).lower()
    assert s._character_by_name('Romeo').value == 0

    monkeypatch.setattr('sys.stdin', StringIO('a123'))
    with pytest.raises(Exception) as exc:
        s.run_sentence('Listen to your heart!', s._on_stage_character_by_name('Juliet'))
    assert 'no numeric input' in str(exc.value).lower()
    assert s._character_by_name('Romeo').value == 0
    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_correctly_parses_number(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('4257'))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s.run_sentence('Listen to your heart!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 4257
    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_second_person_pronouns(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 895
    assert s.evaluate_expression('you', 'Juliet') == 895
    assert s.evaluate_expression('thou', 'Juliet') == 895
    assert s.evaluate_expression('thee', 'Juliet') == 895
    assert s.evaluate_expression('thyself', 'Juliet') == 895
    assert s.evaluate_expression('yourself', 'Juliet') == 895
def test_cube_of(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 4
    assert s.evaluate_expression('the cube of yourself', 'Juliet') == 64
    assert s.evaluate_expression('the cube of my golden golden chihuahua', 'Juliet') == 64
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('the cube of thyself', 'Juliet') == 1
    assert s.evaluate_expression('the cube of my chihuahua', 'Juliet') == 1
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('the cube of thyself', 'Juliet') == 0
    assert s.evaluate_expression('the cube of nothing', 'Juliet') == 0
    s._character_by_name('Romeo').value = -1
    assert s.evaluate_expression('the cube of thyself', 'Juliet') == -1
    assert s.evaluate_expression('the cube of thy devil', 'Juliet') == -1
    s._character_by_name('Romeo').value = -4
    assert s.evaluate_expression('the cube of thyself', 'Juliet') == -64
    assert s.evaluate_expression('the cube of thy foul stupid devil', 'Juliet') == -64
def test_errors_on_invalid_code(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s._character_by_name('Romeo').value = 100000000
    with pytest.raises(Exception) as exc:
        s.run_sentence('Speak your mind!',
                       s._on_stage_character_by_name('Juliet'))
    assert 'invalid character code' in str(exc.value).lower()

    s._character_by_name('Romeo').value = -1
    with pytest.raises(Exception) as exc:
        s.run_sentence('Speak your mind!',
                       s._on_stage_character_by_name('Juliet'))
    assert 'invalid character code' in str(exc.value).lower()

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_unicode(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('ʘɥӜआઔඦᢶᨆᵇḤ'))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 664

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 613

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 1244

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 2310

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 2708

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 3494

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 6326

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 6662

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 7495

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 7716

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_consumes_trailing_newline(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('4257\na'))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s.run_sentence('Listen to your heart!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 4257
    assert s._input_buffer == ''
    assert input() == 'a'
    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_remainder(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    s._character_by_name('Romeo').value = 12
    assert s.evaluate_expression('the remainder of the quotient between yourself and my chihuahua', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and my big chihuahua', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and my big big chihuahua', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and my codpiece', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and my foul codpiece', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and my foul rotten codpiece', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between yourself and yourself', 'Juliet') == 0
    assert s.evaluate_expression('the remainder of the quotient between my big big chihuahua and yourself', 'Juliet') == 4
    assert s.evaluate_expression('the remainder of the quotient between my foul rotten codpiece and yourself', 'Juliet') == -4
    s._character_by_name('Romeo').value = 23
    assert s.evaluate_expression('the remainder of the quotient between yourself and my big big big chihuahua', 'Juliet') == 7
    assert s.evaluate_expression('the remainder of the quotient between yourself and my evil foul rotten codpiece', 'Juliet') == 7

    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the remainder of the quotient between yourself and nothing', 'Juliet')
    assert 'zero' in str(exc.value).lower()
def test_outputs_numbers(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s._character_by_name('Romeo').value = 4100
    s.run_sentence('Open your heart!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '4100'
    assert captured.err == ''

    s._character_by_name('Romeo').value = -5
    s.run_sentence('Open your heart!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '-5'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 9
    s.run_sentence('Open your heart!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == '9'
    assert captured.err == ''
def test_reads_characters_accurately(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('ab\nAB\t&@ '))
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 97

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 98

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 10

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 65

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 66

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 9

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 38

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 64

    s.run_sentence('Open your mind!', s._on_stage_character_by_name('Juliet'))
    assert s._character_by_name('Romeo').value == 32

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
def test_unicode(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')

    s._character_by_name('Romeo').value = 664
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ʘ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 613
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ɥ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 1244
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'Ӝ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 2310
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'आ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 2708
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ઔ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 3494
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ඦ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 6326
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ᢶ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 6662
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ᨆ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 7495
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'ᵇ'
    assert captured.err == ''

    s._character_by_name('Romeo').value = 7716
    s.run_sentence('Speak your mind!', s._on_stage_character_by_name('Juliet'))
    captured = capsys.readouterr()
    assert captured.out == 'Ḥ'
    assert captured.err == ''