1 #include <cxxtest/TestSuite.h>
3 #include <cstdlib>
4 #include <glib.h>
6 #include "repr.h"
7 #include "event-fns.h"
9 static void * const null_ptr = 0;
11 class XmlReprActionTest : public CxxTest::TestSuite
12 {
13 Inkscape::XML::Document *document;
14 Inkscape::XML::Node *a, *b, *c, *root;
16 public:
18 XmlReprActionTest()
19 {
20 Inkscape::GC::init();
22 document = sp_repr_document_new("test");
23 root = document->root();
25 a = document->createElement("a");
26 b = document->createElement("b");
27 c = document->createElement("c");
28 }
29 virtual ~XmlReprActionTest() {}
31 // createSuite and destroySuite get us per-suite setup and teardown
32 // without us having to worry about static initialization order, etc.
33 static XmlReprActionTest *createSuite() { return new XmlReprActionTest(); }
34 static void destroySuite( XmlReprActionTest *suite ) { delete suite; }
36 void testRollbackOfNodeAddition()
37 {
38 sp_repr_begin_transaction(document);
39 TS_ASSERT_EQUALS(sp_repr_parent(a) , null_ptr);
41 root->appendChild(a);
42 TS_ASSERT_EQUALS(sp_repr_parent(a) , root);
44 sp_repr_rollback(document);
45 TS_ASSERT_EQUALS(sp_repr_parent(a) , null_ptr);
46 }
48 void testRollbackOfNodeRemoval()
49 {
50 root->appendChild(a);
52 sp_repr_begin_transaction(document);
53 TS_ASSERT_EQUALS(sp_repr_parent(a) , root);
55 sp_repr_unparent(a);
56 TS_ASSERT_EQUALS(sp_repr_parent(a) , null_ptr);
58 sp_repr_rollback(document);
59 TS_ASSERT_EQUALS(sp_repr_parent(a) , root);
61 sp_repr_unparent(a);
62 }
64 void testRollbackOfNodeReordering()
65 {
66 root->appendChild(a);
67 root->appendChild(b);
68 root->appendChild(c);
70 sp_repr_begin_transaction(document);
71 TS_ASSERT_EQUALS(sp_repr_next(a) , b);
72 TS_ASSERT_EQUALS(sp_repr_next(b) , c);
73 TS_ASSERT_EQUALS(sp_repr_next(c) , null_ptr);
75 root->changeOrder(b, c);
76 TS_ASSERT_EQUALS(sp_repr_next(a) , c);
77 TS_ASSERT_EQUALS(sp_repr_next(b) , null_ptr);
78 TS_ASSERT_EQUALS(sp_repr_next(c) , b);
80 sp_repr_rollback(document);
81 TS_ASSERT_EQUALS(sp_repr_next(a) , b);
82 TS_ASSERT_EQUALS(sp_repr_next(b) , c);
83 TS_ASSERT_EQUALS(sp_repr_next(c) , null_ptr);
85 sp_repr_unparent(a);
86 sp_repr_unparent(b);
87 sp_repr_unparent(c);
88 }
90 /* lots more tests needed ... */
92 };
94 /*
95 Local Variables:
96 mode:c++
97 c-file-style:"stroustrup"
98 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
99 indent-tabs-mode:nil
100 fill-column:99
101 End:
102 */
103 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :