mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Update test_unpack_ex from v3.14.2
This commit is contained in:
1 parent
d22ff7bdf6
commit
58a37bc839
4 files changed
+32
-42
No files matched your search
-1
@@ -2247,7 +2247,6 @@ class TestGetcallargsFunctions(unittest.TestCase):
|
||||
self.assertEqualCallArgs(f, '**collections.UserDict(a=1, b=2)')
|
||||
self.assertEqualCallArgs(f, 'c=3, **collections.UserDict(a=1, b=2)')
|
||||
|
||||
@unittest.expectedFailure # TODO: RUSTPYTHON; ? ^^^^^^^^^^^^ ++ ++ ^^^^
|
||||
def test_keyword_only(self):
|
||||
f = self.makeCallable('a=3, *, c, d=2')
|
||||
self.assertEqualCallArgs(f, 'c=3')
|
||||
|
||||
Vendored
-2
@@ -163,8 +163,6 @@ class PositionalOnlyTestCase(unittest.TestCase):
|
||||
with self.assertRaisesRegex(TypeError, r"f\(\) takes from 2 to 3 positional arguments but 4 were given"):
|
||||
f(1, 2, 3, 4)
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_positional_only_and_kwonlyargs_invalid_calls(self):
|
||||
def f(a, b, /, c, *, d, e):
|
||||
pass
|
||||
|
||||
Vendored
+25
-32
@@ -113,7 +113,7 @@ Dict display element unpacking
|
||||
>>> sorted({**{'x': 1}, 'y': 2, **{'x': 3}}.items())
|
||||
[('x', 3), ('y', 2)]
|
||||
|
||||
>>> sorted({**{'x': 1}, **{'x': 3}, 'x': 4}.items()) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> sorted({**{'x': 1}, **{'x': 3}, 'x': 4}.items())
|
||||
[('x', 4)]
|
||||
|
||||
>>> {**{}}
|
||||
@@ -138,7 +138,7 @@ Dict display element unpacking
|
||||
... for i in range(1000)) + "}"))
|
||||
1000
|
||||
|
||||
>>> {0:1, **{0:2}, 0:3, 0:4} # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> {0:1, **{0:2}, 0:3, 0:4}
|
||||
{0: 4}
|
||||
|
||||
List comprehension element unpacking
|
||||
@@ -148,27 +148,27 @@ List comprehension element unpacking
|
||||
[0, 1, 2, 3, 4]
|
||||
|
||||
>>> l = [a, (3, 4), {5}, {6: None}, (i for i in range(7, 10))]
|
||||
>>> [*item for item in l] # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> [*item for item in l]
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: iterable unpacking cannot be used in comprehension
|
||||
|
||||
>>> [*[0, 1] for i in range(10)] # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> [*[0, 1] for i in range(10)]
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: iterable unpacking cannot be used in comprehension
|
||||
|
||||
>>> [*'a' for i in range(10)] # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> [*'a' for i in range(10)]
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: iterable unpacking cannot be used in comprehension
|
||||
|
||||
>>> [*[] for i in range(10)] # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> [*[] for i in range(10)]
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: iterable unpacking cannot be used in comprehension
|
||||
|
||||
>>> {**{} for a in [1]} # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> {**{} for a in [1]}
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: dict unpacking cannot be used in dict comprehension
|
||||
@@ -249,34 +249,34 @@ Make sure the raised errors are right for keyword argument unpackings
|
||||
|
||||
Overridden parameters
|
||||
|
||||
>>> f(x=5, **{'x': 3}, y=2) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> f(x=5, **{'x': 3}, y=2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
|
||||
|
||||
>>> f(**{'x': 3}, x=5, y=2) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> f(**{'x': 3}, x=5, y=2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
|
||||
|
||||
>>> f(**{'x': 3}, **{'x': 5}, y=2) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> f(**{'x': 3}, **{'x': 5}, y=2)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
|
||||
|
||||
>>> f(x=5, **{'x': 3}, **{'x': 2}) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> f(x=5, **{'x': 3}, **{'x': 2})
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: test.test_unpack_ex.f() got multiple values for keyword argument 'x'
|
||||
|
||||
>>> f(**{1: 3}, **{1: 5}) # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> f(**{1: 3}, **{1: 5})
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: test.test_unpack_ex.f() got multiple values for keyword argument '1'
|
||||
|
||||
Unpacking non-sequence
|
||||
|
||||
>>> a, *b = 7 # TODO: RUSTPYTHON # doctest:+EXPECTED_FAILURE
|
||||
>>> a, *b = 7
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
TypeError: cannot unpack non-iterable int object
|
||||
@@ -321,17 +321,17 @@ error)
|
||||
|
||||
Now some general starred expressions (all fail).
|
||||
|
||||
>>> a, *b, c, *d, e = range(10) # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> a, *b, c, *d, e = range(10) # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: multiple starred expressions in assignment
|
||||
|
||||
>>> [*b, *c] = range(10) # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> [*b, *c] = range(10) # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: multiple starred expressions in assignment
|
||||
|
||||
>>> a,*b,*c,*d = range(4) # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> a,*b,*c,*d = range(4) # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: multiple starred expressions in assignment
|
||||
@@ -341,42 +341,42 @@ Now some general starred expressions (all fail).
|
||||
...
|
||||
SyntaxError: starred assignment target must be in a list or tuple
|
||||
|
||||
>>> *a # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> *a # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: can't use starred expression here
|
||||
|
||||
>>> *1 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> *1 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: can't use starred expression here
|
||||
|
||||
>>> x = *a # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> x = *a # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: can't use starred expression here
|
||||
|
||||
>>> (*x),y = 1, 2 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> (*x),y = 1, 2 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: cannot use starred expression here
|
||||
|
||||
>>> (((*x))),y = 1, 2 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> (((*x))),y = 1, 2 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: cannot use starred expression here
|
||||
|
||||
>>> z,(*x),y = 1, 2, 4 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> z,(*x),y = 1, 2, 4 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: cannot use starred expression here
|
||||
|
||||
>>> z,(*x) = 1, 2 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> z,(*x) = 1, 2 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: cannot use starred expression here
|
||||
|
||||
>>> ((*x),y) = 1, 2 # TODO: RUSTPYTHON # doctest:+ELLIPSIS +EXPECTED_FAILURE
|
||||
>>> ((*x),y) = 1, 2 # doctest:+ELLIPSIS
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
SyntaxError: cannot use starred expression here
|
||||
@@ -402,15 +402,8 @@ Some size constraints (all fail.)
|
||||
|
||||
__test__ = {'doctests' : doctests}
|
||||
|
||||
EXPECTED_FAILURE = doctest.register_optionflag('EXPECTED_FAILURE') # TODO: RUSTPYTHON
|
||||
class CustomOutputChecker(doctest.OutputChecker): # TODO: RUSTPYTHON
|
||||
def check_output(self, want, got, optionflags): # TODO: RUSTPYTHON
|
||||
if optionflags & EXPECTED_FAILURE: # TODO: RUSTPYTHON
|
||||
return not super().check_output(want, got, optionflags) # TODO: RUSTPYTHON
|
||||
return super().check_output(want, got, optionflags) # TODO: RUSTPYTHON
|
||||
|
||||
def load_tests(loader, tests, pattern):
|
||||
tests.addTest(doctest.DocTestSuite(checker=CustomOutputChecker())) # TODO: RUSTPYTHON
|
||||
tests.addTest(doctest.DocTestSuite())
|
||||
return tests
|
||||
|
||||
|
||||
|
||||
@@ -229,10 +229,10 @@ impl PyFunction {
|
||||
};
|
||||
|
||||
// Count keyword-only arguments that were actually provided
|
||||
let kwonly_given = if code.kwonlyarg_count > 0 {
|
||||
let kwonly_start = code.arg_count as usize;
|
||||
let kwonly_end = kwonly_start + code.kwonlyarg_count as usize;
|
||||
code.varnames[kwonly_start..kwonly_end]
|
||||
let kw_only_given = if code.kwonlyarg_count > 0 {
|
||||
let start = code.arg_count as usize;
|
||||
let end = start + code.kwonlyarg_count as usize;
|
||||
code.varnames[start..end]
|
||||
.iter()
|
||||
.filter(|name| func_args.kwargs.contains_key(name.as_str()))
|
||||
.count()
|
||||
@@ -240,13 +240,13 @@ impl PyFunction {
|
||||
0
|
||||
};
|
||||
|
||||
let given_msg = if kwonly_given > 0 {
|
||||
let given_msg = if kw_only_given > 0 {
|
||||
format!(
|
||||
"{} positional argument{} (and {} keyword-only argument{}) were",
|
||||
nargs,
|
||||
if nargs == 1 { "" } else { "s" },
|
||||
kwonly_given,
|
||||
if kwonly_given == 1 { "" } else { "s" },
|
||||
kw_only_given,
|
||||
if kw_only_given == 1 { "" } else { "s" },
|
||||
)
|
||||
} else {
|
||||
format!("{} {}", nargs, if nargs == 1 { "was" } else { "were" })
|
||||
|
||||
Reference in new issue
Block a user