TEST(TestFile, Write) { XFILE::CFile *file; const char str[] = "TestFile.Write test string\n"; char buf[30]; memset(&buf, 0, sizeof(buf)); ASSERT_TRUE((file = XBMC_CREATETEMPFILE("")) != NULL); file->Close(); ASSERT_TRUE(file->OpenForWrite(XBMC_TEMPFILEPATH(file), true)); EXPECT_EQ((int)sizeof(str), file->Write(str, sizeof(str))); file->Flush(); EXPECT_EQ(0, file->GetPosition()); file->Close(); ASSERT_TRUE(file->Open(XBMC_TEMPFILEPATH(file))); EXPECT_EQ(0, file->GetPosition()); EXPECT_EQ((int64_t)sizeof(str), file->Seek(0, SEEK_END)); EXPECT_EQ(0, file->Seek(0, SEEK_SET)); EXPECT_EQ((int64_t)sizeof(str), file->GetLength()); EXPECT_EQ(sizeof(str), file->Read(buf, sizeof(buf))); file->Flush(); EXPECT_EQ((int64_t)sizeof(str), file->GetPosition()); EXPECT_TRUE(!memcmp(str, buf, sizeof(str))); file->Close(); EXPECT_TRUE(XBMC_DELETETEMPFILE(file)); }
TEST(TestRarFile, Read) { XFILE::CFile file; char buf[20]; memset(&buf, 0, sizeof(buf)); CStdString reffile, strrarpath, strpathinrar; CFileItemList itemlist; reffile = XBMC_REF_FILE_PATH("xbmc/filesystem/test/reffile.txt.rar"); URIUtils::CreateArchivePath(strrarpath, "rar", reffile, ""); ASSERT_TRUE(XFILE::CDirectory::GetDirectory(strrarpath, itemlist, "", XFILE::DIR_FLAG_NO_FILE_DIRS)); strpathinrar = itemlist[0]->GetPath(); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-(int64_t)sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(1716, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1716, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); }
TEST(TestRarFile, NormalRAR) { XFILE::CFile file; char buf[20]; memset(&buf, 0, sizeof(buf)); CStdString reffile, strrarpath, strpathinrar; CFileItemList itemlist, itemlistemptydir; struct __stat64 stat_buffer; reffile = XBMC_REF_FILE_PATH("xbmc/filesystem/test/refRARnormal.rar"); URIUtils::CreateArchivePath(strrarpath, "rar", reffile, ""); ASSERT_TRUE(XFILE::CDirectory::GetDirectory(strrarpath, itemlist)); itemlist.Sort(SORT_METHOD_FULLPATH, SortOrderAscending); /* /reffile.txt */ strpathinrar = itemlist[1]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/reffile.txt", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFREG); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-(int64_t)sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(1716, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1716, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); /* /testsymlink -> testdir/reffile.txt */ strpathinrar = itemlist[2]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlink", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK); /* * FIXME: Reading symlinks in RARs is currently broken. It takes a long time * to read them and they produce erroneous results. The expected result is * the target paths of the symlinks. */ ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(19, file.GetLength()); file.Close(); /* /testsymlinksubdir -> testdir/testsubdir/reffile.txt */ strpathinrar = itemlist[3]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testsymlinksubdir", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(30, file.GetLength()); file.Close(); /* /testdir/ */ strpathinrar = itemlist[0]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFDIR); itemlist.Clear(); ASSERT_TRUE(XFILE::CDirectory::GetDirectory(strpathinrar, itemlist)); itemlist.Sort(SORT_METHOD_FULLPATH, SortOrderAscending); /* /testdir/reffile.txt */ strpathinrar = itemlist[1]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/reffile.txt", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFREG); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-(int64_t)sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(1716, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1716, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); /* /testdir/testemptysubdir */ strpathinrar = itemlist[2]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testemptysubdir", true)); /* TODO: Should this set the itemlist to an empty list instead? */ EXPECT_FALSE(XFILE::CDirectory::GetDirectory(strpathinrar, itemlistemptydir)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFDIR); /* FIXME: This directory appears a second time as a file */ strpathinrar = itemlist[3]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir", true)); /* /testdir/testsymlink -> testsubdir/reffile.txt */ strpathinrar = itemlist[4]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsymlink", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFLNK); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(22, file.GetLength()); file.Close(); /* /testdir/testsubdir/ */ strpathinrar = itemlist[0]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir/", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFDIR); itemlist.Clear(); ASSERT_TRUE(XFILE::CDirectory::GetDirectory(strpathinrar, itemlist)); itemlist.Sort(SORT_METHOD_FULLPATH, SortOrderAscending); /* /testdir/testsubdir/reffile.txt */ strpathinrar = itemlist[0]->GetPath(); ASSERT_TRUE(StringUtils::EndsWith(strpathinrar, "/testdir/testsubdir/reffile.txt", true)); EXPECT_EQ(0, XFILE::CFile::Stat(strpathinrar, &stat_buffer)); EXPECT_TRUE((stat_buffer.st_mode & S_IFMT) | S_IFREG); ASSERT_TRUE(file.Open(strpathinrar)); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-(int64_t)sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(1716, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1716, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); }
TEST_F(TestZipFile, Read) { XFILE::CFile file; char buf[20]; memset(&buf, 0, sizeof(buf)); std::string reffile, strpathinzip; CFileItemList itemlist; reffile = XBMC_REF_FILE_PATH("xbmc/filesystem/test/reffile.txt.zip"); CURL zipUrl = URIUtils::CreateArchivePath("zip", CURL(reffile), ""); ASSERT_TRUE(XFILE::CDirectory::GetDirectory(zipUrl, itemlist, "", XFILE::DIR_FLAG_NO_FILE_DIRS)); EXPECT_GT(itemlist.Size(), 0); EXPECT_FALSE(itemlist[0]->GetPath().empty()); strpathinzip = itemlist[0]->GetPath(); ASSERT_TRUE(file.Open(strpathinzip)); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), static_cast<size_t>(file.Read(buf, sizeof(buf)))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), static_cast<size_t>(file.Read(buf, sizeof(buf)))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), static_cast<size_t>(file.Read(buf, sizeof(buf)))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-(int64_t)sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), static_cast<size_t>(file.Read(buf, sizeof(buf)))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(-1, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1616, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), static_cast<size_t>(file.Read(buf, sizeof(buf)))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); }
TEST(TestFile, Read) { const std::string newLine = CXBMCTestUtils::Instance().getNewLineCharacters(); const int size = 1616; const int lines = 25; int addPerLine = newLine.length() - 1; int realSize = size + lines * addPerLine; const std::string firstBuf = "About" + newLine + "-----" + newLine + "XBMC is "; const std::string secondBuf = "an award-winning fre"; const std::string thirdBuf = "ent hub for digital "; const std::string fourthBuf = "rs, XBMC is a non-pr"; const std::string fifthBuf = "multimedia jukebox." + newLine; XFILE::CFile file; char buf[23]; memset(&buf, 0, sizeof(buf)); int currentPos; ASSERT_TRUE(file.Open( XBMC_REF_FILE_PATH("/xbmc/filesystem/test/reffile.txt"))); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(realSize, file.GetLength()); EXPECT_EQ(firstBuf.length(), file.Read(buf, firstBuf.length())); file.Flush(); currentPos = firstBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(firstBuf.c_str(), buf, firstBuf.length()) == 0); EXPECT_TRUE(file.Read(buf, secondBuf.length())); currentPos += secondBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(secondBuf.c_str(), buf, secondBuf.length()) == 0); currentPos = 100 + addPerLine * 3; EXPECT_EQ(currentPos, file.Seek(currentPos)); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_EQ(thirdBuf.length(), file.Read(buf, thirdBuf.length())); file.Flush(); currentPos += thirdBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(thirdBuf.c_str(), buf, thirdBuf.length()) == 0); currentPos += 100 + addPerLine * 1; EXPECT_EQ(currentPos, file.Seek(100 + addPerLine * 1, SEEK_CUR)); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_EQ(fourthBuf.length(), file.Read(buf, fourthBuf.length())); file.Flush(); currentPos += fourthBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(fourthBuf.c_str(), buf, fourthBuf.length()) == 0); currentPos = realSize - fifthBuf.length(); EXPECT_EQ(currentPos, file.Seek(-(int64_t)fifthBuf.length(), SEEK_END)); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_EQ(fifthBuf.length(), file.Read(buf, fifthBuf.length())); file.Flush(); currentPos += fifthBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(fifthBuf.c_str(), buf, fifthBuf.length()) == 0); currentPos += 100; EXPECT_EQ(currentPos, file.Seek(100, SEEK_CUR)); EXPECT_EQ(currentPos, file.GetPosition()); currentPos = 0; EXPECT_EQ(currentPos, file.Seek(currentPos, SEEK_SET)); EXPECT_EQ(firstBuf.length(), file.Read(buf, firstBuf.length())); file.Flush(); currentPos += firstBuf.length(); EXPECT_EQ(currentPos, file.GetPosition()); EXPECT_TRUE(memcmp(firstBuf.c_str(), buf, firstBuf.length()) == 0); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); }
TEST(TestFile, Read) { XFILE::CFile file; char buf[20]; memset(&buf, 0, sizeof(buf)); ASSERT_TRUE(file.Open( XBMC_REF_FILE_PATH("/xbmc/filesystem/test/reffile.txt"))); EXPECT_EQ(0, file.GetPosition()); EXPECT_EQ(1616, file.GetLength()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_TRUE(file.ReadString(buf, sizeof(buf))); EXPECT_EQ(39, file.GetPosition()); EXPECT_STREQ("an award-winning fr", buf); EXPECT_EQ(100, file.Seek(100)); EXPECT_EQ(100, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(120, file.GetPosition()); EXPECT_TRUE(!memcmp("ent hub for digital ", buf, sizeof(buf) - 1)); EXPECT_EQ(220, file.Seek(100, SEEK_CUR)); EXPECT_EQ(220, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(240, file.GetPosition()); EXPECT_TRUE(!memcmp("rs, XBMC is a non-pr", buf, sizeof(buf) - 1)); EXPECT_EQ(1596, file.Seek(-sizeof(buf), SEEK_END)); EXPECT_EQ(1596, file.GetPosition()); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(1616, file.GetPosition()); EXPECT_TRUE(!memcmp("multimedia jukebox.\n", buf, sizeof(buf) - 1)); EXPECT_EQ(1716, file.Seek(100, SEEK_CUR)); EXPECT_EQ(1716, file.GetPosition()); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(sizeof(buf), file.Read(buf, sizeof(buf))); file.Flush(); EXPECT_EQ(20, file.GetPosition()); EXPECT_TRUE(!memcmp("About\n-----\nXBMC is ", buf, sizeof(buf) - 1)); EXPECT_EQ(0, file.Seek(0, SEEK_SET)); EXPECT_EQ(-1, file.Seek(-100, SEEK_SET)); file.Close(); }