b48c72982cdb68450bd5d86323d186e2c263fc7b
[scilab.git] / scilab / modules / fileio / tests / unit_tests / mgetl.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2010 - DIGITEO - Allan CORNET
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // =============================================================================
9 // Unitary tests for mgetl function
10 //==============================================================================
11
12 function [filename, txt] = create_file(arg)
13     if isempty(arg) then
14         txt = [];
15         filename = tempname();
16     elseif typeof(arg) == "string" then
17         txt = arg;
18         filename = tempname();
19         if arg <> [] then
20             mputl(arg, filename);
21         end
22     elseif typeof(arg) == "constant" then
23         txt = "";
24         for i=1:size(arg, '*')
25             txt = [txt; strcat(repmat(ascii(96+i), 1, arg(i)))];
26         end
27         filename = tempname();
28         mputl(txt, filename);
29     end
30 end
31
32 function fd = open_create_file(txt)
33     fd = mopen(create_file(txt), "rt");
34 endfunction
35
36 function check_mgetl(f, expected, varargin)
37     txt = mgetl(f, varargin(:));
38     assert_checkequal(txt, expected);
39 endfunction
40
41
42 ref = ["1 Scilab"; ..
43         "2 Puffin"; ..
44         "3 "; ..
45         "4 Puffin"; ..
46         "5 Scilab"];
47
48 // test simple
49 check_mgetl(create_file("a"), "a");
50 check_mgetl(create_file(ref), ref);
51
52 // test file argument: file descriptor
53 fd = open_create_file(ref);
54 check_mgetl(fd, [], 0)
55 mclose(fd);
56
57 // test line count argument: read all lines
58 check_mgetl(create_file(ref), ref, -1);
59 check_mgetl(create_file(ref), ref, -10);
60
61 // test line count argument: read zero lines
62 check_mgetl(create_file(ref), [], 0);
63
64 // test line count argument: read some lines
65 check_mgetl(create_file(ref), ref(1), 1);
66 check_mgetl(create_file(ref), ref(1:2), 2);
67 check_mgetl(create_file(ref), ref, 100);
68
69 // read all lines in several calls
70 fd = open_create_file(ref);
71 check_mgetl(fd, ref(1), 1);
72 check_mgetl(fd, ref(2:3), 2);
73 check_mgetl(fd, ref(4:5), 3);
74 mclose(fd);
75
76 // test empty file
77 check_mgetl(create_file([]), []);
78
79 // test file empty lines
80 filename = tempname();
81 fd = mopen(filename, "wb");
82 mfprintf(fd, ascii(10));
83 mclose(fd);
84 check_mgetl(filename, "");
85 txt = mgetl("SCI/modules/fileio/tests/unit_tests/text.txt");
86 assert_checkequal(size(txt), [6 1]);
87 assert_checkequal(txt(6), "");
88
89 // test file with different EOL (end of line)
90 ref_EOL = ["line with CR LF"; ..
91     "line with LF"; ..
92     "line with no EOL"];
93 filename = tempname();
94 fd = mopen(filename, "wb");
95 mfprintf(fd, "%s" + ascii(13) + ascii(10), ref_EOL(1));
96 mfprintf(fd, "%s" + ascii(10), ref_EOL(2));
97 mfprintf(fd, "%s", ref_EOL(3));
98 mclose(fd);
99 check_mgetl(filename, ref_EOL);
100
101
102 // test file with BOM
103 txt = mgetl("SCI/modules/fileio/tests/unit_tests/text-UTF8BOM.txt");
104 assert_checkequal(size(txt), [13 1]);
105 r = "Scilab is a numerical computational package developed since 1990 by researchers from the INRIA and the Ecole nationale des ponts et chaussees (ENPC). It is, since the creation of the Scilab consortium in May 2003, developed and maintained by the INRIA.";
106 assert_checkequal(txt(1), r);
107
108 // test when line size exceeeds reading buffer size (currently 4096 characters per line)
109 [filename, ref2] = create_file([5000, 5000]);
110 check_mgetl(filename, ref2);
111 [filename, ref2] = create_file([100, 5000, 15000]);
112 check_mgetl(filename, ref2);
113 [filename, ref2] = create_file([4095, 8191, 16383]);
114 check_mgetl(filename, ref2);
115 [filename, ref2] = create_file([4096, 8192, 16384]);
116 check_mgetl(filename, ref2);
117
118 // test error management
119 ierr = execstr("mgetl(1000, 1)", "errcatch");
120 assert_checkequal(ierr, 999);
121 ierr = execstr("mgetl(TMPDIR + ""notfound.txt"",1)", "errcatch");
122 assert_checkequal(ierr, 999);
123
124
125