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 <stdio.h>
17#include <wchar.h>
18#include "test.h"
19
20#define BUFF_SIZE (20)
21#define RESULT_VAL (2)
22
23/**
24 * @tc.name      : swscanf_0100
25 * @tc.desc      : Reads data from the wide string ws and stores them according to parameter format
26 * @tc.level     : Level 0
27 */
28void swscanf_0100(void)
29{
30    wchar_t wstr[] = L"swscanf 123";
31    wchar_t tmp[BUFF_SIZE];
32    int i;
33    int result = swscanf(wstr, L"%ls %d", tmp, &i);
34    if (result == EOF) {
35        t_error("%s swscanf failed\n", __func__);
36        return;
37    }
38
39    if (i != 123) {
40        t_error("%s i = %d is not want 123\n", __func__, i);
41    }
42    if (wcscmp(tmp, L"swscanf")) {
43        t_error("%s wide string is %s not swscanf\n", __func__, tmp);
44    }
45}
46
47/**
48 * @tc.name      : swscanf_0200
49 * @tc.desc      : Different formatted data
50 * @tc.level     : Level 1
51 */
52void swscanf_0200(void)
53{
54    wchar_t wstr[] = L"swscanf 123";
55    wchar_t tmp1[BUFF_SIZE];
56    wchar_t tmp2[BUFF_SIZE];
57    int i;
58    int result = swscanf(wstr, L"%ls %ls", tmp1, tmp2);
59    if (result == EOF) {
60        t_error("%s swscanf failed\n", __func__);
61        return;
62    }
63    if (wcscmp(tmp1, L"swscanf")) {
64        t_error("%s tmp1 = %s is not want swscanf\n", __func__, tmp1);
65    }
66    if (wcscmp(tmp2, L"123")) {
67        t_error("%s tmp2 = %s is not want 123\n", __func__, tmp2);
68    }
69}
70
71/**
72 * @tc.name      : swscanf_0300
73 * @tc.desc      : Formatting exception
74 * @tc.level     : Level 2
75 */
76void swscanf_0300(void)
77{
78    wchar_t wstr[] = L"swscanf 123";
79    int i, j;
80    int result = swscanf(wstr, L"%d %d", &i, &j);
81    if (result >= RESULT_VAL) {
82        t_error("%s swscanf expect failed\n", __func__);
83    }
84}
85
86int main(int argc, char *argv[])
87{
88    swscanf_0100();
89    swscanf_0200();
90    swscanf_0300();
91    return t_status;
92}