Filesystem.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos and contributors.
  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", FileOpenFlag::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", FileOpenFlag::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", FileOpenFlag::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(
  58. walkDirectoryTree("./data/dir", &count, [](const CString& fname, void* pCount, Bool isDir) -> Error {
  59. if(isDir)
  60. {
  61. printf("-- %s\n", &fname[0]);
  62. ++(*static_cast<U32*>(pCount));
  63. }
  64. return ErrorCode::NONE;
  65. }));
  66. ANKI_TEST_EXPECT_EQ(count, 3);
  67. // Walk again
  68. count = 0;
  69. ANKI_TEST_EXPECT_NO_ERR(
  70. walkDirectoryTree("./data/dir///////", &count, [](const CString& fname, void* pCount, Bool isDir) -> Error {
  71. printf("-- %s\n", &fname[0]);
  72. ++(*static_cast<U32*>(pCount));
  73. return ErrorCode::NONE;
  74. }));
  75. ANKI_TEST_EXPECT_EQ(count, 6);
  76. // Test error
  77. count = 0;
  78. ANKI_TEST_EXPECT_ERR(walkDirectoryTree("./data///dir////",
  79. &count,
  80. [](const CString& fname, void* pCount, Bool isDir) -> Error {
  81. printf("-- %s\n", &fname[0]);
  82. ++(*static_cast<U32*>(pCount));
  83. return ErrorCode::FUNCTION_FAILED;
  84. }),
  85. ErrorCode::FUNCTION_FAILED);
  86. ANKI_TEST_EXPECT_EQ(count, 1);
  87. }