コード例 #1
0
def TestExpressionParserVariables():
    ep = ExpressionParser(MockVariables(['var1', 'var2']))
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('var1 / var2'), script)
    script.CompareScript('texprv', [
        IC.pushglobalvariable, 'var1', IC.pushglobalvariable, 'var2', IC.devide
    ])
コード例 #2
0
def TestIfStatement():
    tp = MockTokenParser('{ if ( 1 ) var1 = 11 ; var2 = 12 ; }')
    ce = CompileEngine(tp, MockVariables([
        'var1',
        'var2',
    ]), None)
    script = MockScript('name')
    try:
        ce.CompileSingleExecutionBlock(script)
    except CompileError as e:
        print('TestIfStatement got a compile error:', e.value)
    script.CompareScript(
        'cmpifst',
        [
            IC.pushintvalue,
            1,
            IC.jne,
            17,  #\
            IC.pushintvalue,  # |
            11,  # |
            IC.popglobalvariable,  # |
            'var1',  # |
            IC.pushintvalue,  #/
            12,
            IC.popglobalvariable,
            'var2'
        ])
コード例 #3
0
def TestIfElseStatement():
    tp = MockTokenParser('if ( 1 ) var = 11 ; else var = 12 ;')
    ce = CompileEngine(tp, MockVariables(['var', 'mock']), None)
    script = MockScript('name')
    try:
        ce.CompileSingleExecutionBlock(script)
    except CompileError as e:
        print('TestIfElseStatement got a compile error:', e.value)
    script.CompareScript(
        'cmpifest',
        [
            IC.pushintvalue,
            1,
            IC.jne,
            24,  #\
            IC.pushintvalue,  # |
            11,  # |
            IC.popglobalvariable,  # |
            'var',  # |
            IC.jall,  # |
            16,  # |  #\
            IC.pushintvalue,  #/   # |
            12,  # |
            IC.popglobalvariable,  # |
            'var'
        ])  # |
コード例 #4
0
def TestMissingScriptTerminator():
    tp = MockTokenParser('scriptname ( ) {')
    ce = CompileEngine(tp, VariableEngine(), MockScriptEngine())
    try:
        ce.Process()
        AssertFalse('sef', True)
    except CompileError as e:
        AssertEqual('tmst', e.value, "10: Unexpected end of script")
コード例 #5
0
def TestUnreferencedGlobalVariable():
    ep = ExpressionParser(MockVariables(['var1', 'var2']))
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('var1 / var2 + var3'), script)
    script.CompareScript('texprv', [
        IC.pushglobalvariable, 'var1', IC.pushglobalvariable, 'var2',
        IC.devide, IC.pushglobalvariable, 'var3', IC.add
    ])
コード例 #6
0
def TestLocalVariablesCanBeDeclared():
    tp = MockTokenParser('local newlocal ; newlocal = 4 ;')
    ce = CompileEngine(tp, MockVariables(['global'], ['local']), None)
    script = MockScript('name')
    ce.CompileSingleExecutionBlock(script)
    ce.CompileSingleExecutionBlock(script)
    script.CompareScript('testscrlocvar',
                         [IC.pushintvalue, 4, IC.poplocalvariable, 'newlocal'])
コード例 #7
0
def TestExpressionParserNumeric():
    ep = ExpressionParser(MockVariables())
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('2 + 3 * 4 - 5'), script)
    script.CompareScript('texprn', [
        IC.pushintvalue, 2, IC.pushintvalue, 3, IC.pushintvalue, 4,
        IC.multiply, IC.add, IC.pushintvalue, 5, IC.subtract
    ])
コード例 #8
0
def TestInvalidScript():
    tp = MockTokenParser('1completerubbish')
    ce = CompileEngine(tp, MockVariables(), MockScriptEngine())
    try:
        ce.Process()
        AssertTrue('tis', False)
    except CompileError as e:
        AssertEqual(e.value, "01: Unrecognised token '1completerubbish'")
コード例 #9
0
def TestGlobalVariablesCanBeAssigned():
    tp = MockTokenParser('globalvar = globalvar ;')
    ce = CompileEngine(tp, MockVariables(['globalvar'], ['localvar']), None)
    script = MockScript('name')
    ce.CompileSingleExecutionBlock(script)
    script.CompareScript('testglva', [
        IC.pushglobalvariable, 'globalvar', IC.popglobalvariable, 'globalvar'
    ])
コード例 #10
0
def TestScriptParameters():
    tp = MockTokenParser('scriptname ( param ) { var = param ; }')
    scriptengine = MockScriptEngine()
    ve = VariableEngine()
    ve.AddGlobalVariable('var')
    ce = CompileEngine(tp, ve, scriptengine)
    ce.Process()
    scriptengine.GetScriptCode('scriptname').CompareScript(
        'scrpar', [IC.pushparam, 0, IC.popglobalvariable, 'var', IC.endscript])
コード例 #11
0
def TestExpressionParserComplex():
    variables = MockVariables(['var1'])
    ep = ExpressionParser(variables)
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('- 2 * ( var1 == 4 )'), script)
    script.CompareScript('texprcx', [
        IC.pushintvalue, 2, IC.negate, IC.pushglobalvariable, 'var1',
        IC.pushintvalue, 4, IC.equals, IC.multiply
    ])
コード例 #12
0
def TestEngineFunctionInvalid():
    tp = MockTokenParser('engineFunction ;')
    try:
        script = MockScript('name')
        ce = CompileEngine(tp, MockVariables([], [], [['engineFunction', 0]]),
                           None)
        ce.CompileSingleExecutionBlock(script)
        AssertTrue(False)
    except CompileError as e:
        pass
コード例 #13
0
def TestHashCalculatorUsesSignedCRC32():
    ep = ExpressionParser(MockVariables())
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('[ hello-world ]'), script)
    script.CompareScript(
        'hashs',
        [
            IC.pushintvalue,
            #-1311505829 #2983461467
            2983461467
        ])
コード例 #14
0
def TestExpressionParserString():
    ep = ExpressionParser(MockVariables())
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('"Hello" + "World"'), script)
    script.CompareScript('stringexp', [
        IC.pushstring,
        'Hello',
        IC.pushstring,
        'World',
        IC.add,
    ])
コード例 #15
0
def TestRequireNextToken():
    tp = MockTokenParser('first second')
    ce = CompileEngine(tp, MockVariables(), MockScriptEngine())
    ce.RequireNextToken('first', 'previous')

    try:
        ce.RequireNextToken('third', 'previous')
        AssertTrue('trtnp', False)
    except CompileError as e:
        AssertEqual('trnt1', e.value,
                    "Expected 'third' instead of 'second' after 'previous'")
コード例 #16
0
def TestFnRoutineDropSkipJump():
    tp = MockTokenParser('engineFunction ( ) ;')
    ce = CompileEngine(tp, MockVariables([], [], [['engineFunction', 0]]),
                       None)
    script = MockScript('name')
    try:
        ce.CompileSingleExecutionBlock(script)
    except CompileError as e:
        print('TestFnRoutineDropSkipJump got a compile error:', e.value)
    script.CompareScript(
        'fndsk',
        [IC.callfnroutine, 0, 'engineFunction', IC.dropskippausenonzero, -27])
コード例 #17
0
def TestHashCalculator():
    ep = ExpressionParser(MockVariables())
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('[ hashtext ]'), script)
    script.CompareScript('hash', [IC.pushintvalue, 1976965134])
コード例 #18
0
def TestFnRoutineNoParameters():
    variables = MockVariables(['var1'], [], [['engineFunction', 0]])
    ep = ExpressionParser(variables)
    script = MockScript('name')
    ep.ParseExpression(MockTokenParser('engineFunction ( )'), script)
    script.CompareScript('fnnop', [IC.callfnroutine, 0, 'engineFunction'])
コード例 #19
0
def TestEmptyTokenParser():
    tp = MockTokenParser('')
    ce = CompileEngine(tp, None, None)
    ce.Process()
    AssertTrue('tetp', tp.tokenfetched)
コード例 #20
0
def TestEmptyScriptFunction():
    tp = MockTokenParser('scriptname ( ) { }')
    se = MockScriptEngine()
    ce = CompileEngine(tp, VariableEngine(), se)
    ce.Process()
    AssertNEqual('tms0', se.GetScriptCode('scriptname'), None)
コード例 #21
0
def TestPauseStatement():
    tp = MockTokenParser('pause ;')
    script = MockScript('name')
    ce = CompileEngine(tp, VariableEngine(), None)
    ce.CompileSingleExecutionBlock(script)
    script.CompareScript('pause', [IC.pause])