diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2017-03-31 23:29:49 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2017-04-04 13:28:18 +0300 |
commit | d53c8a6ce3d868da66d97a9243365e88d0879343 (patch) | |
tree | 7d1268f62808f706c3a4d5631456afb4cbe24fb2 /tests | |
parent | f4f30ed51b9bcd84cf25b601fab0a0064aae7af8 (diff) |
Add tab_parser
Diffstat (limited to 'tests')
-rw-r--r-- | tests/tab-parser/buildfile | 7 | ||||
-rw-r--r-- | tests/tab-parser/driver.cxx | 67 | ||||
-rw-r--r-- | tests/tab-parser/testscript | 49 |
3 files changed, 123 insertions, 0 deletions
diff --git a/tests/tab-parser/buildfile b/tests/tab-parser/buildfile new file mode 100644 index 0000000..4afb691 --- /dev/null +++ b/tests/tab-parser/buildfile @@ -0,0 +1,7 @@ +# file : tests/tab-parser/buildfile +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +exe{driver}: cxx{driver} ../../butl/lib{butl} test{testscript} + +include ../../butl/ diff --git a/tests/tab-parser/driver.cxx b/tests/tab-parser/driver.cxx new file mode 100644 index 0000000..8b0cc4d --- /dev/null +++ b/tests/tab-parser/driver.cxx @@ -0,0 +1,67 @@ +// file : tests/tab-parser/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include <ios> // ios::failbit, ios::badbit +#include <cassert> +#include <iostream> + +#include <butl/utility> // operator<<(ostream,exception) +#include <butl/tab-parser> + +using namespace std; +using namespace butl; + +// Usage: argv[0] [-l] +// +// Read and parse tab-file from STDIN and print fields to STDOUT. +// +// -l output each field on a separate line +// +int +main (int argc, char* argv[]) +try +{ + assert (argc <= 2); + bool fpl (false); // Print field per line. + + if (argc == 2) + { + assert (argv[1] == string ("-l")); + fpl = true; + } + + cin.exceptions (ios::failbit | ios::badbit); + cout.exceptions (ios::failbit | ios::badbit); + + tab_fields tl; + tab_parser parser (cin, "cin"); + + while (!(tl = parser.next ()).empty ()) + { + if (!fpl) + { + for (auto b (tl.cbegin ()), i (b), e (tl.cend ()); i != e; ++i) + { + if (i != b) + cout << ' '; + + cout << i->value; + } + + cout << '\n'; + } + else + { + for (const auto& tf: tl) + cout << tf.value << '\n'; + } + } + + return 0; +} +catch (const tab_parsing& e) +{ + cerr << e << endl; + return 1; +} diff --git a/tests/tab-parser/testscript b/tests/tab-parser/testscript new file mode 100644 index 0000000..1b0a816 --- /dev/null +++ b/tests/tab-parser/testscript @@ -0,0 +1,49 @@ +# file : tests/tab-parser/testscript +# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +: valid +: +: Roundtrip tab-files. +: +{ + : newline-term + : + $* <<EOF >>EOF + abc + def xyz + fff + EOF + + : eos-term + : + $* <:'abc' >'abc' + + : empty-lines + : + $* <<EOI >'def' + # abc + + # abc + def + + EOI + + : quoting + : + $* -l <<EOI >>EOO + def k" l'"'m n"' xyz + EOI + def + k" l'"'m n"' + xyz + EOO +} + +: invalid +: +{ + : unterm-quoting + : + $* <'ab"c' 2>'cin:1:5: error: unterminated quoted string' == 1 +} |