GitLab will be partched to the latest stable version on 15 July 2020 at 2.00pm (AEDT) to 2.30pm (AEDT) due to Security Patch Availability. During the update, GitLab and Mattermost services will not be available. If you have any concerns with this, please talk to us at N110 (b) CSIT building.

basic_interpreter_test.py 2.04 KB
Newer Older
1 2 3
import unittest
from parameterized import parameterized

4 5 6 7 8
from som.vm.universe       import Universe

from som.vmobjects.integer import Integer
from som.vmobjects.clazz   import Class

9 10 11 12 13
class BasicInterpreterTest(unittest.TestCase):
    @parameterized.expand([
        ("MethodCall",     "test",  42, Integer ),
        ("MethodCall",     "test2", 42, Integer ),

14
        ("NonLocalReturn", "test",  "NonLocalReturn", Class ),
15 16 17 18 19 20 21 22 23 24 25
        ("NonLocalReturn", "test1", 42, Integer ),
        ("NonLocalReturn", "test2", 43, Integer ),
        ("NonLocalReturn", "test3",  3, Integer ),
        ("NonLocalReturn", "test4", 42, Integer ),
        ("NonLocalReturn", "test5", 22, Integer ),

        ("Blocks", "arg1",  42, Integer ),
        ("Blocks", "arg2",  77, Integer ),
        ("Blocks", "argAndLocal",    8, Integer ),
        ("Blocks", "argAndContext",  8, Integer ),

26 27 28 29
        ("Return", "returnSelf",           "Return", Class ),
        ("Return", "returnSelfImplicitly", "Return", Class ),
        ("Return", "noReturnReturnsSelf",  "Return", Class ),
        ("Return", "blockReturnsImplicitlyLastValue", 4, Integer )])
30 31
    def test_basic_interpreter_behavior(self, test_class, test_selector, expected_result, result_type):
        u = Universe()
32
        u.setup_classpath("Smalltalk:TestSuite/BasicInterpreterTests")
33
        
34
        actual_result = u.execute_method(test_class, test_selector)
35 36 37 38 39
        
        self._assertEqualsSOMValue(expected_result, actual_result, result_type)
    
    def _assertEqualsSOMValue(self, expected_result, actual_result, result_type):
        if result_type is Integer:
40
            self.assertEquals(expected_result, actual_result.get_embedded_integer())
41 42
            return
        
43
        if result_type is Class:
44
            self.assertEquals(expected_result, actual_result.get_name().get_string())
45 46 47
            return

        self.fail("SOM Value handler missing")
48 49 50 51 52

import sys
if sys.modules.has_key('pytest'):
    # hack to make pytest not to collect the unexpanded test method
    delattr(BasicInterpreterTest, "test_basic_interpreter_behavior")