diff options
Diffstat (limited to 'tests/project-name')
-rw-r--r-- | tests/project-name/buildfile | 8 | ||||
-rw-r--r-- | tests/project-name/driver.cxx | 84 | ||||
-rw-r--r-- | tests/project-name/testscript | 78 |
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 +} |