Ejemplo n.º 1
0
def test_case_diff():
    tc1 = parse(src1)[0]
    tc2 = parse(src1b)[0]

    diff = _testcase_diff(tc1, tc2)
    assert not diff.is_different
    assert str(diff) == indent(src1.strip(), 4)
Ejemplo n.º 2
0
def test_invalid_command():
    with pytest.raises(IoSpecSyntaxError):
        parse('@invalid-command foo')

    for cmd in ['command', 'build-error', 'timeout-error']:
        with pytest.raises(IoSpecSyntaxError):
            parse('@%s (garbage)\n    a block of data' % cmd)
Ejemplo n.º 3
0
def test_case_diff_2():
    tc1 = parse(src1)[0]
    tc2 = parse(src2)[0]

    diff = _testcase_diff(tc1, tc2)
    assert diff.is_different
    print(diff)
    assert str(diff) == """    <foo>
Ejemplo n.º 4
0
 def test_normalize_iospec(self):
     src = '<bar>\n<baz>\nfoobar\n\nfoo <bar>\nfoobar'
     ast = iospec.parse(src)
     ast2 = iospec.parse(src)
     ast.normalize()
     case1, case2 = ast
     assert list(case1) == [Out(''), In('bar'), Out(''), In('baz'),
                            Out('foobar')]
     assert case2 == ast2[1]
Ejemplo n.º 5
0
def test_system_streams_feedback_comparison():
    key = parse(RENDER_BACK_SOURCES['simple example'])
    equiv = ('<bar>\n'
             'foo: foobar')
    equiv = parse(equiv)
    key2 = key.copy()
    key2.normalize(stream=True)
    assert key2[:] == equiv[:]
    del equiv[0][0]
    equiv.pprint()
    fb1 = get_feedback(equiv, key, stream=False)
    fb2 = get_feedback(equiv, key, stream=True)
    assert fb1.status != fb2.status
    assert not fb1.is_correct
    assert fb2.is_correct
Ejemplo n.º 6
0
def test_command_with_arguments_from_iospec_source():
    out, in_ = parse('foo: $int(0, 10)')[0]
    assert out == 'foo: '
    assert isinstance(in_, Command)
    assert isinstance(in_.generate(), int)
    assert in_.generate() >= 0
    assert in_.generate() <= 10
Ejemplo n.º 7
0
def spec2():
    return parse('''Foo<bar>
barfoo

Ham<spam>
eggs
''')
Ejemplo n.º 8
0
def spec1():
    return parse('''foo <bar>
barfoo

ham <spam>
eggs
''')
Ejemplo n.º 9
0
def test_computed_input():
    tree = parse('foo$name(10)')
    session = tree[0]
    assert len(session) == 2
    assert session[0].type == 'output'
    assert session[1].type == 'command'
    assert session[1].name == 'name'
    assert session[1].args == '10'
Ejemplo n.º 10
0
def load_iospec_data(data):
    """
    Load IoSpec content from a section
    """

    data = unindent(data)
    ast = iospec.parse(data + '\n')
    return ast
Ejemplo n.º 11
0
def load_iospec_data(data):
    """
    Load IoSpec content from a section
    """

    data = unindent(data)
    ast = iospec.parse(data + '\n')
    return ast
Ejemplo n.º 12
0
def test_import_command():
    tree = parse(
        '@import math\n'
        '@from random import choice\n'
        '@command\n'
        'def foo(arg):'
        '    return math.sqrt(choice([1]))')
    assert tree.commands.foo.generate() == 1
Ejemplo n.º 13
0
def iospec_view():
    from iospec import parse

    iospec = parse(
        'name: <John>\n'
        'Hello John!\n'
    )
    return iospec_to_html(iospec)
Ejemplo n.º 14
0
def test_simple_ellipsis():
    tree = parse('foo<bar>\nfoo...bar')
    case = tree[0]
    assert case[0] == Out('foo')
    assert case[1] == In('bar')
    assert case[2] == OutEllipsis('foo...bar')
    assert isinstance(case[2], OutEllipsis)
    assert case[2] == 'fooblazbar'
Ejemplo n.º 15
0
def test_multiline_with_pipes():
    tree = parse(
        '|foo\n'
        '|\n'
        '|bar'
    )
    assert len(tree) == 1
    assert len(tree[0]) == 1
    assert tree[0][0] == Out('foo\n\nbar')
Ejemplo n.º 16
0
def spec_with_error():
    return parse('''foo <bar>
barfoo

@runtime-error
    foo <42>
@error
    invalid name: 42
''')
Ejemplo n.º 17
0
def command_grade(args):
    """
    Implements "ejudge grade <source> <inputs>" command.
    """

    source, lang = get_source_and_lang(args.file)
    input_data = iospec.parse(args.inputs)
    feedback = ejudge.grade(source, input_data, lang=lang)
    print(feedback.render_text())
Ejemplo n.º 18
0
def test_simple_inputs():
    ast = iospec.parse(simple_inputs)
    ast.normalize()
    result = functions.run(simple_source, ast, lang='python', sandbox=False)
    result.normalize()
    ast.pprint()
    result.pprint()
    assert ast.to_json() == result.to_json()
    assert iospec.is_equal(ast, result)
Ejemplo n.º 19
0
def test_use_command():
    tree = parse('''
@command
def foo(arg):
     return 'computed value'

foo: $foo
''')
    assert len(tree) == 1
    assert 'foo' in tree.commands
    assert tree[0, 1].data == '$foo'
Ejemplo n.º 20
0
def test_expand_from_code_keep_simple_cases():
    src = "print(input('x:'))"
    iospec = ('x: <foo>\n'
              'foo\n'
              '\n'
              '@input $name\n'
              '\n'
              'x: <bar>\n'
              'bar')
    iospec = parse(iospec)
    expanded = expand_from_code(src, iospec, lang='python')
    expected = StandardTestCase([Out('x: '), In('foo'), Out('foo')])
    assert expanded[0] == expected
Ejemplo n.º 21
0
def test_system_streams_normalization():
    src = RENDER_BACK_SOURCES['simple example']
    ast = parse(src)
    ast.normalize(stream=True)
    assert len(ast) == 1

    testcase = ast[0]
    assert testcase[0].is_input
    assert testcase[1].is_output
    assert len(testcase) == 2

    x, y = testcase
    assert x == 'bar'
    assert y == 'foo: foobar'
Ejemplo n.º 22
0
def test_expand_from_code_keep_simple_cases():
    src = "print(input('x:'))"
    iospec = (
        'x: <foo>\n'
        'foo\n'
        '\n'
        '@input $name\n'
        '\n'
        'x: <bar>\n'
        'bar'
    )
    iospec = parse(iospec)
    expanded = expand_from_code(src, iospec, lang='python')
    expected = StandardTestCase([Out('x: '), In('foo'), Out('foo')])
    assert expanded[0] == expected
Ejemplo n.º 23
0
def test_normalization_is_idempotent(source):
    ast1 = parse(source)

    ast2 = ast1.copy()
    ast2.normalize()
    ast3 = ast2.copy()
    ast3.normalize()
    assert ast2 == ast3
    assert ast2.to_json() == ast3.to_json()

    # Now with stream=True normalization
    ast2 = ast1.copy()
    ast2.normalize(stream=True)
    ast3 = ast2.copy()
    ast3.normalize(stream=True)
    print('-------')
    ast2.pprint()
    ast3.pprint()
    assert ast2 == ast3
    assert ast2.to_json() == ast3.to_json()
Ejemplo n.º 24
0
def command_run(args):
    """
    Implements "ejudge run <source> <inputs>" command.
    """

    source, lang = get_source_and_lang(args.file)
    if args.iospec:
        with open(args.iospec) as F:
            input_data = iospec.parse(F)
    elif args.inputs:
        with open(args.inputs) as F:
            input_data = F.read()
        if input_data.endswith('\n'):
            input_data = input_data[:-1]
        input_data = input_data.splitlines()
    else:
        with open(args.file) as F:
            source = F.read()
        lang = ejudge.registry.language_from_filename(args.file)
        ejudge.exec(source, lang=lang)
        return

    result = ejudge.run(source, input_data, lang=lang)
    print(result.source())
Ejemplo n.º 25
0
def iospec_view():
    from iospec import parse

    iospec = parse('name: <John>\n' 'Hello John!\n')
    return iospec_to_html(iospec)
Ejemplo n.º 26
0
def test_open_file():
    src = 'foo<bar>'
    assert parse(io.StringIO(src)) == parse(src)
Ejemplo n.º 27
0
def test_escaped_lt_sign():
    testcase = parse(r'foo\<bar')[0]
    assert testcase[0] == Out('foo<bar')
Ejemplo n.º 28
0
def test_hanging_dollar_sign():
    testcase = parse(r'U$ 10.00')[0]
    assert len(testcase) == 1
    assert testcase[0] == Out('U$ 10.00')
Ejemplo n.º 29
0
def test_escaped_dollar_sign():
    testcase = parse(r'foo\$bar')[0]
    assert testcase[0] == Out('foo$bar')
Ejemplo n.º 30
0
def test_open_file():
    src = "foo<bar>"
    assert parse(io.StringIO(src)) == parse_string(src)
Ejemplo n.º 31
0
def example_pair(example_src):
    src, json_src = example_src
    ast = iospec.parse(src)
    json_data = json.loads(json_src)
    return ast, json_data
Ejemplo n.º 32
0
def test_open_file():
    src = 'foo<bar>'
    assert parse(io.StringIO(src)) == parse_string(src)
Ejemplo n.º 33
0
def test_simple_io():
    tree = parse('foo<bar>\nfoobar')
    case = tree[0]
    assert case[0] == Out('foo')
    assert case[1] == In('bar')
    assert case[2] == Out('foobar')
Ejemplo n.º 34
0
def test_broken_io():
    with pytest.raises(IoSpecSyntaxError):
        parse('foo<bar\nfoobar')