summaryrefslogtreecommitdiffstats
path: root/src/io/stream/streamtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/stream/streamtest.cpp')
-rw-r--r--src/io/stream/streamtest.cpp256
1 files changed, 256 insertions, 0 deletions
diff --git a/src/io/stream/streamtest.cpp b/src/io/stream/streamtest.cpp
new file mode 100644
index 0000000..5d27058
--- /dev/null
+++ b/src/io/stream/streamtest.cpp
@@ -0,0 +1,256 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/** @file
+ * TODO: insert short description here
+ *//*
+ * Authors: see git history
+ *
+ * Copyright (C) 2015 Authors
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+
+#include <stdio.h>
+#include <limits.h> // realpath
+#include <stdlib.h> // mkdtemp, realpath
+#include <unistd.h> // chdir
+#include <string.h> // strlen, strncpy, strrchr
+
+#include "inkscapestream.h"
+#include "base64stream.h"
+#include "gzipstream.h"
+#include "stringstream.h"
+#include "uristream.h"
+#include "xsltstream.h"
+
+// quick way to pass the name of the executable into the test
+char myself[PATH_MAX];
+
+// names and path storage for other tests
+char *xmlname = "crystalegg.xml";
+char xmlpath[PATH_MAX];
+char *xslname = "doc2html.xsl";
+char xslpath[PATH_MAX];
+
+bool testUriStream()
+{
+ printf("######### UriStream copy ############\n");
+ Inkscape::URI inUri(myself);
+ Inkscape::IO::UriInputStream ins(inUri);
+ Inkscape::URI outUri("streamtest.copy");
+ Inkscape::IO::UriOutputStream outs(outUri);
+
+ pipeStream(ins, outs);
+
+ ins.close();
+ outs.close();
+
+ return true;
+}
+
+bool testWriter()
+{
+ printf("######### OutputStreamWriter ############\n");
+ Inkscape::IO::StdOutputStream outs;
+ Inkscape::IO::OutputStreamWriter writer(outs);
+
+ writer << "Hello, world! " << 123.45 << " times\n";
+
+ writer.printf("There are %f quick brown foxes in %d states\n", 123.45, 88);
+
+ return true;
+}
+
+bool testStdWriter()
+{
+ printf("######### StdWriter ############\n");
+ Inkscape::IO::StdWriter writer;
+
+ writer << "Hello, world! " << 123.45 << " times\n";
+
+ writer.printf("There are %f quick brown foxes in %d states\n", 123.45, 88);
+
+ return true;
+}
+
+bool testBase64()
+{
+ printf("######### Base64 Out ############\n");
+ Inkscape::URI plainInUri(xmlpath);
+ Inkscape::IO::UriInputStream ins1(plainInUri);
+
+ Inkscape::URI b64OutUri("crystalegg.xml.b64");
+ Inkscape::IO::UriOutputStream outs1(b64OutUri);
+ Inkscape::IO::Base64OutputStream b64Outs(outs1);
+
+ pipeStream(ins1, b64Outs);
+
+ ins1.close();
+ b64Outs.close();
+
+ printf("######### Base64 In ############\n");
+ Inkscape::URI b64InUri("crystalegg.xml.b64");
+ Inkscape::IO::UriInputStream ins2(b64InUri);
+ Inkscape::IO::Base64InputStream b64Ins(ins2);
+
+ Inkscape::URI plainOutUri("crystalegg.xml.b64dec");
+ Inkscape::IO::UriOutputStream outs2(plainOutUri);
+
+ pipeStream(b64Ins, outs2);
+
+ outs2.close();
+ b64Ins.close();
+
+ return true;
+}
+
+bool testXslt()
+{
+ printf("######### XSLT Sheet ############\n");
+ Inkscape::URI xsltSheetUri(xslpath);
+ Inkscape::IO::UriInputStream xsltSheetIns(xsltSheetUri);
+ Inkscape::IO::XsltStyleSheet stylesheet(xsltSheetIns);
+ xsltSheetIns.close();
+
+ Inkscape::URI sourceUri(xmlpath);
+ Inkscape::IO::UriInputStream xmlIns(sourceUri);
+
+ printf("######### XSLT Input ############\n");
+ Inkscape::URI destUri("test.html");
+ Inkscape::IO::UriOutputStream xmlOuts(destUri);
+
+ Inkscape::IO::XsltInputStream xsltIns(xmlIns, stylesheet);
+ pipeStream(xsltIns, xmlOuts);
+ xsltIns.close();
+ xmlOuts.close();
+
+
+ printf("######### XSLT Output ############\n");
+
+ Inkscape::IO::UriInputStream xmlIns2(sourceUri);
+
+ Inkscape::URI destUri2("test2.html");
+ Inkscape::IO::UriOutputStream xmlOuts2(destUri2);
+
+ Inkscape::IO::XsltOutputStream xsltOuts(xmlOuts2, stylesheet);
+ pipeStream(xmlIns2, xsltOuts);
+ xmlIns2.close();
+ xsltOuts.close();
+
+ return true;
+}
+
+bool testGzip()
+{
+
+ printf("######### Gzip Output ############\n");
+ Inkscape::URI gzUri("test.gz");
+ Inkscape::URI sourceUri(xmlpath);
+ Inkscape::IO::UriInputStream sourceIns(sourceUri);
+ Inkscape::IO::UriOutputStream gzOuts(gzUri);
+
+ Inkscape::IO::GzipOutputStream gzipOuts(gzOuts);
+ pipeStream(sourceIns, gzipOuts);
+ sourceIns.close();
+ gzipOuts.close();
+
+ printf("######### Gzip Input ############\n");
+
+ Inkscape::IO::UriInputStream gzIns(gzUri);
+ Inkscape::URI destUri("crystalegg2.xml");
+ Inkscape::IO::UriOutputStream destOuts(destUri);
+
+ Inkscape::IO::GzipInputStream gzipIns(gzIns);
+ pipeStream(gzipIns, destOuts);
+ gzipIns.close();
+ destOuts.close();
+
+ return true;
+}
+
+bool doTest()
+{
+ if (!testUriStream())
+ {
+ return false;
+ }
+ if (!testWriter())
+ {
+ return false;
+ }
+ if (!testStdWriter())
+ {
+ return false;
+ }
+ if (!testBase64())
+ {
+ return false;
+ }
+ if (!testXslt())
+ {
+ return false;
+ }
+ if (!testGzip())
+ {
+ return false;
+ }
+ return true;
+}
+
+void path_init(char *path, char *name)
+{
+ if (strlen(name)>PATH_MAX-strlen(myself))
+ {
+ printf("merging paths would be too long\n");
+ exit(1);
+ }
+ strncpy(path,myself,PATH_MAX);
+ char * ptr = strrchr(path,'/');
+ if (!ptr)
+ {
+ printf("path '%s' is missing any slashes\n",path);
+ exit(1);
+ }
+ strncpy(ptr+1,name,strlen(name)+1);
+ path[PATH_MAX-1] = '\0';
+ printf("'%s'\n",path);
+}
+
+
+int main(int argc, char **argv)
+{
+ if (!realpath(argv[0],myself))
+ {
+ perror("realpath");
+ return 1;
+ }
+ path_init(xmlpath,xmlname);
+ path_init(xslpath,xslname);
+
+ // create temp files somewhere else instead of current dir
+ // TODO: clean them up too
+ char * testpath = strdup("/tmp/streamtest-XXXXXX");
+ char * testpath2;
+ testpath2 = mkdtemp(testpath);
+ free(testpath);
+ if (!testpath2)
+ {
+ perror("mkdtemp");
+ return 1;
+ }
+ if (chdir(testpath2))
+ {
+ perror("chdir");
+ return 1;
+ }
+
+ if (!doTest())
+ {
+ printf("#### Test failed\n");
+ return 1;
+ }
+ else
+ {
+ printf("##### Test succeeded\n");
+ }
+ return 0;
+}