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 <fcntl.h>
17#include "functionalext.h"
18#include "filepath_util.h"
19
20/**
21 * @tc.name      : getline_0100
22 * @tc.desc      : Verify that a row of data can be read (parameters are valid).
23 * @tc.level     : Level 0
24 */
25void getline_0100(void)
26{
27    char *wrstring = "helloworld";
28    char *line = NULL;
29    size_t len = 0;
30    char ptr[PATH_MAX] = {0};
31    FILE_ABSOLUTE_PATH(STR_TEST_TXT, ptr);
32    FILE *fp = fopen(ptr, "w+");
33    EXPECT_PTRNE("getline_0100", fp, NULL);
34    fwrite(wrstring, sizeof(char), strlen(wrstring), fp);
35    fseek(fp, 0, SEEK_SET);
36
37    ssize_t read = getline(&line, &len, fp);
38    EXPECT_EQ("getline_0100", read, 10);
39    EXPECT_STREQ("getline_0100", line, "helloworld");
40
41    fclose(fp);
42    remove(ptr);
43}
44
45/**
46 * @tc.name      : getline_0200
47 * @tc.desc      : Validation cannot read a row of data (parameter is NULL).
48 * @tc.level     : Level 2
49 */
50void getline_0200(void)
51{
52    size_t len = 0;
53    char ptr[PATH_MAX] = {0};
54    FILE_ABSOLUTE_PATH(STR_FILE_TXT, ptr);
55    FILE *fp = fopen(ptr, "w+");
56    EXPECT_PTRNE("getline_0100", fp, NULL);
57
58    ssize_t read = getline(NULL, &len, fp);
59    EXPECT_EQ("getline_0200", read, -1);
60
61    fclose(fp);
62    remove(ptr);
63}
64
65/**
66 * @tc.name      : getline_0300
67 * @tc.desc      : TValidation cannot read a row of data (parameter is 0).
68 * @tc.level     : Level 2
69 */
70void getline_0300(void)
71{
72    char *line = NULL;
73    char ptr[PATH_MAX] = {0};
74    FILE_ABSOLUTE_PATH(STR_FILE_TXT, ptr);
75    FILE *fp = fopen(ptr, "w+");
76    EXPECT_PTRNE("getline_0100", fp, NULL);
77
78    ssize_t read = getline(&line, 0, fp);
79    EXPECT_EQ("getline_0300", read, -1);
80    fclose(fp);
81    remove(ptr);
82}
83
84int main(int argc, char *argv[])
85{
86    getline_0100();
87    getline_0200();
88    getline_0300();
89    return t_status;
90}