Procházet zdrojové kódy

add: win32的单元测试,先试试能不能用

chenxuuu před 4 roky
rodič
revize
453ffef152

+ 6 - 1
.github/workflows/win32.yml

@@ -30,9 +30,14 @@ jobs:
         mingw32-make -j2
         cd ..
         mkdir luatos_win32/
-        mv build/luatos.exe luatos_win32/
+        cp build/luatos.exe luatos_win32/
+        cp build/luatos.exe module_test/
         cp lib/sys.lua luatos_win32/
         echo -e "local sys = require 'sys'\r\n\r\nlog.info('sys', 'from win32')\r\n\r\nsys.taskInit(function ()\r\n    while true do\r\n        log.info('hi', os.date())\r\n        log.info('sys', rtos.meminfo('sys'))\r\n        log.info('lua', rtos.meminfo('lua'))\r\n        sys.wait(1000)\r\n    end\r\nend)\r\n\r\nsys.run()" > luatos_win32/main.lua
+    - name: test
+      run: |
+        cd bsp/win32/module_test
+        sh test.sh
     - name: Upload artifact
       uses: actions/upload-artifact@v1
       with:

+ 6 - 0
bsp/win32/module_test/crypto.lua

@@ -0,0 +1,6 @@
+local md5 = crypto.md5("abc")
+log.info("md5 result",md5)
+assert(md5:upper() == "900150983CD24FB0D6963F7D28E17F72","md5 error")
+
+--todo
+

+ 19 - 0
bsp/win32/module_test/readme.md

@@ -0,0 +1,19 @@
+# 单元测试
+
+## 用途
+
+本文件夹的脚本,用于测试函数是否运行正确
+
+## 编写测试脚本
+
+原则上每个包都需要测试脚本,仅测试win32条件下编译进来的包
+
+每个测试脚本,尽量多加打印日志信息,并且在不符合测试结果时,及时`assert(false,"原因")`
+
+## 测试
+
+复制`luatos.exe`到本文件夹,运行`test.sh`即可开始测试
+
+## 自动测试
+
+脚本提交后,会在GitHub上进行自动测试。建议每次push前,先自己测一遍

+ 17 - 0
bsp/win32/module_test/test.sh

@@ -0,0 +1,17 @@
+result=0
+
+script=( ./*.lua )
+for file in "${script[@]}"
+do
+    script_output=$(./luatos.exe $file)
+    if [ $? -eq 0 ]
+    then
+        echo "$file pass"
+    else
+        echo "$file not pass"
+        echo "$script_output"
+        result=1
+    fi
+done
+echo "all done, exit with $result"
+exit $result

+ 46 - 0
bsp/win32/module_test/zbuff.lua

@@ -0,0 +1,46 @@
+local buff = zbuff.create(15,6)
+for i=0,14 do
+    log.info("read byte",i,buff[i])
+    assert(buff[i] == 6,"init error")
+end
+
+local writeLen = buff:write("abcde")
+log.info("writeLen string",writeLen)
+assert(writeLen == 5,"string write length error")
+writeLen = buff:write(0x31,0x32,0x33,0x34,0x35)
+log.info("writeLen numbers",writeLen)
+assert(writeLen == 5,"numbers write length error")
+
+buff:seek(0)
+local readData = buff:read(5)
+log.info("readData1",readData)
+assert(readData == "abcde","read data1 error")
+readData = buff:read(5)
+log.info("readData2",readData)
+assert(readData == "12345","read data2 error")
+
+log.info("write bytes")
+for i=0,9 do
+    buff[i] = i * 2
+end
+
+for i=0,9 do
+    log.info("read byte",i,buff[i])
+    assert(buff[i] == i * 2,"read byte error")
+end
+
+buff:seek(0)
+writeLen = buff:pack(">bbbIAIII",1,2,3,4,"abc",666,2,3)
+log.info("pack write length",writeLen)
+assert(writeLen == 15,"pack write length error")
+
+buff:seek(0)
+local len,b1,b2,b3,b4,s,i1 = buff:unpack(">bbbIA3III")
+log.info("unpack read",len,b1,b2,b3,b4,s,i1)
+assert(len == 14,"pack read length error")
+assert(b1 == 1,"pack read b1 error")
+assert(b2 == 2,"pack read b2 error")
+assert(b3 == 3,"pack read b3 error")
+assert(b4 == 4,"pack read b4 error")
+assert(s == "abc","pack read s error")
+assert(i1 == 666,"pack read I error")

+ 5 - 2
luat/modules/luat_lib_zbuff.c

@@ -365,9 +365,11 @@ static int l_zbuff_pack(lua_State *L)
 将一系列数据按照格式字符读取出来
 @api buff:unpack(format)
 @string 数据的格式(符号含义见上面pack接口的例子)
-@return any 按格式读出来的数据,最后会多返回一个值,是读取长度
+@return int 成功读取的数据字节长度
+@return any 按格式读出来的数据
 @usage
-local a,b,c,s,len = buff:unpack(">IIHA10") -- 按格式读取几个数据
+local cnt,a,b,c,s = buff:unpack(">IIHA10") -- 按格式读取几个数据
+--如果全部成功读取,cnt就是4+4+2+10=20
  */
 static int l_zbuff_unpack(lua_State *L)
 {
@@ -437,6 +439,7 @@ static int l_zbuff_unpack(lua_State *L)
 done:
     buff->cursor += i;
     lua_pushinteger(L, i);
+    lua_replace(L,-n-2);
     return n + 1;
 }