diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2016-04-25 12:39:27 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2016-05-04 20:29:05 +0300 |
commit | 7806c39ecc92055cd338749148fda51b2dc01691 (patch) | |
tree | cb52f5bc766d12b68b9d20696aae0b60699ea43a /tests | |
parent | d20431e11290320f04d62e26b9a7cbcefaf5480c (diff) |
Add base64_encode(), base64_decode()
Diffstat (limited to 'tests')
-rw-r--r-- | tests/base64/buildfile | 7 | ||||
-rw-r--r-- | tests/base64/driver.cxx | 106 | ||||
-rw-r--r-- | tests/buildfile | 2 |
3 files changed, 114 insertions, 1 deletions
diff --git a/tests/base64/buildfile b/tests/base64/buildfile new file mode 100644 index 0000000..63212fa --- /dev/null +++ b/tests/base64/buildfile @@ -0,0 +1,7 @@ +# file : tests/base64/buildfile +# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +# license : MIT; see accompanying LICENSE file + +exe{driver}: cxx{driver} ../../butl/lib{butl} + +include ../../butl/ diff --git a/tests/base64/driver.cxx b/tests/base64/driver.cxx new file mode 100644 index 0000000..e43e04a --- /dev/null +++ b/tests/base64/driver.cxx @@ -0,0 +1,106 @@ +// file : tests/base64/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include <string> +#include <sstream> +#include <cassert> + +#include <butl/base64> + +using namespace std; +using namespace butl; + +static bool +encode (const string& i, const string& o) +{ + // Test encoding. + // + istringstream is (i); + string s (base64_encode (is)); + bool r (s == o && is.eof ()); + + if (r) + { + is.seekg (0); + ostringstream os; + base64_encode (os, is); + r = os.str () == o && is.eof (); + } + + if (r) + r = base64_encode (vector<char> (i.begin (), i.end ())) == o; + + // Test decoding. + // + if (r) + { + istringstream is (o); + ostringstream os; + base64_decode (os, is); + r = os.str () == i; + } + + if (r) + { + ostringstream os; + base64_decode (os, o); + r = os.str () == i; + } + + if (r) + { + vector<char> v (base64_decode (o)); + r = string (v.begin (), v.end ()) == i; + } + + return r; +} + +int +main () +{ + assert (encode ("", "")); + assert (encode ("B", "Qg==")); + assert (encode ("BX", "Qlg=")); + assert (encode ("BXz", "Qlh6")); + assert (encode ("BXzS", "Qlh6Uw==")); + assert (encode ("BXzS@", "Qlh6U0A=")); + assert (encode ("BXzS@#", "Qlh6U0Aj")); + assert (encode ("BXzS@#/", "Qlh6U0AjLw==")); + + const char* s (R"delim( +class fdstream_base +{ +protected: + fdstream_base () = default; + fdstream_base (int fd): buf_ (fd) {} + +protected: + fdbuf buf_; +}; + +class ifdstream: fdstream_base, public std::istream +{ +public: + ifdstream (): std::istream (&buf_) {} + ifdstream (int fd): fdstream_base (fd), std::istream (&buf_) {} + + void close () {buf_.close ();} + void open (int fd) {buf_.open (fd);} + bool is_open () const {return buf_.is_open ();} +}; +)delim"); + + const char* r (R"delim( +CmNsYXNzIGZkc3RyZWFtX2Jhc2UKewpwcm90ZWN0ZWQ6CiAgZmRzdHJlYW1fYmFzZSAoKSA9IGRl +ZmF1bHQ7CiAgZmRzdHJlYW1fYmFzZSAoaW50IGZkKTogYnVmXyAoZmQpIHt9Cgpwcm90ZWN0ZWQ6 +CiAgZmRidWYgYnVmXzsKfTsKCmNsYXNzIGlmZHN0cmVhbTogZmRzdHJlYW1fYmFzZSwgcHVibGlj +IHN0ZDo6aXN0cmVhbQp7CnB1YmxpYzoKICBpZmRzdHJlYW0gKCk6IHN0ZDo6aXN0cmVhbSAoJmJ1 +Zl8pIHt9CiAgaWZkc3RyZWFtIChpbnQgZmQpOiBmZHN0cmVhbV9iYXNlIChmZCksIHN0ZDo6aXN0 +cmVhbSAoJmJ1Zl8pIHt9CgogIHZvaWQgY2xvc2UgKCkge2J1Zl8uY2xvc2UgKCk7fQogIHZvaWQg +b3BlbiAoaW50IGZkKSB7YnVmXy5vcGVuIChmZCk7fQogIGJvb2wgaXNfb3BlbiAoKSBjb25zdCB7 +cmV0dXJuIGJ1Zl8uaXNfb3BlbiAoKTt9Cn07Cg==)delim"); + + assert (encode (s, r + 1)); +} diff --git a/tests/buildfile b/tests/buildfile index 45c78d6..59caba8 100644 --- a/tests/buildfile +++ b/tests/buildfile @@ -2,6 +2,6 @@ # copyright : Copyright (c) 2014-2016 Code Synthesis Ltd # license : MIT; see accompanying LICENSE file -d = dir-iterator/ path/ prefix-map/ sha256/ timestamp/ triplet/ +d = base64/ dir-iterator/ path/ prefix-map/ sha256/ timestamp/ triplet/ .: $d include $d |