OSDN Git Service

48c3d6947626e06f2718d2604d19c238ff20ac1e
[simplecms/utakata.git] / src / test / file_reader_test.cpp
1 #include <cstdio>
2 #include <gtest/gtest.h>
3 #include "src/file_reader.h"
4 #include "src/common/scoped_ptr.h"
5
6 namespace reader = utakata::reader;
7
8 class FileReaderTest : public ::testing::Test {
9  protected:
10   virtual void SetUp() {
11     FILE* f = fopen("test.txt", "w");
12     fprintf(f, "%s", "hoge");
13     fclose(f);
14   }
15
16 };
17
18 TEST_F(FileReaderTest, NormalUsega) {
19   // FileReaderを用いた読み出しを行う。
20   reader::FileReader reader("test.txt");
21
22   EXPECT_EQ(reader.GetSize(), 4);
23
24   EXPECT_EQ(reader.Read(), 'h');
25   EXPECT_EQ(reader.GetPos(), 1);
26
27   EXPECT_EQ(reader.Peek(), 'o');
28   EXPECT_EQ(reader.Read(), 'o');
29   std::vector<unsigned char> t = reader.Read(2);
30   EXPECT_EQ(t[0], 'g');
31   EXPECT_EQ(t[1], 'e');
32
33   EXPECT_EQ(reader.GetPos(), 4);
34   reader.Begin();
35   EXPECT_EQ(reader.GetPos(), 0);
36
37   EXPECT_TRUE(reader.Seek(1, reader::kForward));
38   EXPECT_EQ(reader.Read(), 'o');
39
40   size_t seeksize = 0;
41   EXPECT_TRUE(reader.Seek(1, reader::kBackward, &seeksize));
42   EXPECT_EQ(seeksize, 1);
43   EXPECT_EQ(reader.Read(), 'o');
44
45   t = reader.Read(2);
46   EXPECT_EQ(t[0], 'g');
47   EXPECT_EQ(t[1], 'e');
48   EXPECT_TRUE(reader.IsEof());
49
50   // すでに末尾であるのに進もうとすると例外が発生する。
51   EXPECT_THROW(reader.Read(), reader::EndOfDeviceException);
52 }
53
54 TEST_F(FileReaderTest, OpenAndClose) {
55   reader::FileReader reader("test.txt");
56
57   EXPECT_EQ(reader.GetSize(), 4);
58
59   EXPECT_EQ(reader.Read(), 'h');
60   EXPECT_EQ(reader.GetPos(), 1);
61
62   EXPECT_EQ(reader.Peek(), 'o');
63   EXPECT_EQ(reader.Read(), 'o');
64   std::vector<unsigned char> t = reader.Read(2);
65   EXPECT_EQ(t[0], 'g');
66   EXPECT_EQ(t[1], 'e');
67
68   EXPECT_EQ(reader.GetPos(), 4);
69
70   reader.Close();
71
72   EXPECT_THROW(reader.Read(), reader::IOException);
73   reader.Open();
74
75   EXPECT_TRUE(reader.Seek(1, reader::kForward));
76   EXPECT_EQ(reader.Read(), 'o');
77
78   size_t seeksize = 0;
79   EXPECT_TRUE(reader.Seek(1, reader::kBackward, &seeksize));
80   EXPECT_EQ(seeksize, 1);
81   EXPECT_EQ(reader.Read(), 'o');
82
83   t = reader.Read(2);
84   EXPECT_EQ(t[0], 'g');
85   EXPECT_EQ(t[1], 'e');
86   EXPECT_TRUE(reader.IsEof());
87
88   // すでに末尾であるのに進もうとすると例外が発生する。
89   EXPECT_THROW(reader.Read(), reader::EndOfDeviceException);
90 }
91
92 int main(int argc, char** argv)
93 {
94   testing::InitGoogleTest(&argc, argv);
95
96   return RUN_ALL_TESTS();
97 }