def test_generic_function_type_not_supported_different_files(self): with self.assertRaises(TranspilerError) as cm: transpile([ Source('@generic(T)\n' 'def add(a: T):\n' ' a.bar()\n', module='foo.lib', mys_path='foo/src/lib.mys'), Source( 'from foo import add\n' '# Blank line for different line numbers in foo and bar.\n' 'def foo():\n' ' add[u8](1)\n', module='bar.lib', mys_path='bar/src/lib.mys') ]) self.assert_exception_string( cm, ' File "bar/src/lib.mys", line 4\n' ' add[u8](1)\n' ' ^\n' ' File "foo/src/lib.mys", line 3\n' ' a.bar()\n' ' ^\n' "CompileError: primitive type 'u8' do not have methods\n")
def test_generic_class_type_not_supported_different_files(self): with self.assertRaises(TranspilerError) as cm: transpile([ Source( '@generic(T)\n' 'class Add:\n' ' def calc(self, a: T) -> u8:\n' ' return a.calc()\n', module='foo.lib', mys_path='foo/src/lib.mys'), Source( 'from foo import Add\n' 'def foo():\n' ' a = Add[bool]()\n' ' print(a.calc(True))\n', module='bar.lib', mys_path='bar/src/lib.mys') ]) self.assert_exception_string( cm, ' File "bar/src/lib.mys", line 3\n' ' a = Add[bool]()\n' ' ^\n' ' File "foo/src/lib.mys", line 4\n' ' return a.calc()\n' ' ^\n' "CompileError: primitive type 'bool' do not have methods\n")
def test_imported_variable_usage(self): transpile([ Source('from foo import BAR\n' '\n' 'def fie() -> i32:\n' ' return 2 * BAR\n'), Source('BAR: i32 = 1', module='foo.lib') ])
def test_import_function_ok(self): transpile([ Source('from foo import bar\n' 'def fie():\n' ' bar()\n'), Source('def bar():\n' ' pass\n', module='foo.lib') ])
def test_import_private_function_fails(self): with self.assertRaises(TranspilerError) as cm: transpile([ Source('from foo import _BAR\n' '\n' 'def fie() -> i32:\n' ' return 2 * _BAR\n'), Source('_BAR: i32 = 1', module='foo.lib') ]) self.assert_exception_string( cm, ' File "", line 1\n' ' from foo import _BAR\n' ' ^\n' "CompileError: cannot import private definition '_BAR'\n")
def test_imported_module_does_not_contain(self): with self.assertRaises(TranspilerError) as cm: transpile([ Source('from foo import bar\n' '\n' 'def fie() -> i32:\n' ' return 2 * bar\n'), Source('BOO: i32 = 1', module='foo.lib') ]) self.assert_exception_string( cm, ' File "", line 1\n' ' from foo import bar\n' ' ^\n' "CompileError: imported module 'foo.lib' does not contain 'bar'\n")
def transpile_source(source, filename='', module_hpp='', has_main=False): return transpile([ Source(source, filename=filename, module_hpp=module_hpp, has_main=has_main) ])[0][2]
def test_imported_pure_trait_method_not_implemented(self): with self.assertRaises(TranspilerError) as cm: transpile([ Source( '@trait\n' 'class Base:\n' ' def foo(self):\n' ' pass\n', module='foo.lib'), Source('from foo import Base\n' 'class Foo(Base):\n' ' pass\n') ]) self.assert_exception_string( cm, ' File "", line 2\n' ' class Foo(Base):\n' ' ^\n' "CompileError: pure trait method 'foo' is not implemented\n")
def transpile_source(source, mys_path='', module='foo.lib', module_hpp='foo/lib.mys.hpp', has_main=False): return transpile([ Source(source, mys_path=mys_path, module=module, module_hpp=module_hpp, has_main=has_main) ])[0][2]
def transpile_header(source, mys_path='', module_hpp=''): return transpile( [Source(source, mys_path=mys_path, module_hpp=module_hpp)])[0][1]