Code

Merge from trunk.
[inkscape.git] / src / style-test.h
index 135d03927ee47e8b6234401988410f058d1d6024..064773d1d97a64e81bcd52539c8d9aadbf2a3ac2 100644 (file)
-
 #ifndef SEEN_STYLE_TEST_H
 #define SEEN_STYLE_TEST_H
 
 #include <cxxtest/TestSuite.h>
 
+#include "test-helpers.h"
+
+#include "style.h"
 
 class StyleTest : public CxxTest::TestSuite
 {
 public:
+    SPDocument* _doc;
+
+    StyleTest() :
+        _doc(0)
+    {
+    }
+
+    virtual ~StyleTest()
+    {
+        if ( _doc )
+        {
+            _doc->doUnref();
+            _doc = 0;
+        }
+    }
+
+    static void createSuiteSubclass( StyleTest*& dst )
+    {
+        dst = new StyleTest();
+    }
+
+// createSuite and destroySuite get us per-suite setup and teardown
+// without us having to worry about static initialization order, etc.
+    static StyleTest *createSuite()
+    {
+        StyleTest* suite = Inkscape::createSuiteAndDocument<StyleTest>( createSuiteSubclass );
+        return suite;
+    }
+
+    static void destroySuite( StyleTest *suite )
+    {
+        delete suite;
+    }
+
+    // ---------------------------------------------------------------
+    // ---------------------------------------------------------------
+    // ---------------------------------------------------------------
+
+    void testOne()
+    {
+        struct TestCase {
+            TestCase(gchar const* src, gchar const* dst = 0, gchar const* uri = 0) : src(src), dst(dst), uri(uri) {}
+            gchar const* src;
+            gchar const* dst;
+            gchar const* uri;
+        };
+
+        TestCase cases[] = {
+            TestCase("fill:none"),
+            TestCase("fill:currentColor"),
+            TestCase("fill:#ff00ff"),
+
+            TestCase("fill:rgb(100%, 0%, 100%)", "fill:#ff00ff"),
+            // TODO - fix this to preserve the string
+            TestCase("fill:url(#painter) rgb(100%, 0%, 100%)",
+                     "fill:url(#painter) #ff00ff", "#painter"),
+
+            TestCase("fill:rgb(255, 0, 255)", "fill:#ff00ff"),
+            // TODO - fix this to preserve the string
+            TestCase("fill:url(#painter) rgb(255, 0, 255)",
+                     "fill:url(#painter) #ff00ff", "#painter"),
+
+
+//             TestCase("fill:#ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)"),
+
+            TestCase("fill:url(#painter)", 0, "#painter"),
+            TestCase("fill:url(#painter) none", 0, "#painter"),
+            TestCase("fill:url(#painter) currentColor", 0, "#painter"),
+            TestCase("fill:url(#painter) #ff00ff", 0, "#painter"),
+//             TestCase("fill:url(#painter) rgb(100%, 0%, 100%)", 0, "#painter"),
+//             TestCase("fill:url(#painter) rgb(255, 0, 255)", 0, "#painter"),
+
+            TestCase("fill:url(#painter) #ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)", 0, "#painter"),
+
+//             TestCase("fill:url(#painter) inherit", 0, "#painter"),
+            TestCase("fill:inherit"),
+            TestCase(0)
+        };
+
+        for ( gint i = 0; cases[i].src; i++ ) {
+            SPStyle *style = sp_style_new(_doc);
+            TS_ASSERT(style);
+            if ( style ) {
+                sp_style_merge_from_style_string( style, cases[i].src );
+
+                if ( cases[i].uri ) {
+                    TSM_ASSERT( cases[i].src, style->fill.value.href );
+                    if ( style->fill.value.href ) {
+                        TS_ASSERT_EQUALS( style->fill.value.href->getURI()->toString(), std::string(cases[i].uri) );
+                    }
+                } else {
+                    TS_ASSERT( !style->fill.value.href || !style->fill.value.href->getObject() );
+                }
+
+                gchar *str0_set = sp_style_write_string( style, SP_STYLE_FLAG_IFSET );
+                //printf("<<%s>>\n", str0_set);
+                if ( cases[i].dst ) {
+                    TS_ASSERT_EQUALS( std::string(str0_set), std::string(cases[i].dst) );
+                } else {
+                    TS_ASSERT_EQUALS( std::string(str0_set), std::string(cases[i].src) );
+                }
 
+                g_free(str0_set);
+                sp_style_unref(style);
+            }
+        }
+    }
 
 };
 
@@ -24,4 +132,4 @@ public:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :