1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ci#include <stdarg.h> 17f6603c60Sopenharmony_ci 18f6603c60Sopenharmony_ci#include <wchar.h> 19f6603c60Sopenharmony_ci 20f6603c60Sopenharmony_ci#include "IoTest.h" 21f6603c60Sopenharmony_ci#include <securec.h> 22f6603c60Sopenharmony_ci 23f6603c60Sopenharmony_ciusing namespace testing::ext; 24f6603c60Sopenharmony_ci 25f6603c60Sopenharmony_ci 26f6603c60Sopenharmony_ciint FormatVfwscanf(FILE *fp, const wchar_t *format, ...) 27f6603c60Sopenharmony_ci{ 28f6603c60Sopenharmony_ci va_list args; 29f6603c60Sopenharmony_ci va_start(args, format); 30f6603c60Sopenharmony_ci int ret = vfwscanf(fp, format, args); 31f6603c60Sopenharmony_ci va_end(args); 32f6603c60Sopenharmony_ci return ret; 33f6603c60Sopenharmony_ci} 34f6603c60Sopenharmony_ci 35f6603c60Sopenharmony_ciint FormatVfwprintf(FILE *fp, const wchar_t *format, ...) 36f6603c60Sopenharmony_ci{ 37f6603c60Sopenharmony_ci va_list args; 38f6603c60Sopenharmony_ci va_start(args, format); 39f6603c60Sopenharmony_ci int ret = vfwprintf(fp, format, args); 40f6603c60Sopenharmony_ci va_end(args); 41f6603c60Sopenharmony_ci return ret; 42f6603c60Sopenharmony_ci} 43f6603c60Sopenharmony_ci 44f6603c60Sopenharmony_ci/** 45f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0100 46f6603c60Sopenharmony_ci * @tc.name vfwprintf basic function test 47f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 48f6603c60Sopenharmony_ci */ 49f6603c60Sopenharmony_ciHWTEST_F(IoTest, testVfwprintf, Function | MediumTest | Level1) 50f6603c60Sopenharmony_ci{ 51f6603c60Sopenharmony_ci FILE *fp = nullptr; 52f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 53f6603c60Sopenharmony_ci int ret = FormatVfwprintf(fp, L"%s has %d words ", "helloworld", 10); 54f6603c60Sopenharmony_ci EXPECT_EQ(ret, 24); 55f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 56f6603c60Sopenharmony_ci 57f6603c60Sopenharmony_ci FOPEN_READ(fp); 58f6603c60Sopenharmony_ci wchar_t wStr[50] = {0}; 59f6603c60Sopenharmony_ci int i; 60f6603c60Sopenharmony_ci ret = FormatVfwscanf(fp, L"%ls has %d words ", wStr, &i); 61f6603c60Sopenharmony_ci EXPECT_EQ(ret, 2) << "> vfwscanf return fail, errno = " << errno; 62f6603c60Sopenharmony_ci EXPECT_STREQ(wStr, L"helloworld"); 63f6603c60Sopenharmony_ci EXPECT_EQ(i, 10); 64f6603c60Sopenharmony_ci 65f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 66f6603c60Sopenharmony_ci} 67f6603c60Sopenharmony_ci 68f6603c60Sopenharmony_ci/** 69f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0200 70f6603c60Sopenharmony_ci * @tc.name fwprintf basic function test 71f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 72f6603c60Sopenharmony_ci */ 73f6603c60Sopenharmony_ciHWTEST_F(IoTest, testFwprintf, Function | MediumTest | Level1) 74f6603c60Sopenharmony_ci{ 75f6603c60Sopenharmony_ci FILE *fp = nullptr; 76f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 77f6603c60Sopenharmony_ci int ret = fwprintf(fp, L"%s has %d words ", "helloworld", 10); 78f6603c60Sopenharmony_ci EXPECT_EQ(ret, 24); 79f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 80f6603c60Sopenharmony_ci 81f6603c60Sopenharmony_ci FOPEN_READ(fp); 82f6603c60Sopenharmony_ci wchar_t wStr[50] = {0}; 83f6603c60Sopenharmony_ci int i; 84f6603c60Sopenharmony_ci ret = fwscanf(fp, L"%ls has %d words ", wStr, &i); 85f6603c60Sopenharmony_ci EXPECT_EQ(ret, 2) << "> vfwscanf return fail, errno = " << errno; 86f6603c60Sopenharmony_ci EXPECT_STREQ(wStr, L"helloworld"); 87f6603c60Sopenharmony_ci EXPECT_EQ(i, 10); 88f6603c60Sopenharmony_ci 89f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 90f6603c60Sopenharmony_ci} 91f6603c60Sopenharmony_ci 92f6603c60Sopenharmony_ci/** 93f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0300 94f6603c60Sopenharmony_ci * @tc.name fwide basic function test 95f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 96f6603c60Sopenharmony_ci */ 97f6603c60Sopenharmony_ciHWTEST_F(IoTest, testFwide, Function | MediumTest | Level1) 98f6603c60Sopenharmony_ci{ 99f6603c60Sopenharmony_ci FILE *fp = nullptr; 100f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 101f6603c60Sopenharmony_ci FOPEN_READ(fp); 102f6603c60Sopenharmony_ci int ret = fwide(fp, -6); 103f6603c60Sopenharmony_ci EXPECT_EQ(ret, -1); 104f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 105f6603c60Sopenharmony_ci 106f6603c60Sopenharmony_ci FOPEN_READ(fp); 107f6603c60Sopenharmony_ci ret = fwide(fp, 0); 108f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0); 109f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 110f6603c60Sopenharmony_ci 111f6603c60Sopenharmony_ci FOPEN_READ(fp); 112f6603c60Sopenharmony_ci ret = fwide(fp, 8); 113f6603c60Sopenharmony_ci EXPECT_EQ(ret, 1); 114f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 115f6603c60Sopenharmony_ci} 116f6603c60Sopenharmony_ci 117f6603c60Sopenharmony_ci/** 118f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0400 119f6603c60Sopenharmony_ci * @tc.name fgetws basic function test 120f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 121f6603c60Sopenharmony_ci */ 122f6603c60Sopenharmony_ciHWTEST_F(IoTest, testFgetws, Function | MediumTest | Level1) 123f6603c60Sopenharmony_ci{ 124f6603c60Sopenharmony_ci FILE *fp = nullptr; 125f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 126f6603c60Sopenharmony_ci wchar_t wStr[50] = {0}; 127f6603c60Sopenharmony_ci wchar_t wStrT[50] = L"hello world"; 128f6603c60Sopenharmony_ci int ret = fputws(wStrT, fp); 129f6603c60Sopenharmony_ci ASSERT_NE(ret, -1) << "> fputws fail, errno = " << errno; 130f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 131f6603c60Sopenharmony_ci 132f6603c60Sopenharmony_ci FOPEN_READ(fp); 133f6603c60Sopenharmony_ci wchar_t *retW = fgetws(wStr, sizeof(wStr)/sizeof(wStr[0]), fp); 134f6603c60Sopenharmony_ci EXPECT_STREQ(retW, wStrT); 135f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 136f6603c60Sopenharmony_ci} 137f6603c60Sopenharmony_ci 138f6603c60Sopenharmony_ci/** 139f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0500 140f6603c60Sopenharmony_ci * @tc.name putwc basic function test 141f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 142f6603c60Sopenharmony_ci */ 143f6603c60Sopenharmony_ciHWTEST_F(IoTest, testPutwc, Function | MediumTest | Level1) 144f6603c60Sopenharmony_ci{ 145f6603c60Sopenharmony_ci FILE *fp = nullptr; 146f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 147f6603c60Sopenharmony_ci wint_t ret = putwc(L'A', fp); 148f6603c60Sopenharmony_ci EXPECT_EQ(ret, L'A'); 149f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 150f6603c60Sopenharmony_ci 151f6603c60Sopenharmony_ci FOPEN_READ(fp); 152f6603c60Sopenharmony_ci ret = getwc(fp); 153f6603c60Sopenharmony_ci EXPECT_EQ(ret, L'A'); 154f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 155f6603c60Sopenharmony_ci} 156f6603c60Sopenharmony_ci 157f6603c60Sopenharmony_ci/** 158f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0600 159f6603c60Sopenharmony_ci * @tc.name ungetwc basic function test 160f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWAret -0200] 161f6603c60Sopenharmony_ci */ 162f6603c60Sopenharmony_ciHWTEST_F(IoTest, testUngetwc, Function | MediumTest | Level1) 163f6603c60Sopenharmony_ci{ 164f6603c60Sopenharmony_ci FILE *fp = nullptr; 165f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 166f6603c60Sopenharmony_ci FOPEN_READ(fp); 167f6603c60Sopenharmony_ci wint_t ret = getwc(fp); 168f6603c60Sopenharmony_ci EXPECT_EQ(ret, 104U); 169f6603c60Sopenharmony_ci ret = ungetc(ret, fp); 170f6603c60Sopenharmony_ci EXPECT_EQ(ret, 104U); 171f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 172f6603c60Sopenharmony_ci wchar_t *retS = fgetws(str, sizeof(str)/sizeof(str[0]), fp); 173f6603c60Sopenharmony_ci EXPECT_STREQ(retS, str); 174f6603c60Sopenharmony_ci EXPECT_STREQ(str, L"hello world"); 175f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 176f6603c60Sopenharmony_ci} 177f6603c60Sopenharmony_ci 178f6603c60Sopenharmony_ci/** 179f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0700 180f6603c60Sopenharmony_ci * @tc.name fputwc basic function test 181f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 182f6603c60Sopenharmony_ci */ 183f6603c60Sopenharmony_ciHWTEST_F(IoTest, testFputwc, Function | MediumTest | Level1) 184f6603c60Sopenharmony_ci{ 185f6603c60Sopenharmony_ci FILE *fp = nullptr; 186f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 187f6603c60Sopenharmony_ci wint_t ret = fputwc(L'A', fp); 188f6603c60Sopenharmony_ci EXPECT_EQ(ret, L'A'); 189f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 190f6603c60Sopenharmony_ci 191f6603c60Sopenharmony_ci FOPEN_READ(fp); 192f6603c60Sopenharmony_ci ret = fgetwc(fp); 193f6603c60Sopenharmony_ci EXPECT_EQ(ret, L'A'); 194f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = " << errno; 195f6603c60Sopenharmony_ci} 196f6603c60Sopenharmony_ci 197f6603c60Sopenharmony_ci/** 198f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0800 199f6603c60Sopenharmony_ci * @tc.name fwscanf basic function test 200f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 201f6603c60Sopenharmony_ci */ 202f6603c60Sopenharmony_ciHWTEST_F(IoTest, testFwscanf, Function | MediumTest | Level1) 203f6603c60Sopenharmony_ci{ 204f6603c60Sopenharmony_ci FILE *fp = nullptr; 205f6603c60Sopenharmony_ci FOPEN_WRITE(fp); 206f6603c60Sopenharmony_ci int ret = fwprintf(fp, L"%ls has %d words", L"helloworld", 10); 207f6603c60Sopenharmony_ci EXPECT_EQ(ret, 23); 208f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 209f6603c60Sopenharmony_ci 210f6603c60Sopenharmony_ci FOPEN_READ(fp); 211f6603c60Sopenharmony_ci wchar_t wStr[50] = {0}; 212f6603c60Sopenharmony_ci int i; 213f6603c60Sopenharmony_ci ret = fwscanf(fp, L"%ls has %d words", wStr, &i); 214f6603c60Sopenharmony_ci EXPECT_EQ(ret, 2); 215f6603c60Sopenharmony_ci EXPECT_EQ(i, 10); 216f6603c60Sopenharmony_ci EXPECT_STREQ(wStr, L"helloworld"); 217f6603c60Sopenharmony_ci ASSERT_NE(fclose(fp), -1) << "> fclose fail, errno = "<< errno; 218f6603c60Sopenharmony_ci} 219f6603c60Sopenharmony_ci 220f6603c60Sopenharmony_ci/** 221f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_0900 222f6603c60Sopenharmony_ci * @tc.name wmemset basic function test 223f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 224f6603c60Sopenharmony_ci */ 225f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWmemset, Function | MediumTest | Level1) 226f6603c60Sopenharmony_ci{ 227f6603c60Sopenharmony_ci wchar_t dest[50] = {0}; 228f6603c60Sopenharmony_ci wchar_t *ret = wmemset(dest, L'=', 8); 229f6603c60Sopenharmony_ci EXPECT_STREQ(ret, dest); 230f6603c60Sopenharmony_ci EXPECT_STREQ(dest, L"========"); 231f6603c60Sopenharmony_ci 232f6603c60Sopenharmony_ci ret = wmemset(dest, L' ', 8); 233f6603c60Sopenharmony_ci EXPECT_STREQ(ret, dest); 234f6603c60Sopenharmony_ci EXPECT_STREQ(dest, L" "); 235f6603c60Sopenharmony_ci 236f6603c60Sopenharmony_ci ret = wmemset(dest, L'!', 0); 237f6603c60Sopenharmony_ci EXPECT_STREQ(ret, dest); 238f6603c60Sopenharmony_ci EXPECT_STREQ(dest, L" "); 239f6603c60Sopenharmony_ci} 240f6603c60Sopenharmony_ci 241f6603c60Sopenharmony_ci/** 242f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1000 243f6603c60Sopenharmony_ci * @tc.name wmemchr basic function test 244f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 245f6603c60Sopenharmony_ci */ 246f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWmemchr, Function | MediumTest | Level1) 247f6603c60Sopenharmony_ci{ 248f6603c60Sopenharmony_ci wchar_t src[] = L"hello world"; 249f6603c60Sopenharmony_ci wchar_t *ret = wmemchr(src, L' ', sizeof(src)/sizeof(src[0]) - 1); 250f6603c60Sopenharmony_ci EXPECT_STREQ(ret, L" world"); 251f6603c60Sopenharmony_ci 252f6603c60Sopenharmony_ci wchar_t srcT[] = L"this is string"; 253f6603c60Sopenharmony_ci ret = wmemchr(srcT, L'?', sizeof(srcT)/sizeof(srcT[0]) - 1); 254f6603c60Sopenharmony_ci EXPECT_STREQ(ret, nullptr); 255f6603c60Sopenharmony_ci} 256f6603c60Sopenharmony_ci 257f6603c60Sopenharmony_ci/** 258f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1100 259f6603c60Sopenharmony_ci * @tc.name wmemcpy basic function test 260f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 261f6603c60Sopenharmony_ci */ 262f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWmemcpy, Function | MediumTest | Level1) 263f6603c60Sopenharmony_ci{ 264f6603c60Sopenharmony_ci wchar_t src[] = L"hello"; 265f6603c60Sopenharmony_ci wchar_t dest[] = L"world ! ! !"; 266f6603c60Sopenharmony_ci wchar_t *ret = wmemcpy(dest, src, 5); 267f6603c60Sopenharmony_ci EXPECT_STREQ(ret, L"hello ! ! !"); 268f6603c60Sopenharmony_ci 269f6603c60Sopenharmony_ci wchar_t srcT[] = L"this is"; 270f6603c60Sopenharmony_ci wchar_t destT[] = L"string"; 271f6603c60Sopenharmony_ci ret = wmemcpy(destT, srcT, 0); 272f6603c60Sopenharmony_ci EXPECT_STREQ(ret, destT); 273f6603c60Sopenharmony_ci} 274f6603c60Sopenharmony_ci 275f6603c60Sopenharmony_ci/** 276f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1200 277f6603c60Sopenharmony_ci * @tc.name wmemmove basic function test 278f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 279f6603c60Sopenharmony_ci */ 280f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWmemmove, Function | MediumTest | Level1) 281f6603c60Sopenharmony_ci{ 282f6603c60Sopenharmony_ci wchar_t src[] = L"hello"; 283f6603c60Sopenharmony_ci wchar_t dest[] = L"world ! ! !"; 284f6603c60Sopenharmony_ci wchar_t *ret = wmemmove(dest, src, 5); 285f6603c60Sopenharmony_ci EXPECT_STREQ(ret, L"hello ! ! !"); 286f6603c60Sopenharmony_ci 287f6603c60Sopenharmony_ci wchar_t srcT[] = L"this is"; 288f6603c60Sopenharmony_ci wchar_t destT[] = L"string"; 289f6603c60Sopenharmony_ci ret = wmemmove(destT, srcT, 0); 290f6603c60Sopenharmony_ci EXPECT_STREQ(ret, destT); 291f6603c60Sopenharmony_ci} 292f6603c60Sopenharmony_ci 293f6603c60Sopenharmony_ci/** 294f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1300 295f6603c60Sopenharmony_ci * @tc.name putwchar basic function test 296f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 297f6603c60Sopenharmony_ci */ 298f6603c60Sopenharmony_ciHWTEST_F(IoTest, testPutwchar, Function | MediumTest | Level1) 299f6603c60Sopenharmony_ci{ 300f6603c60Sopenharmony_ci for (wchar_t wc = L'A'; wc <= L'Z'; ++wc) { 301f6603c60Sopenharmony_ci wint_t ret = putwchar(wc); 302f6603c60Sopenharmony_ci EXPECT_EQ(ret, wc); 303f6603c60Sopenharmony_ci } 304f6603c60Sopenharmony_ci} 305f6603c60Sopenharmony_ci 306f6603c60Sopenharmony_ci/** 307f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1400 308f6603c60Sopenharmony_ci * @tc.name wmemcmp basic function test 309f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 310f6603c60Sopenharmony_ci */ 311f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWmemcmp, Function | MediumTest | Level1) 312f6603c60Sopenharmony_ci{ 313f6603c60Sopenharmony_ci wchar_t dest[] = L"BBCDEFG"; 314f6603c60Sopenharmony_ci wchar_t src[] = L"CBCDEFF"; 315f6603c60Sopenharmony_ci int ret = wmemcmp(dest, src, 7); 316f6603c60Sopenharmony_ci EXPECT_LT(ret, 0); 317f6603c60Sopenharmony_ci 318f6603c60Sopenharmony_ci ret = wmemcmp(L"abcdefg", L"ABCDEFG", 2); 319f6603c60Sopenharmony_ci EXPECT_GT(ret, 0); 320f6603c60Sopenharmony_ci 321f6603c60Sopenharmony_ci ret = wmemcmp(L"ABCDEFG", L"ABCDEFG", 6); 322f6603c60Sopenharmony_ci EXPECT_EQ(ret, 0); 323f6603c60Sopenharmony_ci} 324f6603c60Sopenharmony_ci 325f6603c60Sopenharmony_ci/** 326f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1500 327f6603c60Sopenharmony_ci * @tc.name mbsinit basic function test 328f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 329f6603c60Sopenharmony_ci */ 330f6603c60Sopenharmony_ciHWTEST_F(IoTest, testMbsinit, Function | MediumTest | Level1) 331f6603c60Sopenharmony_ci{ 332f6603c60Sopenharmony_ci mbstate_t *ps = nullptr; 333f6603c60Sopenharmony_ci int ret = mbsinit(ps); 334f6603c60Sopenharmony_ci int memRet = -1; 335f6603c60Sopenharmony_ci EXPECT_NE(ret, 0); 336f6603c60Sopenharmony_ci 337f6603c60Sopenharmony_ci mbstate_t psF; 338f6603c60Sopenharmony_ci memRet = memset_s(&psF, sizeof(psF), 0, sizeof(psF)); 339f6603c60Sopenharmony_ci EXPECT_EQ(0, memRet); 340f6603c60Sopenharmony_ci ret = mbsinit(&psF); 341f6603c60Sopenharmony_ci EXPECT_NE(ret, 0); 342f6603c60Sopenharmony_ci} 343f6603c60Sopenharmony_ci 344f6603c60Sopenharmony_ciint FormatVswscanf(const wchar_t *str, const wchar_t *format, ...) 345f6603c60Sopenharmony_ci{ 346f6603c60Sopenharmony_ci va_list args; 347f6603c60Sopenharmony_ci va_start(args, format); 348f6603c60Sopenharmony_ci int ret = vswscanf(str, format, args); 349f6603c60Sopenharmony_ci va_end(args); 350f6603c60Sopenharmony_ci return ret; 351f6603c60Sopenharmony_ci} 352f6603c60Sopenharmony_ci 353f6603c60Sopenharmony_ciint FormatVswprintf(const wchar_t *format, ...) 354f6603c60Sopenharmony_ci{ 355f6603c60Sopenharmony_ci va_list args; 356f6603c60Sopenharmony_ci va_start(args, format); 357f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 358f6603c60Sopenharmony_ci int ret = vswprintf(str, sizeof(str)/sizeof(str[0]), format, args); 359f6603c60Sopenharmony_ci fputws(str, stdout); 360f6603c60Sopenharmony_ci va_end(args); 361f6603c60Sopenharmony_ci return ret; 362f6603c60Sopenharmony_ci} 363f6603c60Sopenharmony_ci 364f6603c60Sopenharmony_ci/** 365f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1600 366f6603c60Sopenharmony_ci * @tc.name vswprintf basic function test 367f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 368f6603c60Sopenharmony_ci */ 369f6603c60Sopenharmony_ciHWTEST_F(IoTest, testVswprintf, Function | MediumTest | Level1) 370f6603c60Sopenharmony_ci{ 371f6603c60Sopenharmony_ci int ret = FormatVswprintf(L"%ls has %d words", L"helloworld", 10); 372f6603c60Sopenharmony_ci EXPECT_EQ(ret, 23); 373f6603c60Sopenharmony_ci 374f6603c60Sopenharmony_ci int i; 375f6603c60Sopenharmony_ci wchar_t wBuf[50] = {0}; 376f6603c60Sopenharmony_ci wchar_t str[] = L"helloworld has 10 words"; 377f6603c60Sopenharmony_ci ret = FormatVswscanf(str, L"%ls has %d words", wBuf, &i); 378f6603c60Sopenharmony_ci EXPECT_EQ(ret, 2) << "> vswcanf return fail, errno = " << errno; 379f6603c60Sopenharmony_ci EXPECT_STREQ(wBuf, L"helloworld"); 380f6603c60Sopenharmony_ci EXPECT_EQ(i, 10); 381f6603c60Sopenharmony_ci} 382f6603c60Sopenharmony_ci 383f6603c60Sopenharmony_ci/** 384f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1700 385f6603c60Sopenharmony_ci * @tc.name swprintf basic function test 386f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 387f6603c60Sopenharmony_ci */ 388f6603c60Sopenharmony_ciHWTEST_F(IoTest, testSwprintf, Function | MediumTest | Level1) 389f6603c60Sopenharmony_ci{ 390f6603c60Sopenharmony_ci wchar_t wBuf[50] = {0}; 391f6603c60Sopenharmony_ci int ret = swprintf(wBuf, sizeof(wBuf)/sizeof(wBuf[0]), L"%ls has %d words", L"helloworld", 10); 392f6603c60Sopenharmony_ci EXPECT_EQ(ret, 23); 393f6603c60Sopenharmony_ci EXPECT_STREQ(wBuf, L"helloworld has 10 words"); 394f6603c60Sopenharmony_ci 395f6603c60Sopenharmony_ci wchar_t wStr[50] = {0}; 396f6603c60Sopenharmony_ci int i; 397f6603c60Sopenharmony_ci ret = swscanf(wBuf, L"%ls has %d words", wStr, &i); 398f6603c60Sopenharmony_ci EXPECT_EQ(ret, 2) << "> swscanf return fail, errno = " << errno; 399f6603c60Sopenharmony_ci EXPECT_EQ(i, 10); 400f6603c60Sopenharmony_ci EXPECT_STREQ(wStr, L"helloworld"); 401f6603c60Sopenharmony_ci} 402f6603c60Sopenharmony_ci 403f6603c60Sopenharmony_ci/** 404f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1800 405f6603c60Sopenharmony_ci * @tc.name wprintf basic function test 406f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 407f6603c60Sopenharmony_ci */ 408f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWprintf, Function | MediumTest | Level1) 409f6603c60Sopenharmony_ci{ 410f6603c60Sopenharmony_ci pid_t pid = fork(); 411f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 412f6603c60Sopenharmony_ci if (pid == 0) { // child 413f6603c60Sopenharmony_ci int rt = 0; 414f6603c60Sopenharmony_ci FILE *fp = freopen(IOTEST_TEMPFILE, "w", stdout); 415f6603c60Sopenharmony_ci if (fp == nullptr) { 416f6603c60Sopenharmony_ci LOG("freopen fail, errno = %d", errno); 417f6603c60Sopenharmony_ci rt = 1; 418f6603c60Sopenharmony_ci } 419f6603c60Sopenharmony_ci if (wprintf(L"%ls %d", L"helloworld", 10) != 13) { 420f6603c60Sopenharmony_ci LOG("wprintf fail, errno = %d", errno); 421f6603c60Sopenharmony_ci rt = 1; 422f6603c60Sopenharmony_ci } 423f6603c60Sopenharmony_ci if (fclose(fp) == -1) { 424f6603c60Sopenharmony_ci LOG("fclose fail, errno = %d", errno); 425f6603c60Sopenharmony_ci rt = 1; 426f6603c60Sopenharmony_ci } 427f6603c60Sopenharmony_ci exit(rt); 428f6603c60Sopenharmony_ci } else { // parent 429f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 430f6603c60Sopenharmony_ci 431f6603c60Sopenharmony_ci FILE *fp1 = fopen(IOTEST_TEMPFILE, "r"); 432f6603c60Sopenharmony_ci ASSERT_NE(fp1, nullptr) << "fopen fail, errno = " << errno; 433f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 434f6603c60Sopenharmony_ci wchar_t *gStr = fgetws(str, sizeof(str)/sizeof(str[0]), fp1); 435f6603c60Sopenharmony_ci EXPECT_STREQ(gStr, str) << "fgetws fail, errno = " << errno; 436f6603c60Sopenharmony_ci EXPECT_STREQ(str, L"helloworld 10") << "fgetws fail, errno = " << errno; 437f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp1), -1) << "> fclose fail, errno = " << errno; 438f6603c60Sopenharmony_ci } 439f6603c60Sopenharmony_ci} 440f6603c60Sopenharmony_ci 441f6603c60Sopenharmony_ci/** 442f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_1900 443f6603c60Sopenharmony_ci * @tc.name wscanf basic function test 444f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 445f6603c60Sopenharmony_ci */ 446f6603c60Sopenharmony_ciHWTEST_F(IoTest, testWscanf, Function | MediumTest | Level1) 447f6603c60Sopenharmony_ci{ 448f6603c60Sopenharmony_ci FILE *fp = nullptr; 449f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 450f6603c60Sopenharmony_ci pid_t pid = fork(); 451f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 452f6603c60Sopenharmony_ci if (pid == 0) { // child 453f6603c60Sopenharmony_ci int rt = 0; 454f6603c60Sopenharmony_ci FILE *fp1 = freopen(IOTEST_TEMPFILE, "r", stdin); 455f6603c60Sopenharmony_ci if (fp1 == nullptr) { 456f6603c60Sopenharmony_ci LOG("freopen fail, errno = %d", errno); 457f6603c60Sopenharmony_ci rt = 1; 458f6603c60Sopenharmony_ci } 459f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 460f6603c60Sopenharmony_ci if (wscanf(L"%ls", str) != 1) { 461f6603c60Sopenharmony_ci LOG("wscanf fail, errno = %d", errno); 462f6603c60Sopenharmony_ci rt = 1; 463f6603c60Sopenharmony_ci if (wcscmp(str, L"hello world") != 0) { 464f6603c60Sopenharmony_ci LOG("wscanf fail, errno = %d", errno); 465f6603c60Sopenharmony_ci rt = 1; 466f6603c60Sopenharmony_ci } 467f6603c60Sopenharmony_ci } 468f6603c60Sopenharmony_ci if (fclose(fp1) == -1) { 469f6603c60Sopenharmony_ci LOG("fclose fail, errno = %d", errno); 470f6603c60Sopenharmony_ci } 471f6603c60Sopenharmony_ci exit(rt); 472f6603c60Sopenharmony_ci } else { // parent 473f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 474f6603c60Sopenharmony_ci } 475f6603c60Sopenharmony_ci} 476f6603c60Sopenharmony_ci 477f6603c60Sopenharmony_ciint FormatVwprintf(const wchar_t *format, ...) 478f6603c60Sopenharmony_ci{ 479f6603c60Sopenharmony_ci va_list argPtr; 480f6603c60Sopenharmony_ci va_start(argPtr, format); 481f6603c60Sopenharmony_ci int ret = vwprintf(format, argPtr); 482f6603c60Sopenharmony_ci va_end(argPtr); 483f6603c60Sopenharmony_ci return ret; 484f6603c60Sopenharmony_ci} 485f6603c60Sopenharmony_ci 486f6603c60Sopenharmony_ci/** 487f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_2000 488f6603c60Sopenharmony_ci * @tc.name vwprintf basic function test 489f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 490f6603c60Sopenharmony_ci */ 491f6603c60Sopenharmony_ciHWTEST_F(IoTest, testVwprintf, Function | MediumTest | Level1) 492f6603c60Sopenharmony_ci{ 493f6603c60Sopenharmony_ci pid_t pid = fork(); 494f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 495f6603c60Sopenharmony_ci if (pid == 0) { // child 496f6603c60Sopenharmony_ci int rt = 0; 497f6603c60Sopenharmony_ci FILE *fp = freopen(IOTEST_TEMPFILE, "w", stdout); 498f6603c60Sopenharmony_ci if (fp == nullptr) { 499f6603c60Sopenharmony_ci LOG("freopen fail, errno = %d", errno); 500f6603c60Sopenharmony_ci rt = 1; 501f6603c60Sopenharmony_ci } 502f6603c60Sopenharmony_ci if (FormatVwprintf(L"%ls %d", L"helloworld", 10) != 13) { 503f6603c60Sopenharmony_ci LOG("vwprintf fail, errno = %d", errno); 504f6603c60Sopenharmony_ci rt = 1; 505f6603c60Sopenharmony_ci } 506f6603c60Sopenharmony_ci if (fclose(fp) == -1) { 507f6603c60Sopenharmony_ci LOG("fclose fail, errno = %d", errno); 508f6603c60Sopenharmony_ci rt = 1; 509f6603c60Sopenharmony_ci } 510f6603c60Sopenharmony_ci exit(rt); 511f6603c60Sopenharmony_ci } else { // parent 512f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 513f6603c60Sopenharmony_ci 514f6603c60Sopenharmony_ci FILE *fp1 = fopen(IOTEST_TEMPFILE, "r"); 515f6603c60Sopenharmony_ci ASSERT_NE(fp1, nullptr) << "fopen fail, errno = " << errno; 516f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 517f6603c60Sopenharmony_ci wchar_t *gStr = fgetws(str, sizeof(str)/sizeof(str[0]), fp1); 518f6603c60Sopenharmony_ci EXPECT_STREQ(gStr, str) << "fgetws fail, errno = " << errno; 519f6603c60Sopenharmony_ci EXPECT_STREQ(str, L"helloworld 10") << "fgetws fail, errno = " << errno; 520f6603c60Sopenharmony_ci EXPECT_NE(fclose(fp1), -1) << "> fclose fail, errno = " << errno; 521f6603c60Sopenharmony_ci } 522f6603c60Sopenharmony_ci} 523f6603c60Sopenharmony_ci 524f6603c60Sopenharmony_ciint FormatVwscanf(const wchar_t *format, ...) 525f6603c60Sopenharmony_ci{ 526f6603c60Sopenharmony_ci va_list argPtr; 527f6603c60Sopenharmony_ci va_start(argPtr, format); 528f6603c60Sopenharmony_ci int ret = vwscanf(format, argPtr); 529f6603c60Sopenharmony_ci va_end(argPtr); 530f6603c60Sopenharmony_ci return ret; 531f6603c60Sopenharmony_ci} 532f6603c60Sopenharmony_ci 533f6603c60Sopenharmony_ci/** 534f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_2100 535f6603c60Sopenharmony_ci * @tc.name vwscanf basic function test 536f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 537f6603c60Sopenharmony_ci */ 538f6603c60Sopenharmony_ciHWTEST_F(IoTest, testVwscanf, Function | MediumTest | Level1) 539f6603c60Sopenharmony_ci{ 540f6603c60Sopenharmony_ci FILE *fp = nullptr; 541f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 542f6603c60Sopenharmony_ci pid_t pid = fork(); 543f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 544f6603c60Sopenharmony_ci if (pid == 0) { // child 545f6603c60Sopenharmony_ci int rt = 0; 546f6603c60Sopenharmony_ci FILE *fp1 = freopen(IOTEST_TEMPFILE, "r", stdin); 547f6603c60Sopenharmony_ci if (fp1 == nullptr) { 548f6603c60Sopenharmony_ci LOG("freopen fail, errno = %d", errno); 549f6603c60Sopenharmony_ci rt = 1; 550f6603c60Sopenharmony_ci } 551f6603c60Sopenharmony_ci wchar_t str[50] = {0}; 552f6603c60Sopenharmony_ci if (FormatVwscanf(L"%ls", str) != 1) { 553f6603c60Sopenharmony_ci LOG("vwscanf fail, errno = %d", errno); 554f6603c60Sopenharmony_ci rt = 1; 555f6603c60Sopenharmony_ci if (wcscmp(str, L"hello world") != 0) { 556f6603c60Sopenharmony_ci LOG("vwscanf fail, errno = %d", errno); 557f6603c60Sopenharmony_ci rt = 1; 558f6603c60Sopenharmony_ci } 559f6603c60Sopenharmony_ci } 560f6603c60Sopenharmony_ci if (fclose(fp1) == -1) { 561f6603c60Sopenharmony_ci LOG("fclose fail, errno = %d", errno); 562f6603c60Sopenharmony_ci } 563f6603c60Sopenharmony_ci exit(rt); 564f6603c60Sopenharmony_ci } else { // parent 565f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 566f6603c60Sopenharmony_ci } 567f6603c60Sopenharmony_ci} 568f6603c60Sopenharmony_ci 569f6603c60Sopenharmony_ci/** 570f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_2200 571f6603c60Sopenharmony_ci * @tc.name getwchar basic function test 572f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 573f6603c60Sopenharmony_ci */ 574f6603c60Sopenharmony_ciHWTEST_F(IoTest, testGetwchar, Function | MediumTest | Level1) 575f6603c60Sopenharmony_ci{ 576f6603c60Sopenharmony_ci FILE *fp = nullptr; 577f6603c60Sopenharmony_ci INIT_TEST_FILE(fp); 578f6603c60Sopenharmony_ci pid_t pid = fork(); 579f6603c60Sopenharmony_ci ASSERT_TRUE(pid >= 0) << "======== Fork Error! ========="; 580f6603c60Sopenharmony_ci if (pid == 0) { // child 581f6603c60Sopenharmony_ci int rt = 0; 582f6603c60Sopenharmony_ci FILE *fp1 = freopen(IOTEST_TEMPFILE, "r", stdin); 583f6603c60Sopenharmony_ci if (fp1 == nullptr) { 584f6603c60Sopenharmony_ci LOG("freopen fail, errno = %d", errno); 585f6603c60Sopenharmony_ci rt = 1; 586f6603c60Sopenharmony_ci } 587f6603c60Sopenharmony_ci if (getwchar() != 104) { 588f6603c60Sopenharmony_ci LOG("getwchar fail, errno = %d", errno); 589f6603c60Sopenharmony_ci rt = 1; 590f6603c60Sopenharmony_ci } 591f6603c60Sopenharmony_ci if (fclose(fp1) == -1) { 592f6603c60Sopenharmony_ci LOG("fclose fail, errno = %d", errno); 593f6603c60Sopenharmony_ci rt = 1; 594f6603c60Sopenharmony_ci } 595f6603c60Sopenharmony_ci exit(rt); 596f6603c60Sopenharmony_ci } else { // parent 597f6603c60Sopenharmony_ci WaitProcExitedOK(pid); 598f6603c60Sopenharmony_ci } 599f6603c60Sopenharmony_ci} 600f6603c60Sopenharmony_ci 601f6603c60Sopenharmony_ci/** 602f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_IO_WCHAR_2300 603f6603c60Sopenharmony_ci * @tc.name btowc basic function test 604f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 605f6603c60Sopenharmony_ci */ 606f6603c60Sopenharmony_ciHWTEST_F(IoTest, testBtowc, Function | MediumTest | Level1) 607f6603c60Sopenharmony_ci{ 608f6603c60Sopenharmony_ci EXPECT_EQ(btowc('6'), L'6'); 609f6603c60Sopenharmony_ci 610f6603c60Sopenharmony_ci EXPECT_EQ(btowc('A'), L'A'); 611f6603c60Sopenharmony_ci 612f6603c60Sopenharmony_ci EXPECT_EQ(btowc('&'), L'&'); 613f6603c60Sopenharmony_ci 614f6603c60Sopenharmony_ci EXPECT_EQ(btowc(EOF), WEOF); 615f6603c60Sopenharmony_ci}