Skip to content

Commit 53185cd

Browse files
authored
Fixed test_bytearray_translate Error (RustPython#3730)
1 parent 4a0be5a commit 53185cd

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

Lib/test/test_builtin.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,8 +1693,6 @@ def test_bin(self):
16931693
self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
16941694
self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
16951695

1696-
# TODO: RUSTPYTHON
1697-
@unittest.expectedFailure
16981696
def test_bytearray_translate(self):
16991697
x = bytearray(b"abc")
17001698
self.assertRaises(ValueError, x.translate, b"1", 1)

vm/src/bytesinner.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,27 +202,34 @@ impl ByteInnerPaddingOptions {
202202
#[derive(FromArgs)]
203203
pub struct ByteInnerTranslateOptions {
204204
#[pyarg(positional)]
205-
table: Option<PyBytesInner>,
205+
table: Option<PyObjectRef>,
206206
#[pyarg(any, optional)]
207-
delete: OptionalArg<PyBytesInner>,
207+
delete: OptionalArg<PyObjectRef>,
208208
}
209209

210210
impl ByteInnerTranslateOptions {
211211
pub fn get_value(self, vm: &VirtualMachine) -> PyResult<(Vec<u8>, Vec<u8>)> {
212212
let table = self.table.map_or_else(
213213
|| Ok((0..=255).collect::<Vec<u8>>()),
214214
|v| {
215-
if v.elements.len() != 256 {
216-
return Err(vm.new_value_error(
217-
"translation table must be 256 characters long".to_owned(),
218-
));
219-
}
220-
Ok(v.elements.to_vec())
215+
let bytes = v
216+
.try_into_value::<PyBytesInner>(vm)
217+
.ok()
218+
.filter(|v| v.elements.len() == 256)
219+
.ok_or_else(|| {
220+
vm.new_value_error(
221+
"translation table must be 256 characters long".to_owned(),
222+
)
223+
})?;
224+
Ok(bytes.elements.to_vec())
221225
},
222226
)?;
223227

224228
let delete = match self.delete {
225-
OptionalArg::Present(byte) => byte.elements,
229+
OptionalArg::Present(byte) => {
230+
let byte: PyBytesInner = byte.try_into_value(vm)?;
231+
byte.elements
232+
}
226233
_ => vec![],
227234
};
228235

0 commit comments

Comments
 (0)