<!DOCTYPE html>
<html data-lt-installed="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body style="padding-bottom: 1px;">
<p>Sergey,<br>
</p>
<div class="moz-cite-prefix">On 21.08.2024 11:58, Sergey Kaplun
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:2e6f291e381ee18f9dd968d70631a56bad510a14.1724228998.git.skaplun@tarantool.org">
<pre class="moz-quote-pre" wrap="">This patch moves the aforementioned test from the <misc> to the <lang/>
directory, includes it in <index>, names the subtests, and slightly
reformates the code style to make it closer to ours.
Part of tarantool/tarantool#9398
---</pre>
</blockquote>
thanks for the patch! LGTM<br>
<blockquote type="cite"
cite="mid:2e6f291e381ee18f9dd968d70631a56bad510a14.1724228998.git.skaplun@tarantool.org">
<pre class="moz-quote-pre" wrap="">
test/LuaJIT-tests/lang/hook_active.lua | 102 +++++++++++++++++++++++++
test/LuaJIT-tests/lang/index | 1 +
test/LuaJIT-tests/misc/hook_active.lua | 95 -----------------------
3 files changed, 103 insertions(+), 95 deletions(-)
create mode 100644 test/LuaJIT-tests/lang/hook_active.lua
delete mode 100644 test/LuaJIT-tests/misc/hook_active.lua
diff --git a/test/LuaJIT-tests/lang/hook_active.lua b/test/LuaJIT-tests/lang/hook_active.lua
new file mode 100644
index 00000000..a5f38055
--- /dev/null
+++ b/test/LuaJIT-tests/lang/hook_active.lua
@@ -0,0 +1,102 @@
+local ctest = require("libctest")
+
+local called = 0
+local function clearhook() debug.sethook(nil, "", 0) end
+
+do --- Return from pcall with active hook must prepend true. FF pcall.
+ called = 0
+ debug.sethook(function() called = called + 1; assert(pcall(function() end) == true); clearhook() end, "", 1)
+ do local x = 1 end
+ assert(called == 1)
+end
+
+do --- Hook with special caught error must not unblock hooks. FF pcall.
+ called = 0
+ debug.sethook(function() called = called + 1; pcall(nil); clearhook() end, "", 1)
+ do local x = 1 end
+ assert(called == 1)
+end
+
+do --- Hook with caught error must not unblock hooks. FF pcall.
+ called = 0
+ local function p2() error("") end
+ debug.sethook(function() called = called + 1; pcall(p2); clearhook() end, "", 1)
+ do local x = 1 end
+ assert(called == 1)
+end
+
+do --- Hook with special caught error must not unblock hooks. C pcall.
+ called = 0
+ debug.sethook(function() called = called + 1; ctest.pcall(nil); clearhook() end, "", 1)
+ do local x = 1 end
+ assert(called == 1)
+end
+
+do --- Hook with caught error must not unblock hooks. C pcall.
+ called = 0
+ local function p2() error("") end
+ debug.sethook(function() called = called + 1; ctest.pcall(p2); clearhook() end, "", 1)
+ do local x = 1 end
+ assert(called == 1)
+end
+
+do --- Regular pcall must not block hooks.
+ debug.sethook(function() called = called + 1 end, "", 1)
+ pcall(function() end)
+ called = 0
+ do local x = 1 end
+ assert(called > 0)
+ pcall(function() error("") end)
+ called = 0
+ do local x = 1 end
+ assert(called > 0)
+ ctest.pcall(function() end)
+ called = 0
+ do local x = 1 end
+ assert(called > 0)
+ ctest.pcall(function() error("") end)
+ called = 0
+ do local x = 1 end
+ assert(called > 0)
+ clearhook()
+end
+
+do --- Hook with uncaught error must unblock hooks. FF pcall.
+ called = 0
+ pcall(function()
+ debug.sethook(function()
+ local old = called
+ called = 1
+ if old == 0 then error("") end
+ end, "", 1)
+ do local x = 1 end
+ end)
+ assert(called == 1)
+ called = 2
+ do local x = 1 end
+ assert(called == 1, "hook not unblocked after uncaught error")
+ clearhook()
+ called = 2
+ do local x = 1 end
+ assert(called == 2)
+end
+
+do --- Hook with uncaught error must unblock hooks. C pcall.
+ called = 0
+ ctest.pcall(function()
+ debug.sethook(function()
+ local old = called
+ called = 1
+ if old == 0 then error("") end
+ end, "", 1)
+ do local x = 1 end
+ end)
+ assert(called == 1)
+ called = 2
+ do local x = 1 end
+ assert(called == 1, "hook not unblocked after uncaught error")
+ clearhook()
+ called = 2
+ do local x = 1 end
+ assert(called == 2)
+end
diff --git a/test/LuaJIT-tests/lang/index b/test/LuaJIT-tests/lang/index
index 274425bf..8cecfa08 100644
--- a/test/LuaJIT-tests/lang/index
+++ b/test/LuaJIT-tests/lang/index
@@ -8,6 +8,7 @@ compare_nan.lua
constant
dualnum.lua
for.lua
+hook_active.lua
length.lua
lightud.lua
modulo.lua
diff --git a/test/LuaJIT-tests/misc/hook_active.lua b/test/LuaJIT-tests/misc/hook_active.lua
deleted file mode 100644
index 37dfc379..00000000
--- a/test/LuaJIT-tests/misc/hook_active.lua
+++ /dev/null
@@ -1,95 +0,0 @@
-local ctest = require("ctest")
-
-local called = 0
-local function clearhook() debug.sethook(nil, "", 0) end
-
--- Return from pcall with active hook must prepend true. FF pcall.
-called = 0
-debug.sethook(function() called=called+1; assert(pcall(function() end) == true); clearhook() end, "", 1)
-do local x = 1 end
-assert(called == 1)
-
--- Hook with special caught error must not unblock hooks. FF pcall.
-called = 0
-debug.sethook(function() called=called+1; pcall(nil); clearhook() end, "", 1)
-do local x = 1 end
-assert(called == 1)
-
--- Hook with caught error must not unblock hooks. FF pcall.
-called = 0
-local function p2() error("") end
-debug.sethook(function() called=called+1; pcall(p2); clearhook() end, "", 1)
-do local x = 1 end
-assert(called == 1)
-
--- Hook with special caught error must not unblock hooks. C pcall.
-called = 0
-debug.sethook(function() called=called+1; ctest.pcall(nil); clearhook() end, "", 1)
-do local x = 1 end
-assert(called == 1)
-
--- Hook with caught error must not unblock hooks. C pcall
-called = 0
-local function p2() error("") end
-debug.sethook(function() called=called+1; ctest.pcall(p2); clearhook() end, "", 1)
-do local x = 1 end
-assert(called == 1)
-
--- Regular pcall must not block hooks.
-debug.sethook(function() called=called+1 end, "", 1)
-pcall(function() end)
-called = 0
-do local x = 1 end
-assert(called > 0)
-pcall(function() error("") end)
-called = 0
-do local x = 1 end
-assert(called > 0)
-ctest.pcall(function() end)
-called = 0
-do local x = 1 end
-assert(called > 0)
-ctest.pcall(function() error("") end)
-called = 0
-do local x = 1 end
-assert(called > 0)
-clearhook()
-
--- Hook with uncaught error must unblock hooks. FF pcall
-called = 0
-pcall(function()
- debug.sethook(function()
- local old = called
- called = 1
- if old == 0 then error("") end
- end, "", 1)
- do local x = 1 end
-end)
-assert(called == 1)
-called = 2
-do local x = 1 end
-assert(called == 1, "hook not unblocked after uncaught error")
-clearhook()
-called = 2
-do local x = 1 end
-assert(called == 2)
-
--- Hook with uncaught error must unblock hooks. C pcall
-called = 0
-ctest.pcall(function()
- debug.sethook(function()
- local old = called
- called = 1
- if old == 0 then error("") end
- end, "", 1)
- do local x = 1 end
-end)
-assert(called == 1)
-called = 2
-do local x = 1 end
-assert(called == 1, "hook not unblocked after uncaught error")
-clearhook()
-called = 2
-do local x = 1 end
-assert(called == 2)
-
</pre>
</blockquote>
</body>
<lt-container></lt-container>
</html>