From 50e14ca61945dcb5487e1b54d99fc84c530a32f7 Mon Sep 17 00:00:00 2001 From: Rami Ali Date: Mon, 16 Jan 2017 15:45:55 +1100 Subject: tests/import: Improve builtinimport.c test coverage. --- tests/import/import_pkg7.py | 2 +- tests/import/import_pkg8.py | 2 ++ tests/import/pkg7/subpkg1/subpkg2/mod3.py | 7 +++++++ tests/import/pkg8/mod.py | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 tests/import/import_pkg8.py create mode 100644 tests/import/pkg8/mod.py (limited to 'tests/import') diff --git a/tests/import/import_pkg7.py b/tests/import/import_pkg7.py index be8564ef6..e1463ebbf 100644 --- a/tests/import/import_pkg7.py +++ b/tests/import/import_pkg7.py @@ -1,2 +1,2 @@ -# This tests ... relative imports as used in pkg7 +# This tests ... relative imports as used in pkg7 and imports beyond package root import pkg7.subpkg1.subpkg2.mod3 diff --git a/tests/import/import_pkg8.py b/tests/import/import_pkg8.py new file mode 100644 index 000000000..4c1e832f2 --- /dev/null +++ b/tests/import/import_pkg8.py @@ -0,0 +1,2 @@ +# import with no __init__.py files +import pkg8.mod diff --git a/tests/import/pkg7/subpkg1/subpkg2/mod3.py b/tests/import/pkg7/subpkg1/subpkg2/mod3.py index b85b34e60..747cde03b 100644 --- a/tests/import/pkg7/subpkg1/subpkg2/mod3.py +++ b/tests/import/pkg7/subpkg1/subpkg2/mod3.py @@ -2,3 +2,10 @@ from ... import mod1 from ...mod2 import bar print(mod1.foo) print(bar) + +# when attempting relative import beyond top-level package uPy raises ImportError +# whereas CPython raises a ValueError +try: + from .... import mod1 +except (ImportError, ValueError): + print('Error') diff --git a/tests/import/pkg8/mod.py b/tests/import/pkg8/mod.py new file mode 100644 index 000000000..b98f02ce6 --- /dev/null +++ b/tests/import/pkg8/mod.py @@ -0,0 +1 @@ +print('foo') -- cgit v1.2.3 From 63e291de706c4c8092fe5f19f3726e5da5e80913 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 16 Jan 2017 16:21:04 +1100 Subject: py/builtinimport: Raise ValueError for bad relative import, per CPython. --- py/builtinimport.c | 3 +-- tests/import/pkg7/subpkg1/subpkg2/mod3.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'tests/import') diff --git a/py/builtinimport.c b/py/builtinimport.c index 4024c5d59..0e3f160a7 100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -360,8 +360,7 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) { qstr new_mod_q = qstr_from_strn(new_mod, new_mod_l); DEBUG_printf("Resolved base name for relative import: '%s'\n", qstr_str(new_mod_q)); if (new_mod_q == MP_QSTR_) { - // CPython raises SystemError - mp_raise_msg(&mp_type_ImportError, "cannot perform relative import"); + mp_raise_msg(&mp_type_ValueError, "cannot perform relative import"); } module_name = MP_OBJ_NEW_QSTR(new_mod_q); mod_str = new_mod; diff --git a/tests/import/pkg7/subpkg1/subpkg2/mod3.py b/tests/import/pkg7/subpkg1/subpkg2/mod3.py index 747cde03b..7ed69bdee 100644 --- a/tests/import/pkg7/subpkg1/subpkg2/mod3.py +++ b/tests/import/pkg7/subpkg1/subpkg2/mod3.py @@ -7,5 +7,5 @@ print(bar) # whereas CPython raises a ValueError try: from .... import mod1 -except (ImportError, ValueError): - print('Error') +except ValueError: + print('ValueError') -- cgit v1.2.3