summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp180
1 files changed, 180 insertions, 0 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp
new file mode 100644
index 00000000000..06a9e7ce0dc
--- /dev/null
+++ b/Build/source/texk/dvisvgm/dvisvgm-1.2.2/tests/PSInterpreterTest.cpp
@@ -0,0 +1,180 @@
+/*************************************************************************
+** PSInterpreterTest.cpp **
+** **
+** This file is part of dvisvgm -- the DVI to SVG converter **
+** Copyright (C) 2005-2013 Martin Gieseking <martin.gieseking@uos.de> **
+** **
+** This program is free software; you can redistribute it and/or **
+** modify it under the terms of the GNU General Public License as **
+** published by the Free Software Foundation; either version 3 of **
+** the License, or (at your option) any later version. **
+** **
+** This program is distributed in the hope that it will be useful, but **
+** WITHOUT ANY WARRANTY; without even the implied warranty of **
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
+** GNU General Public License for more details. **
+** **
+** You should have received a copy of the GNU General Public License **
+** along with this program; if not, see <http://www.gnu.org/licenses/>. **
+*************************************************************************/
+
+#include <gtest/gtest.h>
+#include "PSInterpreter.h"
+
+#include <sstream>
+#include <vector>
+
+using namespace std;
+
+class PSTestActions : public PSActions
+{
+ public:
+ void applyscalevals (vector<double> &p) {print("applyscalevals", p);}
+ void clip (vector<double> &p) {print("clip", p);}
+ void closepath (vector<double> &p) {print("closepath", p);}
+ void curveto (vector<double> &p) {print("curveto", p);}
+ void eoclip (vector<double> &p) {print("eoclip", p);}
+ void eofill (vector<double> &p) {print("eofill", p);}
+ void fill (vector<double> &p) {print("fill", p);}
+ void gsave (vector<double> &p) {print("gsave", p);}
+ void grestore (vector<double> &p) {print("grestore", p);}
+ void grestoreall(std::vector<double> &p) {print("grestoreall", p);}
+ void initclip (vector<double> &p) {print("initclip", p);}
+ void lineto (vector<double> &p) {print("lineto", p);}
+ void moveto (vector<double> &p) {print("moveto", p);}
+ void makepattern (vector<double> &p) {print("makepattern", p);}
+ void setpattern (vector<double> &p) {print("setpattern", p);}
+ void newpath (vector<double> &p) {print("newpath", p);}
+ void querypos (vector<double> &p) {print("querypos", p);}
+ void restore(std::vector<double> &p) {print("restore", p);}
+ void rotate (vector<double> &p) {print("rotate", p);}
+ void save(std::vector<double> &p) {print("save", p);}
+ void scale (vector<double> &p) {print("scale", p);}
+ void setcmykcolor (vector<double> &p) {print("setcmykcolor", p);}
+ void setdash (vector<double> &p) {print("setdash", p);}
+ void setgray (vector<double> &p) {print("setgray", p);}
+ void sethsbcolor (vector<double> &p) {print("sethsbcolor", p);}
+ void setlinecap (vector<double> &p) {print("setlinecap", p);}
+ void setlinejoin (vector<double> &p) {print("setlinejoin", p);}
+ void setlinewidth (vector<double> &p) {print("setlinewidth", p);}
+ void setmatrix (vector<double> &p) {print("setmatrix", p);}
+ void setmiterlimit (vector<double> &p) {print("setmiterlimit", p);}
+ void setopacityalpha (vector<double> &p) {print("setopacityalpha", p);}
+ void setrgbcolor (vector<double> &p) {print("setrgbcolor", p);}
+ void stroke (vector<double> &p) {print("stroke", p);}
+ void translate (vector<double> &p) {print("translate", p);}
+
+
+ string result () const {return _oss.str();}
+ void clear () {_oss.str("");}
+
+ protected:
+ void print (const char *op, const vector<double> &p) {
+ _oss << op;
+ for (size_t i=0; i < p.size(); ++i)
+ _oss << ' ' << p[i];
+ _oss << ';';
+ }
+
+ private:
+ ostringstream _oss;
+};
+
+
+TEST(PSInterpreterTest, init) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ ASSERT_TRUE(psi.active());
+ ASSERT_EQ(actions.result(), "");
+}
+
+
+TEST(PSInterpreterTest, gsave_grestore) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("gsave ");
+ ASSERT_EQ(actions.result(), "gsave;");
+ actions.clear();
+
+ psi.execute("grestore ");
+ ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setrgbcolor 0 0 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;");
+ actions.clear();
+
+ psi.execute("1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit ");
+ ASSERT_EQ(actions.result(), "setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;");
+ actions.clear();
+
+ psi.execute("grestore ");
+ ASSERT_EQ(actions.result(), "setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setrgbcolor 0 1 0;setmatrix 1 0 0 1 0 0;setdash 0;grestore;");
+}
+
+
+TEST(PSInterpreterTest, stroke_fill) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath stroke ");
+ ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;");
+ actions.clear();
+
+ psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath fill ");
+ ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;");
+}
+
+
+TEST(PSInterpreterTest, clip) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("initclip ");
+ ASSERT_EQ(actions.result(), "initclip;");
+ actions.clear();
+
+ psi.execute("0 0 moveto 10 10 lineto 0 10 lineto closepath clip ");
+ ASSERT_EQ(actions.result(), "newpath;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;");
+}
+
+
+TEST(PSInterpreterTest, transform) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("10 10 scale 90 rotate 100 -100 translate ");
+ ASSERT_EQ(actions.result(), "scale 10 10;rotate 90;translate 100 -100;");
+}
+
+
+TEST(PSInterpreterTest, calculate) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("2 3 add 4 mul 5 div rotate ");
+ ASSERT_EQ(actions.result(), "rotate 4;");
+}
+
+
+TEST(PSInterpreterTest, setlinewidth) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("10 setlinewidth ");
+ ASSERT_EQ(actions.result(), "applyscalevals 1 1 1;setlinewidth 10;");
+ actions.clear();
+
+ psi.execute("5 5 scale 10 setlinewidth ");
+ ASSERT_EQ(actions.result(), "scale 5 5;applyscalevals 5 5 1;setlinewidth 10;");
+ actions.clear();
+
+ psi.execute("90 rotate 10 setlinewidth ");
+ ASSERT_EQ(actions.result(), "rotate 90;applyscalevals 5 5 0;setlinewidth 10;");
+ actions.clear();
+
+ psi.execute("-30 rotate 10 setlinewidth ");
+ ASSERT_EQ(actions.result(), "rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;");
+}
+
+
+TEST(PSInterpreterTest, matrix) {
+ PSTestActions actions;
+ PSInterpreter psi(&actions);
+ psi.execute("matrix setmatrix ");
+ ASSERT_EQ(actions.result(), "setmatrix 1 0 0 1 0 0;");
+ actions.clear();
+ psi.execute("10 100 translate 30 rotate matrix currentmatrix setmatrix ");
+ ASSERT_EQ(actions.result(), "translate 10 100;rotate 30;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;");
+}