ef6871dc766027cbbb54149eb1a5670f99eea965
[ardour.git] / libs / canvas / test / xml.cc
1 #include "pbd/xml++.h"
2 #include "xml.h"
3 #include "canvas/canvas.h"
4 #include "canvas/rectangle.h"
5 #include "canvas/line.h"
6
7 CPPUNIT_TEST_SUITE_REGISTRATION (XMLTest);
8
9 using namespace std;
10 using namespace ArdourCanvas;
11
12 void
13 XMLTest::check (string const & name)
14 {
15         stringstream s;
16         s << "diff -q " << name << ".xml " << "../../libs/canvas/test/" << name << ".xml";
17         int r = system (s.str().c_str());
18         CPPUNIT_ASSERT (WEXITSTATUS (r) == 0);
19 }
20
21 void
22 XMLTest::get ()
23 {
24         ImageCanvas canvas;
25
26         Rectangle r (canvas.root(), Rect (0, 0, 16, 16));
27         r.set_outline_color (0x12345678);
28         Group g (canvas.root());
29         g.set_position (Duple (64, 72));
30         Line l (&g);
31         l.set (Duple (41, 43), Duple (44, 46));
32         
33         XMLTree* tree = canvas.get_state ();
34         tree->write ("test.xml");
35
36         check ("test");
37 }
38
39 void
40 XMLTest::set ()
41 {
42         XMLTree* tree = new XMLTree ("../../libs/canvas/test/test.xml");
43         ImageCanvas canvas (tree);
44
45         list<Item*> root_items = canvas.root()->items ();
46         CPPUNIT_ASSERT (root_items.size() == 2);
47
48         list<Item*>::iterator i = root_items.begin();
49         Rectangle* r = dynamic_cast<Rectangle*> (*i++);
50         CPPUNIT_ASSERT (r);
51         CPPUNIT_ASSERT (r->outline_color() == 0x12345678);
52         CPPUNIT_ASSERT (dynamic_cast<Group*> (*i++));
53 }