From f556eada483134f5dc433e6bd4510047e4953649 Mon Sep 17 00:00:00 2001
From: Benoit Giannangeli <benoit.giannangeli@boursorama.fr>
Date: Thu, 16 Feb 2017 14:49:25 +0100
Subject: lua_pushcclosure, lua_pushcfunction

---
 tests/C/Makefile                 | 13 +++++----
 tests/C/lua_pushcclosure-light.c | 25 ++++++++++++++++
 tests/lapi.js                    | 63 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 6 deletions(-)
 create mode 100644 tests/C/lua_pushcclosure-light.c

(limited to 'tests')

diff --git a/tests/C/Makefile b/tests/C/Makefile
index 7d943b9..357bbbe 100644
--- a/tests/C/Makefile
+++ b/tests/C/Makefile
@@ -4,9 +4,10 @@ CFLAGS= -g -Wall -Wextra
 LIBS= -lm -llua
 
 all:
-	$(CC) $(CFLAGS) $(LIBS) lua_pushnil.c     -o lua_pushnil.out
-	$(CC) $(CFLAGS) $(LIBS) lua_pushnumber.c  -o lua_pushnumber.out
-	$(CC) $(CFLAGS) $(LIBS) lua_pushinteger.c -o lua_pushinteger.out
-	$(CC) $(CFLAGS) $(LIBS) lua_pushstring.c  -o lua_pushstring.out
-	$(CC) $(CFLAGS) $(LIBS) lua_pushboolean.c  -o lua_pushboolean.out
-	$(CC) $(CFLAGS) $(LIBS) lua_pushvalue.c  -o lua_pushvalue.out
\ No newline at end of file
+	$(CC) $(CFLAGS) $(LIBS) lua_pushnil.c             -o lua_pushnil.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushnumber.c          -o lua_pushnumber.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushinteger.c         -o lua_pushinteger.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushstring.c          -o lua_pushstring.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushboolean.c         -o lua_pushboolean.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushvalue.c           -o lua_pushvalue.out
+	$(CC) $(CFLAGS) $(LIBS) lua_pushcclosure-light.c  -o lua_pushcclosure-light.out
\ No newline at end of file
diff --git a/tests/C/lua_pushcclosure-light.c b/tests/C/lua_pushcclosure-light.c
new file mode 100644
index 0000000..a891450
--- /dev/null
+++ b/tests/C/lua_pushcclosure-light.c
@@ -0,0 +1,25 @@
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int func(lua_State *L) {
+    return 0;
+}
+
+int main(void) {
+
+    lua_State *L = luaL_newstate();
+
+    luaL_openlibs(L);
+
+    lua_pushcclosure(L, func, 0);
+
+    printf("L->top(%d): %s\n", lua_gettop(L), luaL_typename(L, lua_gettop(L)));
+
+    lua_close(L);
+
+    return 0;
+
+}
\ No newline at end of file
diff --git a/tests/lapi.js b/tests/lapi.js
index 875a89c..ad39fe1 100644
--- a/tests/lapi.js
+++ b/tests/lapi.js
@@ -215,4 +215,67 @@ test('lua_pushvalue', function (t) {
         "hello",
         "top is correct"
     );
+});
+
+
+test('lua_pushcclosure', function (t) {
+    let L;
+    
+    t.plan(3);
+
+    t.doesNotThrow(function () {
+
+        let fn = function(L) {
+            return 0;
+        };
+
+        L = lauxlib.luaL_newstate();
+
+        lapi.lua_pushstring(L, "a value associated to the C closure");
+        lapi.lua_pushcclosure(L, fn, 1);
+
+    }, "JS Lua program ran without error");
+
+    t.strictEqual(
+        lapi.lua_gettop(L),
+        1,
+        "top is correct"
+    );
+
+    t.strictEqual(
+        lauxlib.luaL_typename(L, lapi.lua_gettop(L)),
+        "function",
+        "Correct element(s) on the stack"
+    );
+});
+
+
+test('lua_pushcfunction', function (t) {
+    let L;
+    
+    t.plan(3);
+
+    t.doesNotThrow(function () {
+
+        let fn = function(L) {
+            return 0;
+        };
+
+        L = lauxlib.luaL_newstate();
+
+        lapi.lua_pushcfunction(L, fn);
+
+    }, "JS Lua program ran without error");
+
+    t.strictEqual(
+        lapi.lua_gettop(L),
+        1,
+        "top is correct"
+    );
+
+    t.strictEqual(
+        lauxlib.luaL_typename(L, lapi.lua_gettop(L)),
+        "function",
+        "Correct element(s) on the stack"
+    );
 });
\ No newline at end of file
-- 
cgit v1.2.3-70-g09d2