From a74044a26e470a611b4e75544020adc3dcc478ac Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Tue, 22 Sep 2026 03:05:35 +0000 Subject: [PATCH] =?UTF-8?q?test:=20=E7=B1=BB=E6=AD=A3=E5=88=99=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=20replace=20=E6=9C=9F=E6=9C=9B=E6=94=B9=E6=8A=9B=20Ty?= =?UTF-8?q?peError=20=E5=AF=B9=E9=BD=90=20IsRegExp=20=E4=BC=A0=E6=92=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oxide_vm/tests/builtins_string_tests.rs | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/crates/oxide_vm/tests/builtins_string_tests.rs b/crates/oxide_vm/tests/builtins_string_tests.rs index 8d4827a0..60e474f0 100644 --- a/crates/oxide_vm/tests/builtins_string_tests.rs +++ b/crates/oxide_vm/tests/builtins_string_tests.rs @@ -552,32 +552,18 @@ fn string_replace_regex_proto_subclass_fallback() { #[test] fn string_replace_regex_proto_subclass_custom_tostring() { // 判别性回归:自定义 toString 命中源串的类正则对象,replace/replaceAll - // 均按 ToString 文本替换(不返回原串、不抛 TypeError),两入口对称。 + // 的 IsRegExp 判定经 GetMethod(@@match) 调默认 @@match——非 RegExp receiver + // 抛 TypeError 原样传播,不降级为 ToString 文本替换,两入口对称(node 同形)。 let mut vm = Vm::new(); - let s = eval( - &mut vm, + for src in [ "var sp = Object.create(RegExp.prototype); sp.toString = function(){ return 'X' }; 'aXb'.replace(sp, 'Y')", - ) - .unwrap(); - assert_eq!(to_str(&vm, s), "aYb"); - let s = eval( - &mut vm, "var sp = Object.create(RegExp.prototype); sp.toString = function(){ return 'X' }; 'aXb'.replaceAll(sp, 'Y')", - ) - .unwrap(); - assert_eq!(to_str(&vm, s), "aYb"); - let s = eval( - &mut vm, "var sp = Object.create(RegExp.prototype); sp.toString = function(){ return 'X' }; 'aXb'.replace(sp, function(){ return 'Z' })", - ) - .unwrap(); - assert_eq!(to_str(&vm, s), "aZb"); - let s = eval( - &mut vm, "var sp = Object.create(RegExp.prototype); sp.toString = function(){ return 'X' }; 'aXb'.replaceAll(sp, function(){ return 'Z' })", - ) - .unwrap(); - assert_eq!(to_str(&vm, s), "aZb"); + ] { + let err = eval(&mut vm, src).unwrap_err(); + assert!(err.contains("TypeError"), "{src} 应抛 TypeError,实际: {err}"); + } } #[test]