1/** 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include <langinfo.h> 17#include <locale.h> 18#include <stdlib.h> 19#include "functionalext.h" 20 21#define TIME_ERROR_INFO 0x20034 22#define MESSAGES_ERROR_INFO 0x50004 23 24/** 25 * @tc.name : langinfo_0100 26 * @tc.desc : Asserts whether the nl_langinfo function succeeds in reading data 27 * from the MUSL_LOCPATH environment variable set to zh_CN. Utf-8(There is no file in "/etc/locale" now) 28 * @tc.level : Level 0 29 */ 30void langinfo_0100(void) 31{ 32 setenv("MUSL_LOCPATH", "/etc/locale", 1); 33 char *lo = setlocale(LC_TIME, ""); 34 if (!lo) { 35 EXPECT_PTRNE("nl_langinfo_0100", lo, NULL); 36 return; 37 } 38 lo = setlocale(LC_TIME, "zh_CN.UTF-8"); 39 char *ptr = nl_langinfo(DAY_2); 40 EXPECT_STREQ("nl_langinfo_0100", ptr, "Monday"); 41} 42 43/** 44 * @tc.name : nl_langinfo_0200 45 * @tc.desc : Assert that the nl_langinfo function does not read data from the default zh_CN.UTF-8 file 46 * when the locale is reset to the default environment 47 * @tc.level : Level 0 48 */ 49void nl_langinfo_0200() 50{ 51 char *lo = setlocale(LC_TIME, ""); 52 if (!lo) { 53 EXPECT_PTRNE("nl_langinfo_0200", lo, NULL); 54 return; 55 } 56 char *ptr = nl_langinfo(DAY_2); 57 if (ptr) { 58 EXPECT_STRNE("nl_langinfo_0200", ptr, "lm星期一"); 59 } 60} 61 62/** 63 * @tc.name : nl_langinfo_0300 64 * @tc.desc : Assert whether the LC_TIME data type is set to zh_CN.UTF-8 through setlocale, 65 * and whether the return value is empty when the abnormal time data is passed to the nl_langinfo function. 66 * MUSL_LOCPATH is `invalid` in system environment so it should be changed to `invalid` check 67 * @tc.level : Level 2 68 */ 69void nl_langinfo_0300() 70{ 71 char *lo = setlocale(LC_TIME, ""); 72 if (!lo) { 73 EXPECT_PTRNE("nl_langinfo_0300", lo, NULL); 74 return; 75 } 76 lo = setlocale(LC_TIME, "zh_CN.UTF-8"); 77 char *ptr = nl_langinfo(TIME_ERROR_INFO); 78 EXPECT_STREQ("nl_langinfo_0300", ptr, ""); 79} 80 81/** 82 * @tc.name : nl_langinfo_0400 83 * @tc.desc : Assert whether the data type of LC_MESSAGES is set to zh_CN.UTF-8 through setlocale, 84 * and whether the return value is empty when the abnormal time data is passed to the nl_langinfo function 85 * MUSL_LOCPATH is `invalid` in system environment so it should be changed to `invalid` check 86 * @tc.level : Level 2 87 */ 88void nl_langinfo_0400() 89{ 90 setlocale(LC_MESSAGES, "zh_CN.UTF-8"); 91 char *ptr = nl_langinfo(MESSAGES_ERROR_INFO); 92 EXPECT_STREQ("nl_langinfo_0400", ptr, ""); 93} 94 95/** 96 * @tc.name : nl_langinfo_0500 97 * @tc.desc : Assert whether the return value result is UTF-8 or ASCII 98 * when the function nl_langinfo passes in the CODESET parameter 99 * @tc.level : Level 2 100 */ 101void nl_langinfo_0500() 102{ 103 char *lo = setlocale(LC_CTYPE, ""); 104 if (!lo) { 105 EXPECT_PTRNE("nl_langinfo_0500", lo, NULL); 106 return; 107 } 108 char *ptr = nl_langinfo(CODESET); 109 EXPECT_STREQ("nl_langinfo_0500", ptr, "UTF-8"); 110 111 lo = setlocale(LC_TIME, ""); 112 if (!lo) { 113 EXPECT_PTRNE("nl_langinfo_0500", lo, NULL); 114 return; 115 } 116 ptr = nl_langinfo(CODESET); 117 EXPECT_STREQ("nl_langinfo_0500", ptr, "UTF-8"); 118} 119 120/** 121 * @tc.name : nl_langinfo_0600 122 * @tc.desc : Assert whether the return value result is not "C.UTF-8" 123 * when the function nl_langinfo passes in the "65535" parameter 124 * @tc.level : Level 2 125 */ 126void nl_langinfo_0600() 127{ 128 char *lo = setlocale(LC_ALL, ""); 129 if (!lo) { 130 EXPECT_PTRNE("nl_langinfo_0600", lo, NULL); 131 return; 132 } 133 char *ptr = nl_langinfo(RADIXCHAR - 1); 134 EXPECT_STREQ("nl_langinfo_0600", ptr, "C.UTF-8"); 135} 136 137/** 138 * @tc.name : nl_langinfo_0700 139 * @tc.desc : Assert whether the return value result is not "" 140 * when the function nl_langinfo passes in the THOUSEP parameter 141 * @tc.level : Level 2 142 */ 143void nl_langinfo_0700() 144{ 145 char *lo = setlocale(LC_ALL, ""); 146 if (!lo) { 147 EXPECT_PTRNE("nl_langinfo_0700", lo, NULL); 148 return; 149 } 150 char *ptr = nl_langinfo(THOUSEP); 151 EXPECT_STREQ("nl_langinfo_0700", ptr, ""); 152} 153 154/** 155 * @tc.name : nl_langinfo_0800 156 * @tc.desc : Assert whether the return value result is not "" 157 * when the function nl_langinfo passes in the THOUSEP * LC_MONETARY parameter 158 * @tc.level : Level 2 159 */ 160void nl_langinfo_0800() 161{ 162 char *lo = setlocale(LC_ALL, ""); 163 if (!lo) { 164 EXPECT_PTRNE("nl_langinfo_0800", lo, NULL); 165 return; 166 } 167 char *ptr = nl_langinfo(THOUSEP * LC_MONETARY); 168 EXPECT_STREQ("nl_langinfo_0800", ptr, ""); 169} 170 171/** 172 * @tc.name : nl_langinfo_0900 173 * @tc.desc : Assert whether the return value result is not "" 174 * when the function nl_langinfo passes in the RADIXCHAR * LC_MONETARY parameter 175 * @tc.level : Level 2 176 */ 177void nl_langinfo_0900() 178{ 179 char *lo = setlocale(LC_ALL, ""); 180 if (!lo) { 181 EXPECT_PTRNE("nl_langinfo_0900", lo, NULL); 182 return; 183 } 184 char *ptr = nl_langinfo(RADIXCHAR * LC_MONETARY); 185 EXPECT_STREQ("nl_langinfo_0900", ptr, ""); 186} 187 188int main(void) 189{ 190 if (unsetenv("LANG") != 0) { 191 perror("unsetenv failed"); 192 return t_status; 193 } 194 langinfo_0100(); 195 nl_langinfo_0200(); 196 nl_langinfo_0300(); 197 nl_langinfo_0400(); 198 nl_langinfo_0500(); 199 nl_langinfo_0600(); 200 nl_langinfo_0700(); 201 nl_langinfo_0800(); 202 nl_langinfo_0900(); 203 return t_status; 204}