diff options
46 files changed, 416 insertions, 372 deletions
diff --git a/tests/layouts/valid-1.layout b/tests/layouts/valid-1.layout new file mode 100644 index 00000000..9289830b --- /dev/null +++ b/tests/layouts/valid-1.layout @@ -0,0 +1,20 @@ +{ + "text" : "This is a test of the automatic emergency brake!\n", + "attributes" : [ + { + "start" : 22, + "end" : 41, + "type" : "foreground", + "value" : "#00000000ffff" + }, + { + "start" : 22, + "end" : 41, + "type" : "underline", + "value" : "single" + } + ], + "font" : "Cantarell 11", + "ellipsize" : "end", + "width" : 225280 +} diff --git a/tests/layouts/valid-1.markup b/tests/layouts/valid-1.markup deleted file mode 100644 index 780e6831..00000000 --- a/tests/layouts/valid-1.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=220,ellipsize=end -This is a test of the <span foreground="#0000ff" underline="single">automatic emergency</span> brake! diff --git a/tests/layouts/valid-10.layout b/tests/layouts/valid-10.layout new file mode 100644 index 00000000..0d36a38d --- /dev/null +++ b/tests/layouts/valid-10.layout @@ -0,0 +1,8 @@ +{ + "text" : "Hello שלום Γειά σας\n", + "attributes" : [], + "font" : "Cantarell 11", + "justify" : true, + "ellipsize" : "end", + "width" : 102400 +} diff --git a/tests/layouts/valid-10.markup b/tests/layouts/valid-10.markup deleted file mode 100644 index 15bf693d..00000000 --- a/tests/layouts/valid-10.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=100,justify=true,ellipsize=end -Hello שלום Γειά σας diff --git a/tests/layouts/valid-11.layout b/tests/layouts/valid-11.layout new file mode 100644 index 00000000..a044cc53 --- /dev/null +++ b/tests/layouts/valid-11.layout @@ -0,0 +1,42 @@ +{ + "text" : "double low error\n", + "attributes" : [ + { + "end" : 6, + "type" : "underline", + "value" : "double" + }, + { + "end" : 6, + "type" : "overline", + "value" : "single" + }, + { + "start" : 7, + "end" : 10, + "type" : "underline", + "value" : "low" + }, + { + "start" : 7, + "end" : 10, + "type" : "strikethrough", + "value" : true + }, + { + "start" : 11, + "end" : 16, + "type" : "underline", + "value" : "error" + }, + { + "start" : 11, + "end" : 16, + "type" : "rise", + "value" : 1024 + } + ], + "font" : "Cantarell 11", + "wrap" : "char", + "width" : 225280 +} diff --git a/tests/layouts/valid-11.markup b/tests/layouts/valid-11.markup deleted file mode 100644 index fbf1abd2..00000000 --- a/tests/layouts/valid-11.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=220,wrap=char -<span underline='double' overline='single'>double</span> <span underline='low' strikethrough='true'>low</span> <span underline='error' rise='1024'>error</span> diff --git a/tests/layouts/valid-12.layout b/tests/layouts/valid-12.layout new file mode 100644 index 00000000..1c9fa227 --- /dev/null +++ b/tests/layouts/valid-12.layout @@ -0,0 +1,15 @@ +{ + "text" : "a b c d
e f g h\n", + "attributes" : [], + "font" : "Cantarell 11", + "tabs" : { + "positions-in-pixels" : true, + "positions" : [ + 0, + 50, + 100, + 150, + 200 + ] + } +} diff --git a/tests/layouts/valid-12.markup b/tests/layouts/valid-12.markup deleted file mode 100644 index b7306cc6..00000000 --- a/tests/layouts/valid-12.markup +++ /dev/null @@ -1,2 +0,0 @@ -wrap=word,tabs=0 50 100 150 200 -a b c d
e f g h diff --git a/tests/layouts/valid-13.layout b/tests/layouts/valid-13.layout new file mode 100644 index 00000000..a9f10f86 --- /dev/null +++ b/tests/layouts/valid-13.layout @@ -0,0 +1,16 @@ +{ + "text" : "a b c d
e f g h\n", + "attributes" : [], + "font" : "Cantarell 11", + "tabs" : { + "positions-in-pixels" : true, + "positions" : [ + 0, + 50, + 100, + 150, + 200 + ] + }, + "single-paragraph" : true +} diff --git a/tests/layouts/valid-13.markup b/tests/layouts/valid-13.markup deleted file mode 100644 index be2345d1..00000000 --- a/tests/layouts/valid-13.markup +++ /dev/null @@ -1,2 +0,0 @@ -wrap=word,tabs=0 50 100 150 200,single_paragraph=true -a b c d
e f g h diff --git a/tests/layouts/valid-14.layout b/tests/layouts/valid-14.layout new file mode 100644 index 00000000..116cc94f --- /dev/null +++ b/tests/layouts/valid-14.layout @@ -0,0 +1,8 @@ +{ + "text" : "你好 Hello שלום Γειά σας\n", + "attributes" : [], + "font" : "Cantarell 11", + "ellipsize" : "start", + "width" : 161792, + "line-spacing" : 1.5 +} diff --git a/tests/layouts/valid-14.markup b/tests/layouts/valid-14.markup deleted file mode 100644 index 1d556d26..00000000 --- a/tests/layouts/valid-14.markup +++ /dev/null @@ -1,2 +0,0 @@ -line_spacing=1.5,width=158,ellipsize=start -你好 Hello שלום Γειά σας diff --git a/tests/layouts/valid-15.layout b/tests/layouts/valid-15.layout new file mode 100644 index 00000000..9f584ba6 --- /dev/null +++ b/tests/layouts/valid-15.layout @@ -0,0 +1,8 @@ +{ + "text" : "Lets see if this text is long enough to wrap due to height limitations. It might, or it might not.\n", + "attributes" : [], + "font" : "Cantarell 11", + "ellipsize" : "end", + "width" : 153600, + "height" : 40960 +} diff --git a/tests/layouts/valid-15.markup b/tests/layouts/valid-15.markup deleted file mode 100644 index e3081c81..00000000 --- a/tests/layouts/valid-15.markup +++ /dev/null @@ -1,2 +0,0 @@ -ellipsize=end,height=40,width=150 -Lets see if this text is long enough to wrap due to height limitations. It might, or it might not. diff --git a/tests/layouts/valid-16.layout b/tests/layouts/valid-16.layout new file mode 100644 index 00000000..e2a82d96 --- /dev/null +++ b/tests/layouts/valid-16.layout @@ -0,0 +1,9 @@ +{ + "text" : "Lets see if this text is long enough to wrap due to height limitations. It might, or it might not.\n", + "attributes" : [], + "font" : "Cantarell 11", + "wrap" : "word-char", + "ellipsize" : "end", + "width" : 153600, + "height" : -2 +} diff --git a/tests/layouts/valid-16.markup b/tests/layouts/valid-16.markup deleted file mode 100644 index 91a8ae37..00000000 --- a/tests/layouts/valid-16.markup +++ /dev/null @@ -1,2 +0,0 @@ -wrap=word-char,ellipsize=end,width=150,height=-2 -Lets see if this text is long enough to wrap due to height limitations. It might, or it might not. diff --git a/tests/layouts/valid-17.layout b/tests/layouts/valid-17.layout new file mode 100644 index 00000000..062cc241 --- /dev/null +++ b/tests/layouts/valid-17.layout @@ -0,0 +1,7 @@ +{ + "text" : "some|bla|bla|bla\n", + "attributes" : [], + "font" : "Cantarell 11", + "justify" : true, + "width" : 102400 +} diff --git a/tests/layouts/valid-17.markup b/tests/layouts/valid-17.markup deleted file mode 100644 index d804c20a..00000000 --- a/tests/layouts/valid-17.markup +++ /dev/null @@ -1,2 +0,0 @@ -justify=true,width=100 -some|bla|bla|bla diff --git a/tests/layouts/valid-18.layout b/tests/layouts/valid-18.layout new file mode 100644 index 00000000..85e9a7d1 --- /dev/null +++ b/tests/layouts/valid-18.layout @@ -0,0 +1,11 @@ +{ + "text" : "some line breaks
and miscellaneous ignorables\n", + "attributes" : [ + { + "end" : 57, + "type" : "show", + "value" : 7 + } + ], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-18.markup b/tests/layouts/valid-18.markup deleted file mode 100644 index ab5f5f35..00000000 --- a/tests/layouts/valid-18.markup +++ /dev/null @@ -1,2 +0,0 @@ - -<span show="spaces|line-breaks|ignorables">some line breaks
and miscellaneous ignorables</span> diff --git a/tests/layouts/valid-19.layout b/tests/layouts/valid-19.layout new file mode 100644 index 00000000..32ad1283 --- /dev/null +++ b/tests/layouts/valid-19.layout @@ -0,0 +1,5 @@ +{ + "text" : " a⃠ 😊︎ 😊️ 🇩🇪 ✊ ✋🏾 0 # 🏴 ©\n", + "attributes" : [], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-19.markup b/tests/layouts/valid-19.markup deleted file mode 100644 index e48c9f0e..00000000 --- a/tests/layouts/valid-19.markup +++ /dev/null @@ -1,2 +0,0 @@ -# various Emoji segmentation cases - a⃠ 😊︎ 😊️ 🇩🇪 ✊ ✋🏾 0 # 🏴 © diff --git a/tests/layouts/valid-2.layout b/tests/layouts/valid-2.layout new file mode 100644 index 00000000..303b2b67 --- /dev/null +++ b/tests/layouts/valid-2.layout @@ -0,0 +1,18 @@ +{ + "text" : "test the blue drink after dinner\n", + "attributes" : [ + { + "start" : 9, + "end" : 13, + "type" : "style", + "value" : "italic" + }, + { + "start" : 20, + "end" : 25, + "type" : "underline", + "value" : "single" + } + ], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-2.markup b/tests/layouts/valid-2.markup deleted file mode 100644 index 677f26f8..00000000 --- a/tests/layouts/valid-2.markup +++ /dev/null @@ -1,2 +0,0 @@ - -test the <i>blue</i> drink <u>after</u> dinner diff --git a/tests/layouts/valid-20.layout b/tests/layouts/valid-20.layout new file mode 100644 index 00000000..bde84b6f --- /dev/null +++ b/tests/layouts/valid-20.layout @@ -0,0 +1,22 @@ +{ + "text" : "abcdef\n", + "attributes" : [ + { + "end" : 3, + "type" : "gravity", + "value" : "east" + }, + { + "end" : 3, + "type" : "gravity-hint", + "value" : "strong" + }, + { + "start" : 3, + "end" : 6, + "type" : "gravity", + "value" : "south" + } + ], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-20.markup b/tests/layouts/valid-20.markup deleted file mode 100644 index fe6480d7..00000000 --- a/tests/layouts/valid-20.markup +++ /dev/null @@ -1,2 +0,0 @@ -# exercise gravity handling -<span gravity='east' gravity_hint='strong'>abc</span><span gravity='south'>def</span> diff --git a/tests/layouts/valid-21.expected b/tests/layouts/valid-21.expected deleted file mode 100644 index 5999056f..00000000 --- a/tests/layouts/valid-21.expected +++ /dev/null @@ -1,36 +0,0 @@ -有一位住在石室裏的詩人叫施氏,abc, 愛吃獅子,決心要吃十隻獅子。 - ---- parameters - -wrapped: 0 -ellipsized: 0 -lines: 2 - ---- attributes - -range 0 2147483647 - ---- directions - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - ---- cursor positions - -0(0) 3(0) 6(0) 9(0) 12(0) 15(0) 18(0) 21(0) 24(0) 27(0) 30(0) 33(0) 36(0) 39(0) 42(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 53(0) 56(0) 59(0) 62(0) 65(0) 68(0) 71(0) 74(0) 77(0) 80(0) 83(0) 86(0) 89(0) 89(1) 93(0) - ---- lines - -i=1, index=0, paragraph-start=1, dir=ltr '有一位住在石室裏的詩人叫施氏,abc, 愛吃獅子,決心要吃十隻獅子。 -' -i=2, index=93, paragraph-start=1, dir=ltr '' - ---- runs - -i=1, index=0, chars=14, level=0, gravity=east, flags=1, font=OMITTED, script=han, language=xx, '有一位住在石室裏的詩人叫施氏' -i=2, index=42, chars=1, level=0, gravity=east, flags=1, font=OMITTED, script=han, language=xx, ',' -i=3, index=45, chars=5, level=0, gravity=south, flags=1, font=OMITTED, script=latin, language=en-us, 'abc, ' -i=4, index=50, chars=4, level=0, gravity=east, flags=1, font=OMITTED, script=han, language=xx, '愛吃獅子' -i=5, index=62, chars=1, level=0, gravity=east, flags=1, font=OMITTED, script=han, language=xx, ',' -i=6, index=65, chars=9, level=0, gravity=east, flags=1, font=OMITTED, script=han, language=xx, '決心要吃十隻獅子。' -i=7, index=92, no run, line end -i=8, index=93, no run, line end diff --git a/tests/layouts/valid-21.markup b/tests/layouts/valid-21.markup deleted file mode 100644 index 676a5e56..00000000 --- a/tests/layouts/valid-21.markup +++ /dev/null @@ -1,2 +0,0 @@ -gravity=east -有一位住在石室裏的詩人叫施氏,abc, 愛吃獅子,決心要吃十隻獅子。 diff --git a/tests/layouts/valid-22.layout b/tests/layouts/valid-22.layout new file mode 100644 index 00000000..be57d26a --- /dev/null +++ b/tests/layouts/valid-22.layout @@ -0,0 +1,84 @@ +{ + "text" : "e0 = ooo...\n", + "attributes" : [ + { + "start" : 1, + "end" : 2, + "type" : "font-desc", + "value" : "Italic" + }, + { + "start" : 1, + "end" : 2, + "type" : "font-scale", + "value" : "subscript" + }, + { + "start" : 1, + "end" : 2, + "type" : "baseline-shift", + "value" : "subscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 10, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 10, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-22.markup b/tests/layouts/valid-22.markup deleted file mode 100644 index d761749a..00000000 --- a/tests/layouts/valid-22.markup +++ /dev/null @@ -1,2 +0,0 @@ - -e<span font_desc="italic"><sub>0</sub></span> = o<sup>o<sup>o<sup>.<sup>.<sup>.</sup></sup></sup></sup></sup> diff --git a/tests/layouts/valid-3.layout b/tests/layouts/valid-3.layout new file mode 100644 index 00000000..ef1b1917 --- /dev/null +++ b/tests/layouts/valid-3.layout @@ -0,0 +1,5 @@ +{ + "text" : "ABC😀️D\n", + "attributes" : [], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-3.markup b/tests/layouts/valid-3.markup deleted file mode 100644 index 4e394a42..00000000 --- a/tests/layouts/valid-3.markup +++ /dev/null @@ -1,2 +0,0 @@ - -ABC😀️D diff --git a/tests/layouts/valid-4.layout b/tests/layouts/valid-4.layout new file mode 100644 index 00000000..5504107d --- /dev/null +++ b/tests/layouts/valid-4.layout @@ -0,0 +1,6 @@ +{ + "text" : "This paragraph should actually have multiple lines, unlike all the other wannabe äöü paragraph tests in this ugh test-case. Grow some lines!\n", + "attributes" : [], + "font" : "Cantarell 11", + "width" : 198656 +} diff --git a/tests/layouts/valid-4.markup b/tests/layouts/valid-4.markup deleted file mode 100644 index d8890baf..00000000 --- a/tests/layouts/valid-4.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=194 -This paragraph should actually have multiple lines, unlike all the other wannabe äöü paragraph tests in this ugh test-case. Grow some lines! diff --git a/tests/layouts/valid-5.layout b/tests/layouts/valid-5.layout new file mode 100644 index 00000000..e5e96b9a --- /dev/null +++ b/tests/layouts/valid-5.layout @@ -0,0 +1,13 @@ +{ + "text" : "A test with multiple paragraphs and with no-break attributes, which might trigger a crash.\nIf it doesn't the fix has worked.\n", + "attributes" : [ + { + "start" : 21, + "end" : 31, + "type" : "font-features", + "value" : "tnum=1" + } + ], + "font" : "Cantarell 11", + "width" : 194560 +} diff --git a/tests/layouts/valid-5.markup b/tests/layouts/valid-5.markup deleted file mode 100644 index 2b2023ad..00000000 --- a/tests/layouts/valid-5.markup +++ /dev/null @@ -1,3 +0,0 @@ -width=190 -A test with multiple <span font_features="tnum=1">paragraphs</span> and with no-break attributes, which might trigger a crash. -If it doesn't the fix has worked. diff --git a/tests/layouts/valid-6.layout b/tests/layouts/valid-6.layout new file mode 100644 index 00000000..4423d068 --- /dev/null +++ b/tests/layouts/valid-6.layout @@ -0,0 +1,5 @@ +{ + "text" : " 0️⃣ Keycap Digit Zero\n", + "attributes" : [], + "font" : "Cantarell 11" +} diff --git a/tests/layouts/valid-6.markup b/tests/layouts/valid-6.markup deleted file mode 100644 index 92c53e28..00000000 --- a/tests/layouts/valid-6.markup +++ /dev/null @@ -1,2 +0,0 @@ - - 0️⃣ Keycap Digit Zero diff --git a/tests/layouts/valid-7.layout b/tests/layouts/valid-7.layout new file mode 100644 index 00000000..b49484c6 --- /dev/null +++ b/tests/layouts/valid-7.layout @@ -0,0 +1,21 @@ +{ + "text" : "This is a test of the automatic emergency brake!\n", + "attributes" : [ + { + "start" : 22, + "end" : 41, + "type" : "foreground", + "value" : "#00000000ffff" + }, + { + "start" : 22, + "end" : 41, + "type" : "underline", + "value" : "single" + } + ], + "font" : "Cantarell 11", + "ellipsize" : "middle", + "width" : 204800, + "indent" : 51200 +} diff --git a/tests/layouts/valid-7.markup b/tests/layouts/valid-7.markup deleted file mode 100644 index d5f9821e..00000000 --- a/tests/layouts/valid-7.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=200,indent=50,ellipsize=middle -This is a test of the <span foreground="#0000ff" underline="single">automatic emergency</span> brake! diff --git a/tests/layouts/valid-8.layout b/tests/layouts/valid-8.layout new file mode 100644 index 00000000..063ec370 --- /dev/null +++ b/tests/layouts/valid-8.layout @@ -0,0 +1,8 @@ +{ + "text" : "Hello שלום Γειά σας\n", + "attributes" : [], + "font" : "Cantarell 11", + "auto-dir" : false, + "alignment" : "center", + "spacing" : 51200 +} diff --git a/tests/layouts/valid-8.markup b/tests/layouts/valid-8.markup deleted file mode 100644 index 3272ea2b..00000000 --- a/tests/layouts/valid-8.markup +++ /dev/null @@ -1,2 +0,0 @@ -spacing=50,auto_dir=false,alignment=center -Hello שלום Γειά σας diff --git a/tests/layouts/valid-9.layout b/tests/layouts/valid-9.layout new file mode 100644 index 00000000..e3dfa57b --- /dev/null +++ b/tests/layouts/valid-9.layout @@ -0,0 +1,12 @@ +{ + "text" : "Hello שלום Γειά σας\n", + "attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "font" : "Cantarell 11", + "width" : 102400 +} diff --git a/tests/layouts/valid-9.markup b/tests/layouts/valid-9.markup deleted file mode 100644 index ced8f8e5..00000000 --- a/tests/layouts/valid-9.markup +++ /dev/null @@ -1,2 +0,0 @@ -width=100 -<span letter_spacing="8888">Hello שלום Γειά σας</span> diff --git a/tests/test-layout.c b/tests/test-layout.c index cd60450e..7415efe7 100644 --- a/tests/test-layout.c +++ b/tests/test-layout.c @@ -219,176 +219,14 @@ dump_cursor_positions (PangoLayout *layout, GString *string) g_string_append (string, "\n"); } -typedef struct { - int width; - int height; - int indent; - int spacing; - float line_spacing; - PangoEllipsizeMode ellipsize; - PangoWrapMode wrap; - PangoAlignment alignment; - gboolean justify; - gboolean auto_dir; - gboolean single_paragraph; - PangoTabArray *tabs; - PangoGravity gravity; -} LayoutParams; - -static void -init_params (LayoutParams *params) -{ - params->width = -1; - params->height = -1; - params->indent = 0; - params->spacing = 0; - params->line_spacing = 0.0; - params->ellipsize = PANGO_ELLIPSIZE_NONE; - params->wrap = PANGO_WRAP_WORD; - params->alignment = PANGO_ALIGN_LEFT; - params->justify = FALSE; - params->auto_dir = TRUE; - params->single_paragraph = FALSE; - params->tabs = NULL; - params->gravity = PANGO_GRAVITY_AUTO; -} - -static void -parse_params (const char *str, - LayoutParams *params) -{ - char **strings; - int i; - GEnumClass *eclass; - GEnumValue *ev; - - strings = g_strsplit (str, ",", -1); - for (i = 0; strings[i]; i++) - { - char **str2 = g_strsplit (strings[i], "=", -1); - if (strcmp (str2[0], "width") == 0) - { - params->width = (int) g_ascii_strtoll (str2[1], NULL, 10); - } - else if (strcmp (str2[0], "height") == 0) - { - params->height = (int) g_ascii_strtoll (str2[1], NULL, 10); - } - else if (strcmp (str2[0], "indent") == 0) - { - params->indent = (int) g_ascii_strtoll (str2[1], NULL, 10); - } - else if (strcmp (str2[0], "spacing") == 0) - { - params->spacing = (int) g_ascii_strtoll (str2[1], NULL, 10); - } - else if (strcmp (str2[0], "line_spacing") == 0) - { - params->line_spacing = (float) g_ascii_strtod (str2[1], NULL); - } - else if (strcmp (str2[0], "ellipsize") == 0) - { - eclass = g_type_class_ref (PANGO_TYPE_ELLIPSIZE_MODE); - ev = g_enum_get_value_by_name (eclass, str2[1]); - if (!ev) - ev = g_enum_get_value_by_nick (eclass, str2[1]); - if (ev) - params->ellipsize = ev->value; - g_type_class_unref (eclass); - } - else if (strcmp (str2[0], "wrap") == 0) - { - eclass = g_type_class_ref (PANGO_TYPE_WRAP_MODE); - ev = g_enum_get_value_by_name (eclass, str2[1]); - if (!ev) - ev = g_enum_get_value_by_nick (eclass, str2[1]); - if (ev) - params->wrap = ev->value; - g_type_class_unref (eclass); - } - else if (strcmp (str2[0], "alignment") == 0) - { - eclass = g_type_class_ref (PANGO_TYPE_ALIGNMENT); - ev = g_enum_get_value_by_name (eclass, str2[1]); - if (!ev) - ev = g_enum_get_value_by_nick (eclass, str2[1]); - if (ev) - params->alignment = ev->value; - g_type_class_unref (eclass); - } - else if (strcmp (str2[0], "justify") == 0) - { - params->justify = g_str_equal (str2[1], "true"); - } - else if (strcmp (str2[0], "auto_dir") == 0) - { - params->auto_dir = g_str_equal (str2[1], "true"); - } - else if (strcmp (str2[0], "single_paragraph") == 0) - { - params->single_paragraph = g_str_equal (str2[1], "true"); - } - else if (strcmp (str2[0], "tabs") == 0) - { - char **str3 = g_strsplit (strings[i], " ", -1); - params->tabs = pango_tab_array_new (g_strv_length (str3), TRUE); - for (int j = 0; str3[j]; j++) - { - int tab = (int) g_ascii_strtoll (str3[j], NULL, 10); - pango_tab_array_set_tab (params->tabs, j, PANGO_TAB_LEFT, tab); - } - g_strfreev (str3); - } - else if (strcmp (str2[0], "gravity") == 0) - { - eclass = g_type_class_ref (PANGO_TYPE_GRAVITY); - ev = g_enum_get_value_by_name (eclass, str2[1]); - if (!ev) - ev = g_enum_get_value_by_nick (eclass, str2[1]); - if (ev) - params->gravity = ev->value; - g_type_class_unref (eclass); - } - - g_strfreev (str2); - } - g_strfreev (strings); -} - -#define assert_layout_changed(layout) \ - g_assert_cmpuint (pango_layout_get_serial (layout), !=, serial); \ - serial = pango_layout_get_serial (layout); - -#define assert_rectangle_equal(r1, r2) \ - g_assert_true((r1)->x == (r2)->x && \ - (r1)->y == (r2)->y && \ - (r1)->width == (r2)->width && \ - (r1)->height == (r2)->height) - -#define assert_rectangle_contained(r1, r2) \ - g_assert_true ((r1)->x >= (r2)->x && \ - (r1)->y >= (r2)->y && \ - (r1)->x + (r1)->width <= (r2)->x + (r2)->width && \ - (r1)->y + (r1)->height <= (r2)->y + (r2)->height) - -#define assert_rectangle_size_contained(r1, r2) \ - g_assert_true ((r1)->width <= (r2)->width && \ - (r1)->height <= (r2)->height) - static void test_file (const char *filename, GString *string) { char *contents; - char *markup; gsize length; + GBytes *bytes; GError *error = NULL; PangoLayout *layout; - char *p; - LayoutParams params; - PangoFontDescription *desc; - const PangoFontDescription *desc2; - guint serial; - PangoTabArray *tabs; if (context == NULL) context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); @@ -396,85 +234,12 @@ test_file (const char *filename, GString *string) g_file_get_contents (filename, &contents, &length, &error); g_assert_no_error (error); - p = strchr (contents, '\n'); - g_assert (p); - markup = p + 1; - *p = '\0'; - length = strlen (markup); - - init_params (¶ms); - - layout = pango_layout_new (context); - - serial = pango_layout_get_serial (layout); - g_assert_cmpuint (serial, !=, 0); - - /* Check initial values */ - g_assert_cmpint (pango_layout_get_width (layout), ==, params.width); - g_assert_cmpint (pango_layout_get_height (layout), ==, params.height); - g_assert_cmpint (pango_layout_get_indent (layout), ==, params.indent); - g_assert_cmpint (pango_layout_get_spacing (layout), ==, params.spacing); - g_assert_cmpfloat (pango_layout_get_line_spacing (layout), ==, params.line_spacing); - g_assert_cmpint (pango_layout_get_ellipsize (layout), ==, params.ellipsize); - g_assert_cmpint (pango_layout_get_wrap (layout), ==, params.wrap); - g_assert_cmpint (pango_layout_get_alignment (layout), ==, params.alignment); - g_assert_cmpint (pango_layout_get_justify (layout), ==, params.justify); - g_assert_cmpint (pango_layout_get_auto_dir (layout), ==, params.auto_dir); - g_assert_cmpint (pango_layout_get_single_paragraph_mode (layout), ==, params.single_paragraph); - - g_assert_cmpstr (pango_layout_get_text (layout), ==, ""); - g_assert_null (pango_layout_get_attributes (layout)); - g_assert_null (pango_layout_get_tabs (layout)); - g_assert_null (pango_layout_get_font_description (layout)); - g_assert_cmpint (pango_layout_is_ellipsized (layout), ==, FALSE); - g_assert_cmpint (pango_layout_is_wrapped (layout), ==, FALSE); - - desc = pango_font_description_from_string ("Cantarell 11"); - pango_layout_set_font_description (layout, desc); - desc2 = pango_layout_get_font_description (layout); - g_assert_true (pango_font_description_equal (desc, desc2)); - pango_font_description_free (desc); - assert_layout_changed (layout); - - pango_layout_set_markup (layout, markup, length); - assert_layout_changed (layout); - - parse_params (contents, ¶ms); - - pango_context_set_base_gravity (context, params.gravity); - - pango_layout_set_width (layout, params.width > 0 ? params.width * PANGO_SCALE : -1); - pango_layout_set_height (layout, params.height > 0 ? params.height * PANGO_SCALE : params.height); - pango_layout_set_indent (layout, params.indent * PANGO_SCALE); - pango_layout_set_spacing (layout, params.spacing * PANGO_SCALE); - pango_layout_set_line_spacing (layout, params.line_spacing); - pango_layout_set_ellipsize (layout, params.ellipsize); - pango_layout_set_wrap (layout, params.wrap); - pango_layout_set_alignment (layout, params.alignment); - pango_layout_set_justify (layout, params.justify); - pango_layout_set_auto_dir (layout, params.auto_dir); - pango_layout_set_single_paragraph_mode (layout, params.single_paragraph); - pango_layout_set_tabs (layout, params.tabs); - - /* Check the values we set */ - g_assert_cmpint (pango_layout_get_width (layout), ==, params.width > 0 ? params.width * PANGO_SCALE : -1); - g_assert_cmpint (pango_layout_get_height (layout), ==, params.height > 0 ? params.height * PANGO_SCALE : params.height); - g_assert_cmpint (pango_layout_get_indent (layout), ==, params.indent * PANGO_SCALE); - g_assert_cmpint (pango_layout_get_spacing (layout), ==, params.spacing * PANGO_SCALE); - g_assert_cmpfloat (pango_layout_get_line_spacing (layout), ==, params.line_spacing); - g_assert_cmpint (pango_layout_get_ellipsize (layout), ==, params.ellipsize); - g_assert_cmpint (pango_layout_get_wrap (layout), ==, params.wrap); - g_assert_cmpint (pango_layout_get_alignment (layout), ==, params.alignment); - g_assert_cmpint (pango_layout_get_justify (layout), ==, params.justify); - g_assert_cmpint (pango_layout_get_auto_dir (layout), ==, params.auto_dir); - g_assert_cmpint (pango_layout_get_single_paragraph_mode (layout), ==, params.single_paragraph); - - tabs = pango_layout_get_tabs (layout); - g_assert_true ((tabs == NULL) == (params.tabs == NULL)); - if (tabs) - pango_tab_array_free (tabs); - - g_assert_cmpint (pango_layout_get_character_count (layout), ==, g_utf8_strlen (pango_layout_get_text (layout), -1)); + bytes = g_bytes_new_take (contents, length); + + layout = pango_layout_deserialize (context, bytes, &error); + g_assert_no_error (error); + + g_bytes_unref (bytes); /* generate the dumps */ g_string_append (string, pango_layout_get_text (layout)); @@ -484,13 +249,11 @@ test_file (const char *filename, GString *string) g_string_append_printf (string, "wrapped: %d\n", pango_layout_is_wrapped (layout)); g_string_append_printf (string, "ellipsized: %d\n", pango_layout_is_ellipsized (layout)); g_string_append_printf (string, "lines: %d\n", pango_layout_get_line_count (layout)); - if (params.width > 0) + if (pango_layout_get_width (layout) > 0) g_string_append_printf (string, "width: %d\n", pango_layout_get_width (layout)); - - if (params.height > 0) + if (pango_layout_get_height (layout) > 0) g_string_append_printf (string, "height: %d\n", pango_layout_get_height (layout)); - - if (params.indent != 0) + if (pango_layout_get_indent (layout) != 0) g_string_append_printf (string, "indent: %d\n", pango_layout_get_indent (layout)); g_string_append (string, "\n--- attributes\n\n"); @@ -509,19 +272,15 @@ test_file (const char *filename, GString *string) dump_runs (layout, string); g_object_unref (layout); - g_free (contents); - - if (params.tabs) - pango_tab_array_free (params.tabs); } static gchar * -get_expected_filename (const gchar *filename) +get_expected_filename (const char *filename) { - gchar *f, *p, *expected; + char *f, *p, *expected; f = g_strdup (filename); - p = strstr (f, ".markup"); + p = strstr (f, ".layout"); if (p) *p = 0; expected = g_strconcat (f, ".expected", NULL); @@ -534,11 +293,11 @@ get_expected_filename (const gchar *filename) static void test_layout (gconstpointer d) { - const gchar *filename = d; - gchar *expected_file; + const char *filename = d; + char *expected_file; GError *error = NULL; GString *dump; - gchar *diff; + char *diff; PangoFontFamily **families; int n_families; gboolean found_cantarell; @@ -616,7 +375,7 @@ main (int argc, char *argv[]) GDir *dir; GError *error = NULL; const gchar *name; - gchar *path; + char *path; GOptionContext *option_context; GOptionEntry entries[] = { { "show-fonts", '0', 0, G_OPTION_ARG_NONE, &opt_show_font, "Print font names in dumps", NULL }, @@ -659,7 +418,7 @@ main (int argc, char *argv[]) g_assert_no_error (error); while ((name = g_dir_read_name (dir)) != NULL) { - if (!strstr (name, "markup")) + if (!g_str_has_suffix (name, ".layout")) continue; path = g_strdup_printf ("/layout/%s", name); diff --git a/tests/testserialize.c b/tests/testserialize.c index 2c1d2f53..5fb7543a 100644 --- a/tests/testserialize.c +++ b/tests/testserialize.c @@ -245,43 +245,66 @@ test_serialize_layout_valid (void) static void test_serialize_layout_invalid (void) { - const char *test1 = - "{\n" - " \"attributes\" : [\n" - " {\n" - " \"type\" : \"caramba\"\n" - " }\n" - " ]\n" - "}"; - - const char *test2 = - "{\n" - " \"attributes\" : [\n" - " {\n" - " \"type\" : \"weight\"\n" - " }\n" - " ]\n" - "}"; + struct { + const char *json; + int expected_error; + } test[] = { + { + "{\n" + " \"attributes\" : [\n" + " {\n" + " \"type\" : \"caramba\"\n" + " }\n" + " ]\n" + "}", + PANGO_LAYOUT_SERIALIZE_INVALID_VALUE + }, + { + "{\n" + " \"attributes\" : [\n" + " {\n" + " \"type\" : \"weight\"\n" + " }\n" + " ]\n" + "}", + PANGO_LAYOUT_SERIALIZE_MISSING_VALUE + }, + { + "{\n" + " \"attributes\" : [\n" + " {\n" + " \"type\" : \"alignment\",\n" + " \"value\" : \"nonsense\"\n" + " }\n" + " ]\n" + "}", + PANGO_LAYOUT_SERIALIZE_INVALID_VALUE + }, + { + "{\n" + " \"alignment\" : \"nonsense\"\n" + "}", + PANGO_LAYOUT_SERIALIZE_INVALID_VALUE + } + }; PangoContext *context; - GBytes *bytes; - PangoLayout *layout; - GError *error = NULL; context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); - bytes = g_bytes_new_static (test1, -1); - layout = pango_layout_deserialize (context, bytes, &error); - g_assert_null (layout); - g_assert_error (error, PANGO_LAYOUT_SERIALIZE_ERROR, PANGO_LAYOUT_SERIALIZE_INVALID_VALUE); - g_bytes_unref (bytes); - g_clear_error (&error); - - bytes = g_bytes_new_static (test2, -1); - layout = pango_layout_deserialize (context, bytes, &error); - g_assert_null (layout); - g_assert_error (error, PANGO_LAYOUT_SERIALIZE_ERROR, PANGO_LAYOUT_SERIALIZE_MISSING_VALUE); - g_bytes_unref (bytes); + for (int i = 0; i < G_N_ELEMENTS (test); i++) + { + GBytes *bytes; + PangoLayout *layout; + GError *error = NULL; + + bytes = g_bytes_new_static (test[i].json, -1); + layout = pango_layout_deserialize (context, bytes, &error); + g_assert_null (layout); + g_assert_error (error, PANGO_LAYOUT_SERIALIZE_ERROR, test[i].expected_error); + g_bytes_unref (bytes); + g_clear_error (&error); + } g_object_unref (context); } |