OSDN Git Service

Add the alternative functions of _fstat() and _wstat() for the bug https://connect...
[winmerge-jp/winmerge-jp.git] / Testing / GoogleTest / diffutils / mystat_test.cpp
1 #include <gtest/gtest.h>
2 #include <sys/stat.h>
3 #include "Environment.h"
4 #include "paths.h"
5 #include "diff.h"
6 #include <Windows.h>
7
8 TEST(diffutils, stat)
9 {
10         struct _stat64 buf, buf2, buf3, buf4, buf5;
11         String filename  = paths::ConcatPath(env::GetProgPath(), _T("../TestData/_tmp_test.txt"));
12         String filename2 = paths::ConcatPath(env::GetProgPath(), _T("../TestData/LeftAndRight.WinMerge"));
13         int fd;
14         EXPECT_EQ(0, _tsopen_s(&fd, filename.c_str(), _O_RDWR | _O_CREAT, _SH_DENYNO, _S_IREAD | _S_IWRITE));
15         _write(fd, "0123456789", 10);
16         time_t t = time(&t);
17
18         EXPECT_EQ(0, myfstat(fd, &buf));
19         EXPECT_EQ(buf.st_size, 10);
20         EXPECT_EQ(t, buf.st_mtime);
21         EXPECT_NE(0, buf.st_mode & _S_IFREG);
22         EXPECT_NE(0, buf.st_mode & _S_IREAD);
23         EXPECT_NE(0, buf.st_mode & _S_IWRITE);
24         _close(fd);
25
26         mywstat(filename.c_str(), &buf2);
27         EXPECT_EQ(buf2.st_size, 10);
28         EXPECT_EQ(t, buf2.st_mtime);
29         EXPECT_NE(0, buf2.st_mode & _S_IFREG);
30         EXPECT_NE(0, buf2.st_mode & _S_IREAD);
31         EXPECT_NE(0, buf2.st_mode & _S_IWRITE);
32         _tremove(filename.c_str());
33
34         int fds[2];
35         char data[256];
36         EXPECT_EQ(0, _pipe(fds, 256, O_BINARY));
37         _write(fds[1], "0123456789", 10);
38         EXPECT_EQ(0, myfstat(fds[0], &buf3));
39         EXPECT_EQ(10, buf3.st_size);
40         EXPECT_NE(0, buf3.st_mode & _S_IFIFO);
41         _read(fds[0], data, sizeof(data));
42         _close(fds[0]);
43         _close(fds[1]);
44
45         _tsopen_s(&fd, _T("CON"), _O_TEXT, _SH_DENYNO, _S_IWRITE);
46         EXPECT_EQ(0, myfstat(fd, &buf4));
47         EXPECT_NE(0, buf4.st_mode & _S_IFCHR);
48         _close(fd);
49
50         _tsopen_s(&fd, _T("NUL"), _O_TEXT, _SH_DENYNO, _S_IWRITE);
51         EXPECT_EQ(0, myfstat(fd, &buf5));
52         EXPECT_NE(0, buf5.st_mode & _S_IFCHR);
53         _close(fd);
54
55         //EXPECT_EQ(-1, myfstat(999, &buf));
56         EXPECT_EQ(-1, myfstat(1, NULL));
57         EXPECT_EQ(-1, mywstat(L"aaaa", NULL));
58         EXPECT_EQ(-1, mywstat(L"aaaa", &buf2));
59         EXPECT_EQ(-1, mywstat(filename2.c_str(), NULL));
60
61         EXPECT_EQ(0, mywstat(L"CON", &buf2));
62         
63 }