aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-05-22 11:25:29 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-05-22 11:34:55 +0300
commiteb3c27b8f47c793244436cd082512bb8235bea89 (patch)
treef48a26e4b9185ffbdabe2cbf136b7dfe6e94fc86
parent912fbc4de72b8efbae5d49c502aad197177f03bf (diff)
Add path-entry test
-rw-r--r--tests/path-entry/buildfile7
-rw-r--r--tests/path-entry/driver.cxx48
-rw-r--r--tests/path-entry/testscript33
3 files changed, 88 insertions, 0 deletions
diff --git a/tests/path-entry/buildfile b/tests/path-entry/buildfile
new file mode 100644
index 0000000..2b5b0a1
--- /dev/null
+++ b/tests/path-entry/buildfile
@@ -0,0 +1,7 @@
+# file : tests/path-entry/buildfile
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+exe{driver}: cxx{driver} ../../libbutl/lib{butl} test{testscript}
+
+include ../../libbutl/
diff --git a/tests/path-entry/driver.cxx b/tests/path-entry/driver.cxx
new file mode 100644
index 0000000..4f36f61
--- /dev/null
+++ b/tests/path-entry/driver.cxx
@@ -0,0 +1,48 @@
+// file : tests/path-entry/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <iostream>
+#include <system_error>
+
+#include <libbutl/utility.hxx> // operator<<(ostream, exception)
+#include <libbutl/filesystem.hxx>
+
+using namespace std;
+using namespace butl;
+
+// Usage: argv[0] <path>
+//
+// If path entry exists then print it's type and size (meaningful for the
+// regular file only) to STDOUT, and exit with the zero code. Otherwise exit
+// with the one code. Don't follow symlink. On failure print the error
+// description to STDERR and exit with the two code.
+//
+int
+main (int argc, const char* argv[])
+try
+{
+ assert (argc == 2);
+
+ auto es (path_entry (argv[1]));
+
+ if (!es.first)
+ return 1;
+
+ switch (es.second.type)
+ {
+ case entry_type::unknown: cout << "unknown"; break;
+ case entry_type::regular: cout << "regular"; break;
+ case entry_type::directory: cout << "directory"; break;
+ case entry_type::symlink: cout << "symlink"; break;
+ case entry_type::other: cout << "other"; break;
+ }
+
+ cout << endl << es.second.size << endl;
+ return 0;
+}
+catch (const system_error& e)
+{
+ cerr << e << endl;
+ return 2;
+}
diff --git a/tests/path-entry/testscript b/tests/path-entry/testscript
new file mode 100644
index 0000000..a9f2c2e
--- /dev/null
+++ b/tests/path-entry/testscript
@@ -0,0 +1,33 @@
+# file : tests/path-entry/testscript
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+: existing
+:
+{
+ : file
+ :
+ : Note that the newline character is translated into 2 characters being
+ : printed on Windows. This why we exclude it, to get consistent behavior on
+ : both POSIX and Windows.
+ :
+ cat <:'abc' >=f;
+ $* f >>EOO
+ regular
+ 3
+ EOO
+
+ : dir
+ :
+ : Note that the size value is meaningless for directory entries.
+ :
+ mkdir -p d;
+ $* d >>~/EOO/
+ directory
+ /.
+ EOO
+}
+
+: non-existent
+:
+$* f == 1