1 #include <stdlib.h>
2 #include <glib.h>
3 #include "../utest/utest.h"
5 #include "repr.h"
6 #include "event-fns.h"
8 int main(int argc, char *argv[]) {
9 Inkscape::XML::Document *document;
10 Inkscape::XML::Node *a, *b, *c, *root;
12 Inkscape::GC::init();
14 document = sp_repr_document_new("test");
15 root = sp_repr_document_root(document);
17 utest_start("XML Transactions");
19 a = sp_repr_new("a");
20 b = sp_repr_new("b");
21 c = sp_repr_new("c");
23 UTEST_TEST("rollback of node addition") {
24 sp_repr_begin_transaction(document);
25 UTEST_ASSERT(sp_repr_parent(a) == NULL);
27 root->appendChild(a);
28 UTEST_ASSERT(sp_repr_parent(a) == root);
30 sp_repr_rollback(document);
31 UTEST_ASSERT(sp_repr_parent(a) == NULL);
32 }
34 UTEST_TEST("rollback of node removal") {
35 root->appendChild(a);
37 sp_repr_begin_transaction(document);
38 UTEST_ASSERT(sp_repr_parent(a) == root);
40 sp_repr_unparent(a);
41 UTEST_ASSERT(sp_repr_parent(a) == NULL);
43 sp_repr_rollback(document);
44 UTEST_ASSERT(sp_repr_parent(a) == root);
45 }
47 sp_repr_unparent(a);
49 UTEST_TEST("rollback of node reordering") {
50 root->appendChild(a);
51 root->appendChild(b);
52 root->appendChild(c);
54 sp_repr_begin_transaction(document);
55 UTEST_ASSERT(sp_repr_next(a) == b);
56 UTEST_ASSERT(sp_repr_next(b) == c);
57 UTEST_ASSERT(sp_repr_next(c) == NULL);
59 root->changeOrder(b, c);
60 UTEST_ASSERT(sp_repr_next(a) == c);
61 UTEST_ASSERT(sp_repr_next(b) == NULL);
62 UTEST_ASSERT(sp_repr_next(c) == b);
64 sp_repr_rollback(document);
65 UTEST_ASSERT(sp_repr_next(a) == b);
66 UTEST_ASSERT(sp_repr_next(b) == c);
67 UTEST_ASSERT(sp_repr_next(c) == NULL);
68 }
70 sp_repr_unparent(a);
71 sp_repr_unparent(b);
72 sp_repr_unparent(c);
74 /* lots more tests needed ... */
76 return utest_end() ? 0 : 1;
77 }