diff --git a/docs/changes.md b/docs/changes.md index 1250c0315..4ed67905b 100644 --- a/docs/changes.md +++ b/docs/changes.md @@ -1,5 +1,10 @@ # 最新动态 +2022/09/22 + * 完善fscript单元测试(感谢雨欣提供补丁) + * 增加判断目录是否为空的接口(感谢兆坤提供补丁) + * 完善types_def.h(感谢文静提供补丁) + 2022/09/21 * 完善编译脚本对mingw的支持(感谢俊杰提供补丁) * 按钮失去焦点后取消按下状态(感谢兆坤提供补丁)。 diff --git a/src/tkc/fs.c b/src/tkc/fs.c index 8c911f073..32f5e452b 100644 --- a/src/tkc/fs.c +++ b/src/tkc/fs.c @@ -545,6 +545,31 @@ ret_t fs_remove_dir_r(fs_t* fs, const char* name) { return ret; } +bool_t fs_dir_is_empty(fs_t* fs, const char* name) { + bool_t ret = TRUE; + fs_dir_t* dir = NULL; + fs_item_t item; + return_value_if_fail(fs != NULL && name != NULL, ret); + + dir = fs_open_dir(fs, name); + return_value_if_fail(dir != NULL, ret); + + do { + if (fs_dir_read(dir, &item) != RET_OK) { + break; + } + if (tk_str_eq(item.name, ".") || tk_str_eq(item.name, "..")) { + continue; + } else { + ret = FALSE; + } + } while (ret); + + fs_dir_close(dir); + + return ret; +} + #ifndef TK_COPY_BUFF_SIZE #define TK_COPY_BUFF_SIZE 4096 #endif /*TK_COPY_BUFF_SIZE*/ diff --git a/src/tkc/fs.h b/src/tkc/fs.h index 5240329dd..f2989ed43 100644 --- a/src/tkc/fs.h +++ b/src/tkc/fs.h @@ -579,6 +579,18 @@ ret_t fs_create_dir_r(fs_t* fs, const char* name); */ ret_t fs_remove_dir_r(fs_t* fs, const char* name); +/** + * @method fs_dir_is_empty + * + * 判断目录是否为空。 + * + * @param {fs_t*} fs 文件系统对象,一般赋值为os_fs()。 + * @param {const char*} name 目录名称。 + * + * @return {bool_t} 返回TRUE表示目录为空,否则表示目录不为空。 + */ +bool_t fs_dir_is_empty(fs_t* fs, const char* name); + /** * @method fs_dir_exist * diff --git a/src/tkc/types_def.h b/src/tkc/types_def.h index 7a96c1370..0fec41641 100644 --- a/src/tkc/types_def.h +++ b/src/tkc/types_def.h @@ -32,6 +32,7 @@ #include #include #include +#include #include #include diff --git a/tests/fs_test.cc b/tests/fs_test.cc index 9fa622aac..1a4d24f7a 100644 --- a/tests/fs_test.cc +++ b/tests/fs_test.cc @@ -156,6 +156,18 @@ TEST(Fs, create_dir_r) { ASSERT_EQ(fs_dir_exist(os_fs(), "a"), FALSE); } +TEST(Fs, dir_empty) { + ASSERT_EQ(fs_create_dir_r(os_fs(), "a/b/c/d"), RET_OK); + ASSERT_EQ(fs_dir_exist(os_fs(), "a/b/c/d"), TRUE); + + ASSERT_EQ(fs_dir_is_empty(os_fs(), "a/b/c/d"), TRUE); + ASSERT_EQ(file_write("a/b/c/d/test.txt", "hello", 5), RET_OK); + ASSERT_EQ(fs_dir_is_empty(os_fs(), "a/b/c/d"), FALSE); + + ASSERT_EQ(fs_remove_dir_r(os_fs(), "a"), RET_OK); + ASSERT_EQ(fs_dir_exist(os_fs(), "a"), FALSE); +} + TEST(Fs, copy_file) { const char* src = "./test.txt"; const char* dst = "./a/b/test.txt"; diff --git a/tests/fscript_test.cc b/tests/fscript_test.cc index d12355262..835bf5e8a 100644 --- a/tests/fscript_test.cc +++ b/tests/fscript_test.cc @@ -308,6 +308,10 @@ TEST(FScript, join) { ASSERT_STREQ(value_str(&v), "a,b,c"); value_reset(&v); + fscript_eval(obj, "join(\",\", str(123), str(456), str(789), \"abc\")", &v); + ASSERT_STREQ(value_str(&v), "123,456,789,abc"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -328,6 +332,11 @@ TEST(FScript, iformat) { ASSERT_STREQ(value_str(&v), "hello:123"); value_reset(&v); + fscript_eval(obj, "iformat(\"hello:%d\", 123) + str(456)", &v); + ASSERT_STREQ(value_str(&v), "hello:123456"); + value_reset(&v); + + TK_OBJECT_UNREF(obj); } @@ -338,6 +347,10 @@ TEST(FScript, fformat) { ASSERT_STREQ(value_str(&v), "hello:123.000000"); value_reset(&v); + fscript_eval(obj, "fformat(\"hello:%f\", 123) + str(456)", &v); + ASSERT_STREQ(value_str(&v), "hello:123.000000456"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -549,6 +562,10 @@ TEST(FScript, trim) { ASSERT_STREQ(value_str(&v), "aaa"); value_reset(&v); + fscript_eval(obj, "trim(\"aaa \") + str(123)", &v); + ASSERT_STREQ(value_str(&v), "aaa123"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -579,6 +596,10 @@ TEST(FScript, toupper) { ASSERT_STREQ(value_str(&v), "AAA"); value_reset(&v); + fscript_eval(obj, "toupper(\"aaa\") + str(123)", &v); + ASSERT_STREQ(value_str(&v), "AAA123"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -594,6 +615,10 @@ TEST(FScript, tolower) { ASSERT_STREQ(value_str(&v), "aaa"); value_reset(&v); + fscript_eval(obj, "tolower(\"AAA\") + str(123)", &v); + ASSERT_STREQ(value_str(&v), "aaa123"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -609,6 +634,10 @@ TEST(FScript, replace) { ASSERT_STREQ(value_str(&v), "123"); value_reset(&v); + fscript_eval(obj, "replace(\"aaa123\", \"a\", \"\") + str(456)", &v); + ASSERT_STREQ(value_str(&v), "123456"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -643,6 +672,10 @@ TEST(FScript, substr) { ASSERT_STREQ(value_str(&v), "1234567"); value_reset(&v); + fscript_eval(obj, "substr(\"1234567\", 1, 3) + str(123)", &v); + ASSERT_STREQ(value_str(&v), "234123"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -917,6 +950,10 @@ TEST(FExr, sum) { ASSERT_EQ(value_int(&v), 0); value_reset(&v); + fscript_eval(obj, "str(123) + str(456)", &v); + ASSERT_STREQ(value_str(&v), "123456"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -1701,6 +1738,21 @@ TEST(FExr, global) { TK_OBJECT_UNREF(obj); } +TEST(FExr, totitle) { + value_t v; + tk_object_t* obj = object_default_create(); + + fscript_eval(obj, "totitle(\"it is ok!\")", &v); + ASSERT_STREQ(value_str(&v), "It Is Ok!"); + value_reset(&v); + + fscript_eval(obj, "totitle(\"it is ok!\") + str(123)", &v); + ASSERT_STREQ(value_str(&v), "It Is Ok!123"); + value_reset(&v); + + TK_OBJECT_UNREF(obj); +} + TEST(FExr, text_count) { value_t v; tk_object_t* obj = object_default_create(); @@ -1722,6 +1774,37 @@ TEST(FExr, text_reverse) { ASSERT_STREQ(value_str(&v), "cba"); value_reset(&v); + fscript_eval(obj, "text_reverse(\"abc\") + str(123)", &v); + ASSERT_STREQ(value_str(&v), "cba123"); + value_reset(&v); + + TK_OBJECT_UNREF(obj); +} + +TEST(FExr, usubstr) { + value_t v; + tk_object_t* obj = object_default_create(); + + fscript_eval(obj, "usubstr('致远电子', 0, 1)", &v); + ASSERT_STREQ(value_str(&v), "致"); + value_reset(&v); + + fscript_eval(obj, "usubstr('致远电子', 0, -1)", &v); + ASSERT_STREQ(value_str(&v), "致远电"); + value_reset(&v); + + fscript_eval(obj, "usubstr('致远电子', -2, -1)", &v); + ASSERT_STREQ(value_str(&v), "电"); + value_reset(&v); + + fscript_eval(obj, "usubstr('致远电子', -3)", &v); + ASSERT_STREQ(value_str(&v), "远电子"); + value_reset(&v); + + fscript_eval(obj, "usubstr('致远电子', -3) + str(123)", &v); + ASSERT_STREQ(value_str(&v), "远电子123"); + value_reset(&v); + TK_OBJECT_UNREF(obj); } @@ -2084,6 +2167,10 @@ TEST(FExr, char_at) { ASSERT_STREQ(value_str(&v1), "h"); value_reset(&v1); + fscript_eval(obj, "char_at(\"hello\", 2) + str(123)", &v1); + ASSERT_STREQ(value_str(&v1), "l123"); + value_reset(&v1); + TK_OBJECT_UNREF(obj); }