Fixed test_bytearray_translate Error (#3730)

This commit is contained in:
Lithium
2022-05-22 10:57:12 +09:00
committed by GitHub
parent 4a0be5a6d0
commit 53185cdfb8
2 changed files with 16 additions and 11 deletions

View File

@@ -1693,8 +1693,6 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_bytearray_translate(self):
x = bytearray(b"abc")
self.assertRaises(ValueError, x.translate, b"1", 1)

View File

@@ -202,9 +202,9 @@ impl ByteInnerPaddingOptions {
#[derive(FromArgs)]
pub struct ByteInnerTranslateOptions {
#[pyarg(positional)]
table: Option<PyBytesInner>,
table: Option<PyObjectRef>,
#[pyarg(any, optional)]
delete: OptionalArg<PyBytesInner>,
delete: OptionalArg<PyObjectRef>,
}
impl ByteInnerTranslateOptions {
@@ -212,17 +212,24 @@ impl ByteInnerTranslateOptions {
let table = self.table.map_or_else(
|| Ok((0..=255).collect::<Vec<u8>>()),
|v| {
if v.elements.len() != 256 {
return Err(vm.new_value_error(
"translation table must be 256 characters long".to_owned(),
));
}
Ok(v.elements.to_vec())
let bytes = v
.try_into_value::<PyBytesInner>(vm)
.ok()
.filter(|v| v.elements.len() == 256)
.ok_or_else(|| {
vm.new_value_error(
"translation table must be 256 characters long".to_owned(),
)
})?;
Ok(bytes.elements.to_vec())
},
)?;
let delete = match self.delete {
OptionalArg::Present(byte) => byte.elements,
OptionalArg::Present(byte) => {
let byte: PyBytesInner = byte.try_into_value(vm)?;
byte.elements
}
_ => vec![],
};