summaryrefslogtreecommitdiffstats
path: root/contrib/python/traitlets/py3/tests/utils
diff options
context:
space:
mode:
authorrobot-contrib <[email protected]>2023-10-19 17:11:31 +0300
committerrobot-contrib <[email protected]>2023-10-19 18:26:04 +0300
commitb9fe236a503791a3a7b37d4ef5f466225218996c (patch)
treec2f80019399b393ddf0450d0f91fc36478af8bea /contrib/python/traitlets/py3/tests/utils
parent44dd27d0a2ae37c80d97a95581951d1d272bd7df (diff)
Update contrib/python/traitlets/py3 to 5.11.2
Diffstat (limited to 'contrib/python/traitlets/py3/tests/utils')
-rw-r--r--contrib/python/traitlets/py3/tests/utils/__init__.py0
-rw-r--r--contrib/python/traitlets/py3/tests/utils/test_bunch.py16
-rw-r--r--contrib/python/traitlets/py3/tests/utils/test_decorators.py137
-rw-r--r--contrib/python/traitlets/py3/tests/utils/test_importstring.py26
4 files changed, 179 insertions, 0 deletions
diff --git a/contrib/python/traitlets/py3/tests/utils/__init__.py b/contrib/python/traitlets/py3/tests/utils/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/contrib/python/traitlets/py3/tests/utils/__init__.py
diff --git a/contrib/python/traitlets/py3/tests/utils/test_bunch.py b/contrib/python/traitlets/py3/tests/utils/test_bunch.py
new file mode 100644
index 00000000000..223124d7d5e
--- /dev/null
+++ b/contrib/python/traitlets/py3/tests/utils/test_bunch.py
@@ -0,0 +1,16 @@
+from traitlets.utils.bunch import Bunch
+
+
+def test_bunch():
+ b = Bunch(x=5, y=10)
+ assert "y" in b
+ assert "x" in b
+ assert b.x == 5
+ b["a"] = "hi"
+ assert b.a == "hi"
+
+
+def test_bunch_dir():
+ b = Bunch(x=5, y=10)
+ assert "x" in dir(b)
+ assert "keys" in dir(b)
diff --git a/contrib/python/traitlets/py3/tests/utils/test_decorators.py b/contrib/python/traitlets/py3/tests/utils/test_decorators.py
new file mode 100644
index 00000000000..d6bf8414e5a
--- /dev/null
+++ b/contrib/python/traitlets/py3/tests/utils/test_decorators.py
@@ -0,0 +1,137 @@
+from inspect import Parameter, signature
+from unittest import TestCase
+
+from traitlets import HasTraits, Int, Unicode
+from traitlets.utils.decorators import signature_has_traits
+
+
+class TestExpandSignature(TestCase):
+ def test_no_init(self):
+ @signature_has_traits
+ class Foo(HasTraits):
+ number1 = Int()
+ number2 = Int()
+ value = Unicode("Hello")
+
+ parameters = signature(Foo).parameters
+ parameter_names = list(parameters)
+
+ self.assertIs(parameters["args"].kind, Parameter.VAR_POSITIONAL)
+ self.assertEqual("args", parameter_names[0])
+
+ self.assertIs(parameters["number1"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["number2"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["value"].kind, Parameter.KEYWORD_ONLY)
+
+ self.assertIs(parameters["kwargs"].kind, Parameter.VAR_KEYWORD)
+ self.assertEqual("kwargs", parameter_names[-1])
+
+ f = Foo(number1=32, value="World")
+ self.assertEqual(f.number1, 32)
+ self.assertEqual(f.number2, 0)
+ self.assertEqual(f.value, "World")
+
+ def test_partial_init(self):
+ @signature_has_traits
+ class Foo(HasTraits):
+ number1 = Int()
+ number2 = Int()
+ value = Unicode("Hello")
+
+ def __init__(self, arg1, **kwargs):
+ self.arg1 = arg1
+
+ super().__init__(**kwargs)
+
+ parameters = signature(Foo).parameters
+ parameter_names = list(parameters)
+
+ self.assertIs(parameters["arg1"].kind, Parameter.POSITIONAL_OR_KEYWORD)
+ self.assertEqual("arg1", parameter_names[0])
+
+ self.assertIs(parameters["number1"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["number2"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["value"].kind, Parameter.KEYWORD_ONLY)
+
+ self.assertIs(parameters["kwargs"].kind, Parameter.VAR_KEYWORD)
+ self.assertEqual("kwargs", parameter_names[-1])
+
+ f = Foo(1, number1=32, value="World")
+ self.assertEqual(f.arg1, 1)
+ self.assertEqual(f.number1, 32)
+ self.assertEqual(f.number2, 0)
+ self.assertEqual(f.value, "World")
+
+ def test_duplicate_init(self):
+ @signature_has_traits
+ class Foo(HasTraits):
+ number1 = Int()
+ number2 = Int()
+
+ def __init__(self, number1, **kwargs):
+ self.test = number1
+
+ super().__init__(number1=number1, **kwargs)
+
+ parameters = signature(Foo).parameters
+ parameter_names = list(parameters)
+
+ self.assertListEqual(parameter_names, ["number1", "number2", "kwargs"])
+
+ f = Foo(number1=32, number2=36)
+ self.assertEqual(f.test, 32)
+ self.assertEqual(f.number1, 32)
+ self.assertEqual(f.number2, 36)
+
+ def test_full_init(self):
+ @signature_has_traits
+ class Foo(HasTraits):
+ number1 = Int()
+ number2 = Int()
+ value = Unicode("Hello")
+
+ def __init__(self, arg1, arg2=None, *pos_args, **kw_args):
+ self.arg1 = arg1
+ self.arg2 = arg2
+ self.pos_args = pos_args
+ self.kw_args = kw_args
+
+ super().__init__(*pos_args, **kw_args)
+
+ parameters = signature(Foo).parameters
+ parameter_names = list(parameters)
+
+ self.assertIs(parameters["arg1"].kind, Parameter.POSITIONAL_OR_KEYWORD)
+ self.assertEqual("arg1", parameter_names[0])
+
+ self.assertIs(parameters["arg2"].kind, Parameter.POSITIONAL_OR_KEYWORD)
+ self.assertEqual("arg2", parameter_names[1])
+
+ self.assertIs(parameters["pos_args"].kind, Parameter.VAR_POSITIONAL)
+ self.assertEqual("pos_args", parameter_names[2])
+
+ self.assertIs(parameters["number1"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["number2"].kind, Parameter.KEYWORD_ONLY)
+ self.assertIs(parameters["value"].kind, Parameter.KEYWORD_ONLY)
+
+ self.assertIs(parameters["kw_args"].kind, Parameter.VAR_KEYWORD)
+ self.assertEqual("kw_args", parameter_names[-1])
+
+ f = Foo(1, 3, 45, "hey", number1=32, value="World")
+ self.assertEqual(f.arg1, 1)
+ self.assertEqual(f.arg2, 3)
+ self.assertTupleEqual(f.pos_args, (45, "hey"))
+ self.assertEqual(f.number1, 32)
+ self.assertEqual(f.number2, 0)
+ self.assertEqual(f.value, "World")
+
+ def test_no_kwargs(self):
+ with self.assertRaises(RuntimeError):
+
+ @signature_has_traits
+ class Foo(HasTraits):
+ number1 = Int()
+ number2 = Int()
+
+ def __init__(self, arg1, arg2=None):
+ pass
diff --git a/contrib/python/traitlets/py3/tests/utils/test_importstring.py b/contrib/python/traitlets/py3/tests/utils/test_importstring.py
new file mode 100644
index 00000000000..8ce28add41e
--- /dev/null
+++ b/contrib/python/traitlets/py3/tests/utils/test_importstring.py
@@ -0,0 +1,26 @@
+# Copyright (c) IPython Development Team.
+# Distributed under the terms of the Modified BSD License.
+#
+# Adapted from enthought.traits, Copyright (c) Enthought, Inc.,
+# also under the terms of the Modified BSD License.
+"""Tests for traitlets.utils.importstring."""
+
+import os
+from unittest import TestCase
+
+from traitlets.utils.importstring import import_item
+
+
+class TestImportItem(TestCase):
+ def test_import_unicode(self):
+ self.assertIs(os, import_item("os"))
+ self.assertIs(os.path, import_item("os.path"))
+ self.assertIs(os.path.join, import_item("os.path.join"))
+
+ def test_bad_input(self):
+ class NotAString:
+ pass
+
+ msg = "import_item accepts strings, not '%s'." % NotAString
+ with self.assertRaisesRegex(TypeError, msg):
+ import_item(NotAString()) # type:ignore[arg-type]