1 #include "attributes.h"
2 #include "document.h"
3 #include "inkscape-private.h"
4 #include "sp-style-elem.h"
5 #include "streq.h"
6 #include "utest/utest.h"
7 #include "xml/repr.h"
9 /// Dummy functions to keep linker happy
10 int sp_main_gui (int, char const**) { return 0; }
11 int sp_main_console (int, char const**) { return 0; }
13 static bool
14 test_style_elem()
15 {
16 utest_start("SPStyleElem");
17 //#if 0
18 UTEST_TEST("init") {
19 SPStyleElem *style_elem = static_cast<SPStyleElem *>(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
20 UTEST_ASSERT(!style_elem->is_css);
21 UTEST_ASSERT(style_elem->media.print);
22 UTEST_ASSERT(style_elem->media.screen);
23 g_object_unref(style_elem);
24 }
25 //#endif
27 /* Create the global inkscape object. */
28 static_cast<void>(g_object_new(inkscape_get_type(), NULL));
30 //#if 0
31 SPDocument *doc = sp_document_new_dummy();
33 UTEST_TEST("sp_object_set(\"type\")") {
34 SPStyleElem *style_elem = static_cast<SPStyleElem *>(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
35 SP_OBJECT(style_elem)->document = doc;
36 sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "something unrecognized");
37 UTEST_ASSERT(!style_elem->is_css);
38 sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/css");
39 UTEST_ASSERT(style_elem->is_css);
40 sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "atext/css");
41 UTEST_ASSERT(!style_elem->is_css);
42 sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/cssx");
43 UTEST_ASSERT(!style_elem->is_css);
44 g_object_unref(style_elem);
45 }
47 UTEST_TEST("write") {
48 SPStyleElem *style_elem = SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
49 SP_OBJECT(style_elem)->document = doc;
50 sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/css");
51 Inkscape::XML::Node *repr = sp_repr_new("svg:style");
52 SP_OBJECT(style_elem)->updateRepr(repr, SP_OBJECT_WRITE_ALL);
53 {
54 gchar const *typ = repr->attribute("type");
55 UTEST_ASSERT(streq(typ, "text/css"));
56 }
57 g_object_unref(style_elem);
58 }
60 UTEST_TEST("build") {
61 SPStyleElem &style_elem = *SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
62 Inkscape::XML::Node *const repr = sp_repr_new("svg:style");
63 repr->setAttribute("type", "text/css");
64 sp_object_invoke_build(&style_elem, doc, repr, false);
65 UTEST_ASSERT(style_elem.is_css);
66 UTEST_ASSERT(style_elem.media.print);
67 UTEST_ASSERT(style_elem.media.screen);
69 /* Some checks relevant to the read_content test below. */
70 {
71 g_assert(doc->style_cascade);
72 CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(doc->style_cascade, ORIGIN_AUTHOR);
73 g_assert(stylesheet);
74 g_assert(stylesheet->statements == NULL);
75 }
77 g_object_unref(&style_elem);
78 Inkscape::GC::release(repr);
79 }
81 UTEST_TEST("read_content") {
82 SPStyleElem &style_elem = *SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
83 Inkscape::XML::Node *const repr = sp_repr_new("svg:style");
84 repr->setAttribute("type", "text/css");
85 Inkscape::XML::Node *const content_repr = sp_repr_new_text(".myclass { }");
86 repr->addChild(content_repr, NULL);
87 sp_object_invoke_build(&style_elem, doc, repr, false);
88 UTEST_ASSERT(style_elem.is_css);
89 UTEST_ASSERT(doc->style_cascade);
90 CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(doc->style_cascade, ORIGIN_AUTHOR);
91 UTEST_ASSERT(stylesheet != NULL);
92 UTEST_ASSERT(stylesheet->statements != NULL);
93 g_object_unref(&style_elem);
94 Inkscape::GC::release(repr);
95 }
96 //#endif
97 return utest_end();
98 }
100 int main()
101 {
102 g_type_init();
103 Inkscape::GC::init();
104 return ( test_style_elem()
105 ? EXIT_SUCCESS
106 : EXIT_FAILURE );
107 }
109 /*
110 Local Variables:
111 mode:c++
112 c-file-style:"stroustrup"
113 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
114 indent-tabs-mode:nil
115 fill-column:99
116 End:
117 */
118 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :