From f73bf3681fb58dc37acec118805a952190ecce42 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 4 Oct 2026 13:21:41 +0000 Subject: [PATCH] =?UTF-8?q?test:=20=E8=A1=A5=20for=20=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E5=BD=A2=E5=AE=8C=E6=88=90=E5=80=BC=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E9=92=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_vm/tests/eval_tests.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/crates/oxide_vm/tests/eval_tests.rs b/crates/oxide_vm/tests/eval_tests.rs index 196743f2..e4996653 100644 --- a/crates/oxide_vm/tests/eval_tests.rs +++ b/crates/oxide_vm/tests/eval_tests.rs @@ -303,6 +303,19 @@ fn compound_statement_completion_values() { assert_num(result, 5.0); let result = eval(&mut vm, "a: { try { throw 1; } catch (e) { 5; break a; } }").unwrap(); assert_num(result, 5.0); + // for 泄漏形完成值:体不读循环变量加常量尾,取末次迭代体值,前值不沿用。 + let result = eval(&mut vm, "for (var i = 0; i < 2; ++i) { 42 }").unwrap(); + assert_num(result, 42.0); + let result = eval(&mut vm, "for (var i = 0; i < 2; ++i) { 'bad completion' }").unwrap(); + let rendered = vm.lookup_str(result).unwrap_or_default(); + assert_eq!(rendered, "bad completion"); + let result = eval(&mut vm, "7; for (var i = 0; i < 2; ++i) { 42 }").unwrap(); + assert_num(result, 42.0); + let result = eval(&mut vm, "9; for (var i = 0; i < 2; ++i) { i; 42 }").unwrap(); + assert_num(result, 42.0); + // 0 迭代块体:完成值 undefined(前值不沿用)。 + let result = eval(&mut vm, "9; for (var i = 0; false;) { 42 }").unwrap(); + assert_eq!(result, JsValue::undefined()); } #[test]