1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 *    conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 *    of conditions and the following disclaimer in the documentation and/or other materials
13 *    provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 *    to endorse or promote products derived from this software without specific prior written
17 *    permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include "ohos_types.h"
33#include "posix_test.h"
34#include "los_config.h"
35#include "kernel_test.h"
36#include <ctype.h>
37#include <stdlib.h>
38#include <string.h>
39#include "log.h"
40
41/* *
42 * @tc.desc      : register a test suite, this suite is used to test basic flow and interface dependency
43 * @param        : subsystem name is utils
44 * @param        : module name is utilsFile
45 * @param        : test suit name is CmsisTaskFuncTestSuite
46 */
47LITE_TEST_SUIT(Posix, Posixtimer, PosixStringStrchrTest);
48
49/* *
50 * @tc.setup     : setup for all testcases
51 * @return       : setup result, TRUE is success, FALSE is fail
52 */
53static BOOL PosixStringStrchrTestSetUp(void)
54{
55    return TRUE;
56}
57
58/* *
59 * @tc.teardown  : teardown for all testcases
60 * @return       : teardown result, TRUE is success, FALSE is fail
61 */
62static BOOL PosixStringStrchrTestTearDown(void)
63{
64    LOG("+-------------------------------------------+\n");
65    return TRUE;
66}
67
68/* *
69 * @tc.number    : TEST_STRING_STRCHR_001
70 * @tc.name      : find the first occurrence of a character in a string
71 * @tc.desc      : [C- SOFTWARE -0200]
72 */
73LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr001, Function | MediumTest | Level1)
74{
75    char src[] = "hello !! world";
76    char *ret = strchr(src, '!');
77    if (strcmp(ret, "!! world") == 0) {
78        LOG("[DEMO] posix string test case 1:strchr(!) %s ok.\n", src);
79    } else {
80        LOG("[DEMO] posix string test case 1:strchr(!) %s fail.\n", src);
81    }
82    ICUNIT_ASSERT_STRING_EQUAL(ret, "!! world", 0);
83    return 0;
84}
85
86/* *
87 * @tc.number    : TEST_STRING_STRCHR_002
88 * @tc.name      : find the first occurrence of a character in a string
89 * @tc.desc      : [C- SOFTWARE -0200]
90 */
91LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr002, Function | MediumTest | Level1)
92{
93    char src[] = "hello !! world";
94    char *ret = strchr(src, 'l');
95    if (strcmp(ret, "llo !! world") == 0) {
96        LOG("[DEMO] posix string test case 2:strchr(l) %s ok.\n", src);
97    } else {
98        LOG("[DEMO] posix string test case 2:strchr(l) %s fail.\n", src);
99    }
100    ICUNIT_ASSERT_STRING_EQUAL(ret, "llo !! world", 0);
101    return 0;
102}
103
104/* *
105 * @tc.number    : TEST_STRING_STRCHR_003
106 * @tc.name      : find the first occurrence of a character in a string
107 * @tc.desc      : [C- SOFTWARE -0200]
108 */
109LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr003, Function | MediumTest | Level1)
110{
111    char src[] = "hello !! world";
112    char *ret = strchr(src, '\0');
113    if (ret != NULL) {
114        LOG("[DEMO] posix string test case 3:strchr(\'\\0\') %s ok.\n", src);
115    } else {
116        LOG("[DEMO] posix string test case 3:strchr(\'\\0\') %s fail.\n", src);
117    }
118    ICUNIT_ASSERT_NOT_EQUAL(ret, NULL, 0);
119    return 0;
120}
121
122/* *
123 * @tc.number    : TEST_STRING_STRCHR_004
124 * @tc.name      : find the first occurrence of a character in a string
125 * @tc.desc      : [C- SOFTWARE -0200]
126 */
127LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr004, Function | MediumTest | Level1)
128{
129    char src[] = "hello !! world";
130    char *ret = strchr(src, '?');
131    if (ret == NULL) {
132        LOG("[DEMO] posix string test case 4(except):strchr(?) %s ok.\n", src);
133    } else {
134        LOG("[DEMO] posix string test case 4(except):strchr(?) %s fail.\n", src);
135    }
136    ICUNIT_ASSERT_EQUAL(ret, NULL, 0);
137    return 0;
138}
139
140/* *
141 * @tc.number    : TEST_STRING_STRCHR_005
142 * @tc.name      : find the first occurrence of a character in a string
143 * @tc.desc      : [C- SOFTWARE -0200]
144 */
145LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr005, Function | MediumTest | Level1)
146{
147    char src[] = "hello !! world";
148    char *ret = strchr(src, 'm');
149    if (ret == NULL) {
150        LOG("[DEMO] posix string test case 5(except):strchr(m) %s ok.\n", src);
151    } else {
152        LOG("[DEMO] posix string test case 5(except):strchr(m) %s fail.\n", src);
153    }
154    ICUNIT_ASSERT_EQUAL(ret, NULL, 0);
155    return 0;
156}
157
158/* *
159 * @tc.number    : TEST_STRING_STRCHR_005
160 * @tc.name      : find the first occurrence of a character in a string
161 * @tc.desc      : [C- SOFTWARE -0200]
162 */
163LITE_TEST_CASE(PosixStringStrchrTest, testStringStrchr006, Function | MediumTest | Level1)
164{
165    char src[] = "hello !! world";
166    char *ret = strchr(src, 0);
167    if (ret != NULL) {
168        LOG("[DEMO] posix string test case 6(except):strchr(0) %s ok.\n", src);
169    } else {
170        LOG("[DEMO] posix string test case 6(except):strchr(0) %s fail.\n", src);
171    }
172    ICUNIT_ASSERT_NOT_EQUAL(ret, NULL, 0);
173    return 0;
174}
175
176RUN_TEST_SUITE(PosixStringStrchrTest);
177
178void PosixStringStrchrTest()
179{
180    LOG("begin PosixStringStrchrTest....");
181    RUN_ONE_TESTCASE(testStringStrchr001);
182    RUN_ONE_TESTCASE(testStringStrchr002);
183    RUN_ONE_TESTCASE(testStringStrchr003);
184    RUN_ONE_TESTCASE(testStringStrchr004);
185    RUN_ONE_TESTCASE(testStringStrchr005);
186    RUN_ONE_TESTCASE(testStringStrchr006);
187
188    return;
189}