Ejemplo n.º 1
0
def test_complex_expressions(capsys):
    s = Shakespeare()
    s.run_dramatis_persona('Juliet, a test.')
    s.run_dramatis_persona('Romeo, a test.')
    s.run_event('[Enter Romeo and Juliet]')
    # (2 * ((4 + 2)^3) * (2 + 4)) % (1 + (2 * (2 + 1))) = 2
    first_expression = """
        the remainder of the quotient between
            twice
                the product of
                    the cube of
                        the sum of
                            my big chihuahua
                            and
                            my big big chihuahua
                    and
                    the sum of
                        my big chihuahua
                        and
                        my big big chihuahua
            and
            the sum of
                my chihuahua
                and
                twice
                    the sum of
                        my big chihuahua
                        and
                        my chihuahua
    """
    assert s.evaluate_expression(first_expression, None) == 2
    # (8! - (16^3 - 1)) % (16 - (2 + 1)) = 7
    second_expression = """
        the remainder of the quotient between
            the difference between
                the factorial of
                    my big big big chihuahua
                and
                the difference between
                    the cube of
                        my big big big big chihuahua
                    and
                    my chihuahua
            and
            the difference between
                my big big big big chihuahua
                and
                the sum of
                    my big chihuahua
                    and
                    my chihuahua
    """
    assert s.evaluate_expression(second_expression, None) == 7
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
def test_runs_sierpinski(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('4'))
    path = Path(__file__).parent / "sample_plays/sierpinski.spl"
    with path.open() as f:
        Shakespeare().run_play(f.read())
    captured = capsys.readouterr()
    assert captured.out == """\
>               *               \n\
              * *              \n\
             *   *             \n\
            * * * *            \n\
           *       *           \n\
          * *     * *          \n\
         *   *   *   *         \n\
        * * * * * * * *        \n\
       *               *       \n\
      * *             * *      \n\
     *   *           *   *     \n\
    * * * *         * * * *    \n\
   *       *       *       *   \n\
  * *     * *     * *     * *  \n\
 *   *   *   *   *   *   *   * \n\
* * * * * * * * * * * * * * * *\n\
"""
    assert captured.err == ''
Ejemplo n.º 4
0
def test_runs_hi(capsys):
    path = Path(__file__).parent / "sample_plays/hi.spl"
    with path.open() as f:
        Shakespeare().run_play(f.read())
    captured = capsys.readouterr()
    assert captured.out == 'HI\n'
    assert captured.err == ''
Ejemplo n.º 5
0
def test_goto_next(monkeypatch, capsys):
    s = Shakespeare()
    s.load_play(SAMPLE_PLAY)

    assert s.current_position == {'act': 0, 'scene': 0, 'event': 0}
    s.step_forward()
    assert s.current_position == {'act': 0, 'scene': 0, 'event': 1}
    s.run_sentence('Let us proceed to scene II.', s._on_stage_character_by_name('Juliet'))
    assert s.current_position == {'act': 0, 'scene': 1, 'event': 0}

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
Ejemplo n.º 6
0
def test_runs_primes(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('20'))
    path = Path(__file__).parent / "sample_plays/primes.spl"
    with path.open() as f:
        Shakespeare().run_play(f.read())
    captured = capsys.readouterr()
    assert captured.out == '>2\n3\n5\n7\n11\n13\n17\n19\n'
    assert captured.err == ''
Ejemplo n.º 7
0
def test_runs_reverse(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('first\nsecond\nthird'))
    path = Path(__file__).parent / "sample_plays/reverse.spl"
    with path.open() as f:
        Shakespeare().run_play(f.read())
    captured = capsys.readouterr()
    assert captured.out == '\ndriht\ndnoces\ntsrif'
    assert captured.err == ''
Ejemplo n.º 8
0
def test_runs_echo(monkeypatch, capsys):
    monkeypatch.setattr('sys.stdin', StringIO('m123cfoobar123'))
    path = Path(__file__).parent / "sample_plays/echo.spl"
    with path.open() as f:
        Shakespeare().run_play(f.read())
    captured = capsys.readouterr()
    assert captured.out == 'm123c'
    assert captured.err == ''
Ejemplo n.º 9
0
def test_adjectives(capsys):
    s = Shakespeare()
    assert s.evaluate_expression('the big cat', None) == 2
    assert s.evaluate_expression('the big blossoming cat', None) == 4
    assert s.evaluate_expression('the big fine fair cat', None) == 8
    assert s.evaluate_expression('big Microsoft', None) == -2
    assert s.evaluate_expression('big evil Microsoft', None) == -4
    assert s.evaluate_expression('big evil blue Microsoft', None) == -8

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
Ejemplo n.º 10
0
def test_basic_constants(capsys):
    s = Shakespeare()
    assert s.evaluate_expression('nothing', None) == 0
    assert s.evaluate_expression('a cat', None) == 1
    assert s.evaluate_expression('cat', None) == 1
    assert s.evaluate_expression('the Microsoft', None) == -1
    assert s.evaluate_expression('Microsoft', None) == -1

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
Ejemplo n.º 11
0
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 == ''
Ejemplo n.º 12
0
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 == ''
Ejemplo n.º 13
0
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()
Ejemplo n.º 14
0
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
Ejemplo n.º 15
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
Ejemplo n.º 16
0
def test_errors_on_goto_nonexistent(monkeypatch, capsys):
    s = Shakespeare()
    s.load_play(SAMPLE_PLAY)

    assert s.current_position == {'act': 0, 'scene': 0, 'event': 0}
    s.step_forward()
    assert s.current_position == {'act': 0, 'scene': 0, 'event': 1}
    s.step_forward()
    assert s.current_position == {'act': 0, 'scene': 1, 'event': 0}
    with pytest.raises(Exception) as exc:
        s.run_sentence('Let us proceed to scene IV.', s._on_stage_character_by_name('Juliet'))
    assert 'does not exist' in str(exc.value).lower()
    assert s.current_position == {'act': 0, 'scene': 1, 'event': 0}

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
Ejemplo n.º 17
0
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 == ''
Ejemplo n.º 19
0
def test_factorial_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 = 8
    assert s.evaluate_expression('the factorial of yourself', 'Juliet') == 40320
    assert s.evaluate_expression('the factorial of my big big big chihuahua', 'Juliet') == 40320
    s._character_by_name('Romeo').value = 4
    assert s.evaluate_expression('the factorial of yourself', 'Juliet') == 24
    assert s.evaluate_expression('the factorial of my big big chihuahua', 'Juliet') == 24
    s._character_by_name('Romeo').value = 1
    assert s.evaluate_expression('the factorial of thyself', 'Juliet') == 1
    assert s.evaluate_expression('the factorial of my chihuahua', 'Juliet') == 1
    s._character_by_name('Romeo').value = 0
    assert s.evaluate_expression('the factorial of thyself', 'Juliet') == 1
    assert s.evaluate_expression('the factorial of nothing', 'Juliet') == 1
    s._character_by_name('Romeo').value = -1
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the factorial of thyself', 'Juliet')
    assert 'negative' in str(exc.value).lower()
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the factorial 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 factorial of thyself', 'Juliet')
    assert 'negative' in str(exc.value).lower()
    with pytest.raises(Exception) as exc:
        s.evaluate_expression('the factorial of thy foul stupid devil', 'Juliet')
    assert 'negative' in str(exc.value).lower()
Ejemplo n.º 20
0
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_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 == ''
Ejemplo n.º 22
0
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_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 == ''
Ejemplo n.º 24
0
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 == ''
Ejemplo n.º 25
0
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
Ejemplo n.º 26
0
def test_errors_on_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]')
    with pytest.raises(Exception) as exc:
        s.run_sentence('Listen to your heart!', s._on_stage_character_by_name('Juliet'))
    assert 'end of file' in str(exc.value).lower()
    assert s._character_by_name('Romeo').value == 0
    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
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 == ''
Ejemplo n.º 28
0
def test_goto_based_on_numeral_not_order(monkeypatch, capsys):
    s = Shakespeare()
    s.load_play("""
        Test.

        Romeo, a test.
        Juliet, a test.

        Act I: Nothing to see here.
        Scene III: These are not the actors you're looking for.

        [Enter Romeo and Juliet]

        Juliet: Are you as good as nothing?

        Scene I: Still nothing.
        Scene II: Nothing strikes back.
    """)

    assert s.current_position == {'act': 0, 'scene': 0, 'event': 0}
    s.step_forward()
    assert s.current_position == {'act': 0, 'scene': 0, 'event': 1}
    s.run_sentence('Let us return to scene I.', s._on_stage_character_by_name('Juliet'))
    assert s.current_position == {'act': 0, 'scene': 1, 'event': 0}
    s.run_sentence('Let us return to scene III.', s._on_stage_character_by_name('Juliet'))
    assert s.current_position == {'act': 0, 'scene': 0, 'event': 0}
    s.run_sentence('Let us return to scene II.', s._on_stage_character_by_name('Juliet'))
    assert s.current_position == {'act': 0, 'scene': 2, 'event': 0}

    captured = capsys.readouterr()
    assert captured.out == ''
    assert captured.err == ''
Ejemplo n.º 29
0
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_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 == ''