Skip to content

Commit

Permalink
Merge 01e77c4 into 2d71cef
Browse files Browse the repository at this point in the history
  • Loading branch information
srz-zumix committed Sep 9, 2019
2 parents 2d71cef + 01e77c4 commit d04a23a
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 71 deletions.
114 changes: 63 additions & 51 deletions include/internal/iutest_file.hpp
Expand Up @@ -40,11 +40,36 @@ class IFile : public detail::IOutStream, public detail::IInStream
};
public:
virtual ~IFile() {}

public:
//! 開く
virtual bool Open(const char* filename, int mode) = 0;
/**
* @brief 開く
* @param [in] filename = ファイルパス
* @param [in] mode = モード
* @return 成否
*/
bool Open(const char* filename, int mode)
{
return OpenImpl(filename, mode);
}

#if IUTEST_HAS_STD_FILESYSTEM
/**
* @brief 開く
* @param [in] path = ファイルパス
* @param [in] mode = モード
* @return 成否
*/
bool Open(const ::std::filesystem::path& path, int mode)
{
return Open(path.string().c_str(), mode);
}
#endif

//! 閉じる
virtual void Close() = 0;
private:
virtual bool OpenImpl(const char* filename, int mode) = 0;
};

namespace detail
Expand Down Expand Up @@ -156,33 +181,6 @@ class StdioFile : public IFile
StdioFile() IUTEST_CXX_NOEXCEPT_SPEC : m_fp(NULL) {}
virtual ~StdioFile() { Close(); }
public:
/**
* @brief 開く
* @param [in] filename = ファイルパス
* @param [in] mode = モード
* @return 成否
*/
virtual bool Open(const char* filename, int mode) IUTEST_CXX_OVERRIDE
{
Close();
IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN()
switch( mode )
{
case IFile::OpenRead:
m_fp = fopen(filename, "rb");
break;
case IFile::OpenWrite:
m_fp = fopen(filename, "wb");
break;
case IFile::OpenAppend:
m_fp = fopen(filename, "ab");
break;
default:
break;
}
IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END()
return m_fp != NULL;
}
/**
* @brief 閉じる
*/
Expand Down Expand Up @@ -269,6 +267,28 @@ IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END()
}
return 0;
}
private:
virtual bool OpenImpl(const char* filename, int mode) IUTEST_CXX_OVERRIDE
{
Close();
IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_BEGIN()
switch( mode )
{
case IFile::OpenRead:
m_fp = fopen(filename, "rb");
break;
case IFile::OpenWrite:
m_fp = fopen(filename, "wb");
break;
case IFile::OpenAppend:
m_fp = fopen(filename, "ab");
break;
default:
break;
}
IUTEST_PRAGMA_CRT_SECURE_WARN_DISABLE_END()
return m_fp != NULL;
}
};

class StdErrorFile : public StdioFile
Expand All @@ -277,24 +297,19 @@ class StdErrorFile : public StdioFile
StdErrorFile() IUTEST_CXX_NOEXCEPT_SPEC {}
virtual ~StdErrorFile() { Close(); }
public:
/**
* @brief 開く
* @param [in] filename = ファイルパス
* @param [in] mode = モード
* @return 成否
*/
virtual bool Open(const char* , int ) IUTEST_CXX_OVERRIDE
{
m_fp = stderr;
return true;
}
/**
* @brief 閉じる
*/
virtual void Close() IUTEST_CXX_OVERRIDE
{
m_fp = NULL;
}
private:
virtual bool OpenImpl(const char* , int ) IUTEST_CXX_OVERRIDE
{
m_fp = stderr;
return true;
}
};

#endif
Expand All @@ -309,16 +324,6 @@ class StringStreamFile : public IFile
public:
virtual ~StringStreamFile() { Close(); }
public:
/**
* @brief 開く
* @return 成否
*/
virtual bool Open(const char* , int ) IUTEST_CXX_OVERRIDE
{
ss.clear();
return true;
}

/**
* @brief 閉じる
*/
Expand Down Expand Up @@ -373,6 +378,12 @@ class StringStreamFile : public IFile
{
return ss.str();
}
private:
virtual bool OpenImpl(const char* , int ) IUTEST_CXX_OVERRIDE
{
ss.clear();
return true;
}
protected:
::std::stringstream ss;
};
Expand All @@ -388,11 +399,12 @@ namespace detail
class NoEffectFile : public IFile
{
public:
virtual bool Open(const char*, int) IUTEST_CXX_OVERRIDE { return true; }
virtual void Close() IUTEST_CXX_OVERRIDE {}
virtual bool Write(const void*, size_t, size_t) IUTEST_CXX_OVERRIDE { return true; }
virtual bool Read(void*, size_t, size_t) IUTEST_CXX_OVERRIDE { return true; }
virtual size_t GetSize() IUTEST_CXX_OVERRIDE { return 0; }
private:
virtual bool OpenImpl(const char*, int) IUTEST_CXX_OVERRIDE { return true; }
};

} // end of namespace detail
Expand Down
2 changes: 1 addition & 1 deletion include/internal/iutest_option_message.hpp
Expand Up @@ -189,7 +189,6 @@ inline void iuOptionMessage::ShowSpec()
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_CODECVT);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_CSTDINT);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_CUCHAR);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_FILESYSTEM);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_OPTIONAL);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_RANDOM);
IIUT_SHOW_MACRO(IUTEST_HAS_CXX_HDR_REGEX);
Expand Down Expand Up @@ -225,6 +224,7 @@ inline void iuOptionMessage::ShowSpec()
IIUT_SHOW_MACRO(IUTEST_HAS_STD_BEGIN_END);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_DECLVAL);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_EMPLACE);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_FILESYSTEM);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_QUICK_EXIT);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_STR_TO_VALUE);
IIUT_SHOW_MACRO(IUTEST_HAS_STD_TO_CHARS);
Expand Down
29 changes: 15 additions & 14 deletions include/internal/iutest_stdlib.hpp
Expand Up @@ -281,13 +281,6 @@
# endif
#endif

#if defined(__has_include)
# if __has_include(<filesystem>)
# define IUTEST_HAS_CXX_HDR_FILESYSTEM 1
# endif
#endif


#if defined(__has_include)
# if __has_include(<optional>)
# define IUTEST_HAS_CXX_HDR_OPTIONAL 1
Expand All @@ -310,12 +303,20 @@

// c++17 feature

#if !defined(IUTEST_HAS_STD_FILESYSTEM)
# if defined(__cpp_lib_filesystem) && __cpp_lib_filesystem >= 201703
# if !defined(__cpp_lib_experimental_filesystem)
# define IUTEST_HAS_STD_FILESYSTEM 1
# endif
# endif
#endif

#if !defined(IUTEST_HAS_CXX_HDR_VARIANT)
# if IUTEST_HAS_VARIADIC_TEMPLATES && defined(__has_include)
# if defined(__clang__) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 6))
# define IUTEST_HAS_CXX_HDR_VARIANT 0 // clang 3.5 + variant is not worked
# define IUTEST_HAS_CXX_HDR_VARIANT 0 // clang 3.5 + variant is not worked
# elif __has_include(<variant>)
# define IUTEST_HAS_CXX_HDR_VARIANT 1
# define IUTEST_HAS_CXX_HDR_VARIANT 1
# endif
# endif
#endif
Expand All @@ -342,6 +343,10 @@
#if !defined(IUTEST_HAS_STD_EMPLACE)
# define IUTEST_HAS_STD_EMPLACE 0
#endif
//! has filesystem
#if !defined(IUTEST_HAS_STD_FILESYSTEM)
# define IUTEST_HAS_STD_FILESYSTEM 0
#endif
//! has std::invoke
#if !defined(IUTEST_HAS_STD_INVOKE)
# define IUTEST_HAS_STD_INVOKE 0
Expand Down Expand Up @@ -407,10 +412,6 @@
#if !defined(IUTEST_HAS_CXX_HDR_CUCHAR)
# define IUTEST_HAS_CXX_HDR_CUCHAR 0
#endif
//! has filesystem header
#if !defined(IUTEST_HAS_CXX_HDR_FILESYSTEM)
# define IUTEST_HAS_CXX_HDR_FILESYSTEM 0
#endif
//! has optional header
#if !defined(IUTEST_HAS_CXX_HDR_OPTIONAL)
# define IUTEST_HAS_CXX_HDR_OPTIONAL 0
Expand Down Expand Up @@ -446,7 +447,7 @@
#if IUTEST_HAS_CXX_HDR_CSTDINT
# include <cstdint>
#endif
#if IUTEST_HAS_CXX_HDR_FILESYSTEM
#if IUTEST_HAS_STD_FILESYSTEM
# include <filesystem>
#endif
#if IUTEST_HAS_CXX_HDR_OPTIONAL
Expand Down
2 changes: 1 addition & 1 deletion include/internal/iutest_stream.hpp
Expand Up @@ -6,7 +6,7 @@
*
* @author t.shirayanagi
* @par copyright
* Copyright (C) 2012-2018, Takazumi Shirayanagi\n
* Copyright (C) 2012-2019, Takazumi Shirayanagi\n
* This software is released under the new BSD License,
* see LICENSE
*/
Expand Down
2 changes: 1 addition & 1 deletion include/iutest_config.hpp
Expand Up @@ -527,7 +527,7 @@

//! ::std::filesystem を使用するかどうか
#if !defined(IUTEST_USE_CXX_FILESYSTEM)
# if IUTEST_HAS_CXX_HDR_FILESYSTEM
# if IUTEST_HAS_STD_FILESYSTEM
# if defined(_MSC_VER)
# define IUTEST_USE_CXX_FILESYSTEM 1
# endif
Expand Down
6 changes: 6 additions & 0 deletions include/iutest_defs.hpp
Expand Up @@ -419,6 +419,12 @@ typedef detail::type_fit_t<4>::UInt UInt32; //!< 32 bit 符号なし整数型
typedef detail::type_fit_t<8>::Int Int64; //!< 64 bit 符号付き整数型
typedef detail::type_fit_t<8>::UInt UInt64; //!< 64 bit 符号なし整数型

#if IUTEST_HAS_CXX11 && IUTEST_HAS_CXX_HDR_CSTDINT
typedef ::std::uintmax_t iu_off_t;
#else
typedef UInt64 iu_off_t;
#endif

typedef internal::TypeId TestTypeId; //!< テスト識別型

typedef void (*SetUpMethod)(); //!< SetUp 関数型
Expand Down
2 changes: 1 addition & 1 deletion include/iutest_printers.hpp
Expand Up @@ -363,7 +363,7 @@ inline void PrintTo(const ::std::any& value, iu_ostream* os)
}
#endif

#if IUTEST_USE_CXX_FILESYSTEM
#if IUTEST_HAS_STD_FILESYSTEM
inline ::std::string FileSystemFileTypeToString(const ::std::filesystem::file_type& value)
{
switch(value)
Expand Down
2 changes: 1 addition & 1 deletion test/cxx_feature_tests.cpp
Expand Up @@ -232,7 +232,7 @@ IUTEST(Any, PrintTo)

#endif

#if IUTEST_USE_CXX_FILESYSTEM
#if IUTEST_HAS_STD_FILESYSTEM

IUTEST(FileSystem, PathCompare)
{
Expand Down
3 changes: 2 additions & 1 deletion test/filter_file_syntax_tests.cpp
Expand Up @@ -29,7 +29,8 @@ class FilterFile : public ::iutest::StringStreamFile
{
public:
static ::std::string filter;
virtual bool Open(const char* , int ) IUTEST_CXX_OVERRIDE
private:
virtual bool OpenImpl(const char* , int ) IUTEST_CXX_OVERRIDE
{
ss.clear();
ss << filter;
Expand Down
Empty file added test/testdata/empty.bin
Empty file.
33 changes: 33 additions & 0 deletions test/unit_file_tests.cpp
Expand Up @@ -38,3 +38,36 @@ IUTEST(StdFileUnitTest, InvalidOpenMode)

#endif

#if IUTEST_HAS_STD_FILESYSTEM

const std::filesystem::path largefile("./testdata/largefile.bin");

class FileSystemTest : public ::iutest::Test
{
public:
static void SetUpTestCase()
{
IUTEST_ASSERT_TRUE(::std::filesystem::copy_file("./testdata/empty.bin", largefile, ::std::filesystem::copy_options::overwrite_existing));
::std::filesystem::resize_file(largefile, 0x100000000ull);
}
static void TearDownTestCase()
{
::std::filesystem::remove(largefile);
}
};

#if IUTEST_HAS_FOPEN

IUTEST_F(DISABLED_FileSystemTest, FileSize64bit)
{
IUTEST_ASSUME_EQ(0x100000000ull, ::std::filesystem::file_size(largefile));

::iutest::StdioFile file;
IUTEST_ASSERT_TRUE( file.Open(largefile, iutest::IFile::OpenRead) );
IUTEST_EXPECT_EQ(0x100000000ull, file.GetSize());
}

#endif

#endif

0 comments on commit d04a23a

Please sign in to comment.