aboutsummaryrefslogtreecommitdiff
path: root/tests/project-name
diff options
context:
space:
mode:
Diffstat (limited to 'tests/project-name')
-rw-r--r--tests/project-name/buildfile8
-rw-r--r--tests/project-name/driver.cxx84
-rw-r--r--tests/project-name/testscript78
3 files changed, 170 insertions, 0 deletions
diff --git a/tests/project-name/buildfile b/tests/project-name/buildfile
new file mode 100644
index 0000000..3e16fe8
--- /dev/null
+++ b/tests/project-name/buildfile
@@ -0,0 +1,8 @@
+# file : tests/project-name/buildfile
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+import libs = libbutl%lib{butl}
+libs += $stdmod_lib
+
+exe{driver}: {hxx cxx}{*} $libs testscript
diff --git a/tests/project-name/driver.cxx b/tests/project-name/driver.cxx
new file mode 100644
index 0000000..51c8782
--- /dev/null
+++ b/tests/project-name/driver.cxx
@@ -0,0 +1,84 @@
+// file : tests/project-name/driver.cxx -*- C++ -*-
+// copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#include <cassert>
+
+#ifndef __cpp_lib_modules
+#include <ios> // ios::*bit
+#include <string>
+#include <iostream>
+#include <stdexcept> // invalid_argument
+#endif
+
+// Other includes.
+
+#ifdef __cpp_modules
+#ifdef __cpp_lib_modules
+import std.core;
+import std.io;
+#endif
+import butl.utility; // operator<<(ostream,exception), eof(), *case()
+import butl.project_name;
+#else
+#include <libbutl/utility.mxx>
+#include <libbutl/project-name.mxx>
+#endif
+
+using namespace std;
+using namespace butl;
+
+// Create project_name from string and also perform some tests for the created
+// object.
+//
+static project_name
+name (const string& s)
+{
+ project_name r (s);
+
+ assert (r == project_name (lcase (s)));
+ assert (r == project_name (ucase (s)));
+
+ assert (r > project_name ("!", project_name::raw_string));
+ assert (r < project_name ("~", project_name::raw_string));
+
+ return r;
+}
+
+// Usage: argv[0] (string|base|extension|variable)
+//
+// Create project names from stdin lines, and for each of them print the
+// result of the specified member function to stdout, one per line.
+//
+int
+main (int argc, char* argv[])
+try
+{
+ assert (argc == 2);
+
+ string m (argv[1]);
+ assert (m == "string" || m == "base" || m == "extension" || m == "variable");
+
+ cin.exceptions (ios::badbit);
+ cout.exceptions (ios::failbit | ios::badbit);
+
+ string l;
+ while (!eof (getline (cin, l)))
+ {
+ project_name n (name (l));
+
+ const string& s (m == "string" ? n.string () :
+ m == "base" ? n.base () :
+ m == "extension" ? n.extension () :
+ n.variable ());
+
+ cout << s << endl;
+ }
+
+ return 0;
+}
+catch (const invalid_argument& e)
+{
+ cerr << e << endl;
+ return 1;
+}
diff --git a/tests/project-name/testscript b/tests/project-name/testscript
new file mode 100644
index 0000000..92bd5e8
--- /dev/null
+++ b/tests/project-name/testscript
@@ -0,0 +1,78 @@
+# file : tests/project-name/testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+: string
+{
+ test.arguments += 'string'
+
+ : valid
+ :
+ $* <<EOF >>EOF
+ foo
+ foo1
+ Foo
+ foo_bar
+ foo+bar
+ foo-bar
+ foo.bar
+ build2
+ EOF
+
+ $* <'a' 2>'length is less than two characters' != 0: short
+ $* <'nul' 2>'illegal name' != 0: illegal-name
+ $* <'1a' 2>'illegal first character (must be alphabetic)' != 0: illegal-first-char
+ $* <'a!b' 2>'illegal character' != 0: illegal-char
+
+ : illegal-last-char
+ :
+ $* <'a.' 2>'illegal last character (must be alphabetic, digit, or plus)' != 0
+}
+
+: base
+:
+{
+ test.arguments += 'base';
+
+ $* <<EOI >>EOO
+ libbutl
+ libbutl.bash
+ a.b.c
+ EOI
+ libbutl
+ libbutl
+ a.b
+ EOO
+}
+
+: extension
+:
+{
+ test.arguments += 'extension';
+
+ $* <<EOI >>EOO
+ libbutl
+ libbutl.bash
+ a.b.c
+ EOI
+
+ bash
+ c
+ EOO
+}
+
+: variable
+:
+{
+ test.arguments += 'variable';
+
+ $* <<EOI >>EOO
+ foo-bar
+ libc++
+ libbutl.bash
+ EOI
+ foo_bar
+ libc__
+ libbutl_bash
+ EOO
+}