+
+ std::cout << "Standard Locations:"
+ << "\n - Home: " << SGPath::standardLocation(SGPath::HOME)
+ << "\n - Desktop: " << SGPath::standardLocation(SGPath::DESKTOP)
+ << "\n - Downloads: " << SGPath::standardLocation(SGPath::DOWNLOADS)
+ << "\n - Documents: " << SGPath::standardLocation(SGPath::DOCUMENTS)
+ << "\n - Pictures: " << SGPath::standardLocation(SGPath::PICTURES)
+ << std::endl;
+
+ VERIFY( !SGPath::standardLocation(SGPath::HOME ).isNull() );
+ VERIFY( !SGPath::standardLocation(SGPath::DESKTOP ).isNull() );
+ VERIFY( !SGPath::standardLocation(SGPath::DOWNLOADS).isNull() );
+ VERIFY( !SGPath::standardLocation(SGPath::DOCUMENTS).isNull() );
+ VERIFY( !SGPath::standardLocation(SGPath::PICTURES ).isNull() );
+}
+
+SGPath::Permissions validateNone(const SGPath&)
+{
+ SGPath::Permissions p;
+ p.read = false;
+ p.write = false;
+ return p;
+}
+
+SGPath::Permissions validateRead(const SGPath&)
+{
+ SGPath::Permissions p;
+ p.read = true;
+ p.write = false;
+ return p;
+}
+
+SGPath::Permissions validateWrite(const SGPath&)
+{
+ SGPath::Permissions p;
+ p.read = false;
+ p.write = true;
+ return p;
+}
+
+void test_path_dir()
+{
+ simgear::Dir temp = simgear::Dir::tempDir("path_dir");
+ temp.remove(true);
+ SGPath p = temp.path();
+
+ VERIFY(p.isAbsolute());
+ COMPARE(p.create_dir(0755), 0);
+
+ SGPath sub = p / "subA" / "subB";
+ VERIFY(!sub.exists());
+
+ SGPath subFile = sub / "fileABC.txt";
+ COMPARE(subFile.create_dir(0755), 0);
+ VERIFY(!subFile.exists());
+
+ sub.set_cached(false);
+ VERIFY(sub.exists());
+ VERIFY(sub.isDir());
+
+ SGPath sub2 = p / "subA" / "fileA";
+ {
+ sg_ofstream os(sub2);
+ VERIFY(os.is_open());
+ for (int i = 0; i < 50; ++i) {
+ os << "ABCD" << endl;
+ }
+ }
+ VERIFY(sub2.isFile());
+ COMPARE(sub2.sizeInBytes(), 250);
+
+ SGPath sub3 = p / "subß" / "file𝕽";
+ sub3.create_dir(0755);
+
+ {
+ sg_ofstream os(sub3);
+ VERIFY(os.is_open());
+ for (int i = 0; i < 20; ++i) {
+ os << "EFGH" << endl;
+ }
+ }
+
+ sub3.set_cached(false);
+ VERIFY(sub3.exists());
+ COMPARE(sub3.sizeInBytes(), 100);
+ COMPARE(sub3.file(), "file𝕽");
+
+ simgear::Dir subD(p / "subA");
+ simgear::PathList dirChildren = subD.children(simgear::Dir::TYPE_DIR | simgear::Dir::NO_DOT_OR_DOTDOT);
+ COMPARE(dirChildren.size(), 1);
+ COMPARE(dirChildren[0], subD.path() / "subB");
+
+ simgear::PathList fileChildren = subD.children(simgear::Dir::TYPE_FILE | simgear::Dir::NO_DOT_OR_DOTDOT);
+ COMPARE(fileChildren.size(), 1);
+ COMPARE(fileChildren[0], subD.path() / "fileA");
+
+ simgear::Dir subS(sub3.dirPath());
+ fileChildren = subS.children(simgear::Dir::TYPE_FILE | simgear::Dir::NO_DOT_OR_DOTDOT);
+ COMPARE(fileChildren.size(), 1);
+ COMPARE(fileChildren[0], subS.path() / "file𝕽");
+