Code

8fe1327aff29e11551f8f084c6e8f62ac03a7b83
[inkscape.git] / src / xml / repr-action-test.h
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:encoding=utf-8:textwidth=99 :