Filesystem.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include "tests/framework/Framework.h"
  6. #include "anki/util/Filesystem.h"
  7. #include "anki/util/File.h"
  8. ANKI_TEST(Util, FileExists)
  9. {
  10. // Create file
  11. File file;
  12. ANKI_TEST_EXPECT_NO_ERR(file.open("./tmp", File::OpenFlag::WRITE));
  13. file.close();
  14. // Check
  15. ANKI_TEST_EXPECT_EQ(fileExists("./tmp"), true);
  16. }
  17. ANKI_TEST(Util, Directory)
  18. {
  19. // Destroy previous
  20. if(directoryExists("./dir"))
  21. {
  22. ANKI_TEST_EXPECT_NO_ERR(removeDirectory("./dir"));
  23. }
  24. // Create simple directory
  25. ANKI_TEST_EXPECT_NO_ERR(createDirectory("./dir"));
  26. File file;
  27. ANKI_TEST_EXPECT_NO_ERR(file.open("./dir/tmp", File::OpenFlag::WRITE));
  28. file.close();
  29. ANKI_TEST_EXPECT_EQ(fileExists("./dir/tmp"), true);
  30. ANKI_TEST_EXPECT_NO_ERR(removeDirectory("./dir"));
  31. ANKI_TEST_EXPECT_EQ(fileExists("./dir/tmp"), false);
  32. ANKI_TEST_EXPECT_EQ(directoryExists("./dir"), false);
  33. // A bit more complex
  34. ANKI_TEST_EXPECT_NO_ERR(createDirectory("./dir"));
  35. ANKI_TEST_EXPECT_NO_ERR(createDirectory("./dir/rid"));
  36. ANKI_TEST_EXPECT_NO_ERR(file.open("./dir/rid/tmp", File::OpenFlag::WRITE));
  37. file.close();
  38. ANKI_TEST_EXPECT_EQ(fileExists("./dir/rid/tmp"), true);
  39. ANKI_TEST_EXPECT_NO_ERR(removeDirectory("./dir"));
  40. ANKI_TEST_EXPECT_EQ(fileExists("./dir/rid/tmp"), false);
  41. ANKI_TEST_EXPECT_EQ(directoryExists("./dir/rid"), false);
  42. ANKI_TEST_EXPECT_EQ(directoryExists("./dir"), false);
  43. }
  44. ANKI_TEST(Util, HomeDir)
  45. {
  46. HeapAllocator<char> alloc(allocAligned, nullptr);
  47. StringAuto out(alloc);
  48. ANKI_TEST_EXPECT_NO_ERR(getHomeDirectory(alloc, out));
  49. printf("home dir %s\n", &out[0]);
  50. ANKI_TEST_EXPECT_GT(out.getLength(), 0);
  51. }
  52. ANKI_TEST(Util, WalkDir)
  53. {
  54. printf("Test requires the data dir\n");
  55. // Walk crnt dir
  56. U32 count = 0;
  57. ANKI_TEST_EXPECT_NO_ERR(walkDirectoryTree("./data/dir",
  58. &count,
  59. [](const CString& fname, void* pCount, Bool isDir) -> Error {
  60. if(isDir)
  61. {
  62. printf("-- %s\n", &fname[0]);
  63. ++(*static_cast<U32*>(pCount));
  64. }
  65. return ErrorCode::NONE;
  66. }));
  67. ANKI_TEST_EXPECT_EQ(count, 3);
  68. // Walk again
  69. count = 0;
  70. ANKI_TEST_EXPECT_NO_ERR(walkDirectoryTree("./data/dir///////",
  71. &count,
  72. [](const CString& fname, void* pCount, Bool isDir) -> Error {
  73. printf("-- %s\n", &fname[0]);
  74. ++(*static_cast<U32*>(pCount));
  75. return ErrorCode::NONE;
  76. }));
  77. ANKI_TEST_EXPECT_EQ(count, 6);
  78. // Test error
  79. count = 0;
  80. ANKI_TEST_EXPECT_ERR(
  81. walkDirectoryTree("./data///dir////",
  82. &count,
  83. [](const CString& fname, void* pCount, Bool isDir) -> Error {
  84. printf("-- %s\n", &fname[0]);
  85. ++(*static_cast<U32*>(pCount));
  86. return ErrorCode::FUNCTION_FAILED;
  87. }),
  88. ErrorCode::FUNCTION_FAILED);
  89. ANKI_TEST_EXPECT_EQ(count, 1);
  90. }