1 #include <cstdlib>
2 #include <glib.h>
3 #include "../utest/utest.h"
5 #include "repr.h"
6 #include "event-fns.h"
8 int sp_main_gui (int, char const**) { return 0; }
9 int sp_main_console (int, char const**) { return 0; }
11 int main(int /*argc*/, char */*argv*/[]) {
12 Inkscape::XML::Document *document;
13 Inkscape::XML::Node *a, *b, *c, *root;
15 Inkscape::GC::init();
17 document = sp_repr_document_new("test");
18 root = document->root();
20 utest_start("XML Transactions");
22 a = document->createElement("a");
23 b = document->createElement("b");
24 c = document->createElement("c");
26 UTEST_TEST("rollback of node addition") {
27 sp_repr_begin_transaction(document);
28 UTEST_ASSERT(sp_repr_parent(a) == NULL);
30 root->appendChild(a);
31 UTEST_ASSERT(sp_repr_parent(a) == root);
33 sp_repr_rollback(document);
34 UTEST_ASSERT(sp_repr_parent(a) == NULL);
35 }
37 UTEST_TEST("rollback of node removal") {
38 root->appendChild(a);
40 sp_repr_begin_transaction(document);
41 UTEST_ASSERT(sp_repr_parent(a) == root);
43 sp_repr_unparent(a);
44 UTEST_ASSERT(sp_repr_parent(a) == NULL);
46 sp_repr_rollback(document);
47 UTEST_ASSERT(sp_repr_parent(a) == root);
48 }
50 sp_repr_unparent(a);
52 UTEST_TEST("rollback of node reordering") {
53 root->appendChild(a);
54 root->appendChild(b);
55 root->appendChild(c);
57 sp_repr_begin_transaction(document);
58 UTEST_ASSERT(sp_repr_next(a) == b);
59 UTEST_ASSERT(sp_repr_next(b) == c);
60 UTEST_ASSERT(sp_repr_next(c) == NULL);
62 root->changeOrder(b, c);
63 UTEST_ASSERT(sp_repr_next(a) == c);
64 UTEST_ASSERT(sp_repr_next(b) == NULL);
65 UTEST_ASSERT(sp_repr_next(c) == b);
67 sp_repr_rollback(document);
68 UTEST_ASSERT(sp_repr_next(a) == b);
69 UTEST_ASSERT(sp_repr_next(b) == c);
70 UTEST_ASSERT(sp_repr_next(c) == NULL);
71 }
73 sp_repr_unparent(a);
74 sp_repr_unparent(b);
75 sp_repr_unparent(c);
77 /* lots more tests needed ... */
79 return utest_end() ? 0 : 1;
80 }