def test_transform_class_with_init_method(): class_node = cc.class_( name="User", methods=[ cc.func( "__init__", [cc.arg("self"), cc.arg("x")], [], ) ], body=[], ) _assert_transform( class_node, """ function $__init__0(self, x) { } User = function($arg1) { var $self2 = { "$nopeType": User }; $__init__0($self2, $arg1); return $self2; }; """, )
def init_method_is_called_if_present(self): node = cc.class_("A", methods=[ cc.func("__init__", [cc.arg("self"), cc.arg("value")], [ cc.expression_statement(cc.call(cc.ref("print"), [cc.ref("value")])) ]) ], body=[]) expected_aux = """internal class __A { internal dynamic __init__; } """ expected = """A = new { __call__ = ((System.Func<dynamic, dynamic>)((dynamic __value) => { dynamic __self = null; __self = new __A { __init__ = ((System.Func<dynamic, dynamic>)((dynamic value) => { dynamic self = __self; print(value); })), }; __self.__init__(__value); return __self; })), }; """ transformer = _create_transformer() assert_equal(expected, cs.dumps(transformer.transform(node))) assert_equal(expected_aux, cs.dumps(transformer.aux()))
def test_transform_class_with_methods(): _assert_transform( cc.class_( name="User", methods=[ cc.func( "f", [cc.arg("self"), cc.arg("x")], [cc.ret(cc.none)], ) ], body=[] ), """ function $f0(self, x) { return null; } User = function() { var $self1 = { "$nopeType": User }; $self1.f = $nope.instanceAttribute($self1, $f0); return $self1; }; """ )
def methods_are_set_as_members_on_object(self): node = cc.class_("A", methods=[ cc.func("f", [cc.arg("self")], [ cc.ret(cc.ref("self")) ]) ], body=[]) expected_aux = """internal class __A { internal dynamic f; } """ expected = """A = new { __call__ = ((System.Func<dynamic>)(() => { dynamic __self = null; __self = new __A { f = ((System.Func<dynamic>)(() => { dynamic self = __self; return self; })), }; return __self; })), }; """ transformer = _create_transformer() assert_equal(expected, cs.dumps(transformer.transform(node))) assert_equal(expected_aux, cs.dumps(transformer.aux()))
def test_function_definitions_in_body_are_stored_as_methods(self): _assert_transform( nodes.class_("Blah", [nodes.func("f", nodes.args([]), [], type=None)]), cc.class_( "Blah", methods=[cc.func("f", [], [cc.ret(cc.none)])], body=[cc.declare("f")], ), )
def test_assignments_in_body_are_transformed(self): _assert_transform( nodes.class_("Blah", [nodes.assign([nodes.ref("value")], nodes.none())]), cc.class_( "Blah", methods=[], body=[ cc.declare("value"), cc.assign(cc.ref("value"), cc.none), ], ), )
def test_transform_empty_class(): _assert_transform( cc.class_( name="User", methods=[], body=[], ), """ User = function() { var $self0 = { "$nopeType": User }; return $self0; }; """ )
def class_definition_creates_object_with_call_method_for_init(self): node = cc.class_("A", methods=[], body=[]) expected_aux = """internal class __A { } """ expected = """A = new { __call__ = ((System.Func<dynamic>)(() => { dynamic __self = null; __self = new __A(); return __self; })), }; """ transformer = _create_transformer() assert_equal(expected, cs.dumps(transformer.transform(node))) assert_equal(expected_aux, cs.dumps(transformer.aux()))
def test_transform_class_with_attributes(): _assert_transform( cc.class_( name="User", methods=[], body=[ cc.declare("x"), cc.assign(cc.ref("x"), cc.none) ], ), """ User = function() { var $self0 = { "$nopeType": User }; var x; x = null; $self0.x = $nope.instanceAttribute($self0, x); return $self0; }; """ )
def auxiliary_definitions_are_included_in_module(self): node = cc.module([cc.class_("A", methods=[], body=[])], is_executable=True) module = LocalModule("blah.py", node) assert_in("class __A", cs.dumps(transform(module)))