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 <locale.h>
17 #include <stdlib.h>
18 #include <stdio.h>
19 #include <time.h>
20 #include <stdio.h>
21 #include "functionalext.h"
22
23 #define TEST_LC_COUNT 7
24 #define TEST_LC_LENGTH 18
25 #define TEST_LC_OFFSET 6
26 #define PARAM_ERROR_VALUE_1 13
27 #define PARAM_ERROR_VALUE_2 (-1)
28
29 static const int LcArry[TEST_LC_COUNT] = {
30 LC_PAPER,
31 LC_NAME,
32 LC_ADDRESS,
33 LC_TELEPHONE,
34 LC_MEASUREMENT,
35 LC_IDENTIFICATION,
36 LC_ALL
37 };
38
39 static const char envforlocale[][TEST_LC_LENGTH] = {
40 "LC_PAPER",
41 "LC_NAME",
42 "LC_ADDRESS",
43 "LC_TELEPHONE",
44 "LC_MEASUREMENT",
45 "LC_IDENTIFICATION",
46 };
47
48 /**
49 * @tc.name : setlocaletest_0100
50 * @tc.desc : Determines whether setlocale returns the default value C
51 * when the character set passed in for different data types is NULL
52 * @tc.level : Level 0
53 */
setlocale_0100(void)54 void setlocale_0100(void)
55 {
56 const int num = sizeof(LcArry) / sizeof(LcArry[0]);
57 for (int i = 0; i < num; i++) {
58 const char *locale = setlocale(LcArry[i], NULL);
59 if (!locale) {
60 t_error("[%s] failed\n", "setlocale_0100");
61 return;
62 }
63 EXPECT_EQ("SetlocaleTest_0100", strcmp(locale, "C"), 0);
64 }
65 }
66
67 /**
68 * @tc.name : setlocaletest_0200
69 * @tc.desc : Determines whether setlocale returns the default value "C"
70 * when the default value "C" is passed in for different LC data types
71 * @tc.level : Level 0
72 */
setlocale_0200(void)73 void setlocale_0200(void)
74 {
75 const int num = sizeof(LcArry) / sizeof(LcArry[0]);
76 for (int i = 0; i < num; i++) {
77 setenv(envforlocale[i], "en-US", 1);
78 const char *locale = setlocale(LcArry[i], "C");
79 if (!locale) {
80 t_error("[%s] failed\n", "setlocale_0200");
81 return;
82 }
83 EXPECT_STREQ("SetlocaleTest_0200", locale, "C");
84 }
85 }
86
87 /**
88 * @tc.name : setlocaletest_0300
89 * @tc.desc : Asserts whether the result returned is null when an exception LC data type is passed in
90 * @tc.level : Level 2
91 */
setlocale_0300(void)92 void setlocale_0300(void)
93 {
94 const char *locale1 = setlocale(PARAM_ERROR_VALUE_1, NULL);
95 if (locale1) {
96 t_error("[%s] failed\n", "SetlocaleTest_0300");
97 }
98
99 const char *locale2 = setlocale(PARAM_ERROR_VALUE_2, NULL);
100 if (locale2) {
101 t_error("[%s] failed\n", "SetlocaleTest_0300");
102 }
103 }
104
105 /**
106 * @tc.name : setlocaletest_0400
107 * @tc.desc : Determines whether setlocale returns da_DK
108 * when the environment variable is set to da_DK for different LC data types
109 * @tc.level : Level 0
110 */
setlocale_0400(void)111 void setlocale_0400(void)
112 {
113 for (unsigned int i = 0; i < sizeof(envforlocale) / sizeof(envforlocale[0]); i++) {
114 setenv(envforlocale[i], "da_DK", 1);
115 const char *locale = setlocale(LcArry[i], "");
116 if (locale) {
117 t_error("[%s] failed\n", "setlocale_0400");
118 return;
119 }
120 }
121 }
122
123 /**
124 * @tc.name : setlocaletest_0500
125 * @tc.desc : Determines whether setlocale returns NULL
126 * when the character set passed in for invalid LC data types is set to en_ZA
127 * @tc.level : Level 0
128 */
setlocale_0500(void)129 void setlocale_0500(void)
130 {
131 char *rev = setlocale(LC_ALL, "C");
132 if (!rev) {
133 t_error("[%s] failed\n", "setlocale_0500");
134 return;
135 }
136 for (unsigned int i = 0; i < sizeof(LcArry) / sizeof(LcArry[0]); i++) {
137 const char *locale = setlocale(LcArry[i], "en_ZA");
138 if (locale) {
139 t_error("[%s] failed\n", "setlocale_0500");
140 return;
141 }
142 }
143 }
144
145 /**
146 * @tc.name : setlocaletest_0600
147 * @tc.desc : Verify that the environment variable of different LC data types is set to ar_QA.
148 * When the setlocale function is used to pass LC_ALL, the corresponding field returned by the function is ar_QA
149 * @tc.level : Level 0
150 */
setlocale_0600(void)151 void setlocale_0600(void)
152 {
153 for (unsigned int i = 0; i < sizeof(envforlocale) / sizeof(envforlocale[0]); i++) {
154 int count = 0;
155 char *vec[LC_ALL];
156 const char *flag = ";";
157
158 setenv(envforlocale[i], "ar_QA", 1);
159 char *locale = setlocale(LC_ALL, "");
160 if (locale) {
161 t_error("[%s] failed\n", "setlocale_0600");
162 return;
163 }
164 }
165 }
166
setlocale_0700(void)167 void setlocale_0700(void)
168 {
169 char *str = setlocale(LC_ALL, "sss123456");
170 if (str) {
171 t_error("setlocale_0700 failed [%s] != NULL\n", str);
172 }
173 }
174
main(void)175 int main(void)
176 {
177 setlocale_0100();
178 setlocale_0200();
179 setlocale_0300();
180 setlocale_0400();
181 setlocale_0500();
182 setlocale_0600();
183 setlocale_0700();
184
185 return t_status;
186 }
187