blob: e4a0923d0bc213cd47d10404583bb078d6029c6e (
plain) (
tree)
|
|
#include "tempfile.h"
#include <library/cpp/testing/unittest/registar.h>
#include <util/folder/dirut.h>
#include <util/generic/yexception.h>
#include <util/stream/file.h>
#include <algorithm>
Y_UNIT_TEST_SUITE(TTempFileHandle) {
Y_UNIT_TEST(Create) {
TString path;
{
TTempFileHandle tmp;
path = tmp.Name();
tmp.Write("hello world\n", 12);
tmp.FlushData();
UNIT_ASSERT_STRINGS_EQUAL(TUnbufferedFileInput(tmp.Name()).ReadAll(), "hello world\n");
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(InCurrentDir) {
#ifndef _win32_
static const TString TEST_PREFIX = "unique_prefix";
#else
static const TString TEST_PREFIX = "uni";
#endif
TString path;
{
TTempFileHandle tmp = TTempFileHandle::InCurrentDir(TEST_PREFIX);
path = tmp.Name();
UNIT_ASSERT(NFs::Exists(path));
TVector<TString> names;
TFsPath(".").ListNames(names);
bool containsFileWithPrefix = std::any_of(names.begin(), names.end(), [&](const TString& name) {
return name.Contains(TEST_PREFIX);
});
UNIT_ASSERT(containsFileWithPrefix);
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(UseExtensionWithoutDot) {
TString path;
{
TTempFileHandle tmp = TTempFileHandle::InCurrentDir("hello", "world");
path = tmp.Name();
UNIT_ASSERT(NFs::Exists(path));
#ifndef _win32_
UNIT_ASSERT(path.Contains("hello"));
UNIT_ASSERT(path.EndsWith(".world"));
UNIT_ASSERT(!path.EndsWith("..world"));
#else
UNIT_ASSERT(path.Contains("hel"));
UNIT_ASSERT(path.EndsWith(".tmp"));
#endif
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(UseExtensionWithDot) {
TString path;
{
TTempFileHandle tmp = TTempFileHandle::InCurrentDir("lorem", ".ipsum");
path = tmp.Name();
UNIT_ASSERT(NFs::Exists(path));
#ifndef _win32_
UNIT_ASSERT(path.Contains("lorem"));
UNIT_ASSERT(path.EndsWith(".ipsum"));
UNIT_ASSERT(!path.EndsWith("..ipsum"));
#else
UNIT_ASSERT(path.Contains("lor"));
UNIT_ASSERT(path.EndsWith(".tmp"));
#endif
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(SafeDestructor) {
TString path;
{
path = MakeTempName();
UNIT_ASSERT(NFs::Exists(path));
TTempFileHandle tmp(path);
Y_UNUSED(tmp);
UNIT_ASSERT(NFs::Exists(path));
TTempFileHandle anotherTmp(path);
Y_UNUSED(anotherTmp);
UNIT_ASSERT(NFs::Exists(path));
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(RemovesOpen) {
TString path;
{
TTempFileHandle tmp;
path = tmp.Name();
tmp.Write("hello world\n", 12);
tmp.FlushData();
UNIT_ASSERT(NFs::Exists(path));
UNIT_ASSERT(tmp.IsOpen());
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(NonExistingDirectory) {
UNIT_ASSERT_EXCEPTION(TTempFileHandle::InDir("nonexsistingdirname"), TSystemError);
}
}
Y_UNIT_TEST_SUITE(MakeTempName) {
Y_UNIT_TEST(Default) {
TString path;
{
TTempFile tmp(MakeTempName());
path = tmp.Name();
UNIT_ASSERT(!path.Contains('\0'));
UNIT_ASSERT(NFs::Exists(path));
UNIT_ASSERT(path.EndsWith(".tmp"));
#ifndef _win32_
UNIT_ASSERT(path.Contains("yandex"));
#else
UNIT_ASSERT(path.Contains("yan"));
#endif
}
UNIT_ASSERT(!NFs::Exists(path));
}
Y_UNIT_TEST(UseNullptr) {
TString path;
{
TTempFile tmp(MakeTempName(nullptr, nullptr, nullptr));
path = tmp.Name();
UNIT_ASSERT(!path.Contains('\0'));
UNIT_ASSERT(NFs::Exists(path));
}
UNIT_ASSERT(!NFs::Exists(path));
}
}
|