19faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod/*
22409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2011  Google, Inc.
39faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *
49faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
59faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *
69faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * Permission is hereby granted, without written agreement and without
79faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
89faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * software and its documentation for any purpose, provided that the
99faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
109faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * all copies of this software.
119faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *
129faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
139faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
149faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
159faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
169faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * DAMAGE.
179faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *
189faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
199faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
209faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
219faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
229faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
239faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod *
249faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod * Google Author(s): Behdad Esfahbod
259faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod */
269faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
279faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod#include "hb-test.h"
289faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
296af9cff5e17e82100b435c8d21aed0765296d58dBehdad Esfahbod/* Unit tests for hb-common.h */
306af9cff5e17e82100b435c8d21aed0765296d58dBehdad Esfahbod
319faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
329faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic void
339faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodtest_types_int (void)
349faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{
354744379efc6063d94e15ff99381a7ab8b88ee567Behdad Esfahbod  /* We already ASSERT_STATIC these in hb-private.h, but anyway */
369faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (int8_t), ==, 1);
379faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (uint8_t), ==, 1);
389faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (int16_t), ==, 2);
399faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (uint16_t), ==, 2);
409faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (int32_t), ==, 4);
419faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (uint32_t), ==, 4);
429faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (int64_t), ==, 8);
439faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (uint64_t), ==, 8);
449faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
459faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (hb_codepoint_t), ==, 4);
469faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (hb_position_t), ==, 4);
479faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (hb_mask_t), ==, 4);
489faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (sizeof (hb_var_int_t), ==, 4);
499faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod}
509faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
519faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic void
529faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodtest_types_direction (void)
539faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{
544bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert_cmpint ((signed) HB_DIRECTION_INVALID, ==, 0);
554bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert_cmpint (HB_DIRECTION_LTR, !=, 0);
569faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
579faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_LTR));
589faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_RTL));
599faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_TTB));
609faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_BTT));
614bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_HORIZONTAL (HB_DIRECTION_INVALID));
629faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
639faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_LTR));
649faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_RTL));
659faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_TTB));
669faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_BTT));
674bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_VERTICAL (HB_DIRECTION_INVALID));
689faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
699faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_FORWARD (HB_DIRECTION_LTR));
709faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_FORWARD (HB_DIRECTION_TTB));
719faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_RTL));
729faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_BTT));
734bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_FORWARD (HB_DIRECTION_INVALID));
749faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
759faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_LTR));
769faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_TTB));
779faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_RTL));
789faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert (HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_BTT));
794bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_BACKWARD (HB_DIRECTION_INVALID));
809faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
81fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_LTR));
82fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_TTB));
83fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_RTL));
84fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (HB_DIRECTION_IS_VALID (HB_DIRECTION_BTT));
85fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_VALID (HB_DIRECTION_INVALID));
86fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod  g_assert (!HB_DIRECTION_IS_VALID ((hb_direction_t) 0x12345678));
87fe28b997fbbeb2cfeab62ac453993ccffe3e6719Behdad Esfahbod
889faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_LTR), ==, HB_DIRECTION_RTL);
899faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_RTL), ==, HB_DIRECTION_LTR);
909faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_TTB), ==, HB_DIRECTION_BTT);
919faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_BTT), ==, HB_DIRECTION_TTB);
924bf90f648313e35d21b427a956aa1fe762bae757Behdad Esfahbod  //g_assert_cmpint (HB_DIRECTION_REVERSE (HB_DIRECTION_INVALID), ==, HB_DIRECTION_INVALID);
9339a840ae65327b173e6eb1bb291e235a8305d7a1Behdad Esfahbod
944c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string (NULL, -1));
954c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string ("", -1));
964c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string ("t", 0));
974c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_INVALID, ==, hb_direction_from_string ("x", -1));
984c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("r", -1));
994c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("rtl", -1));
1004c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("RtL", -1));
1014c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_RTL, ==, hb_direction_from_string ("right-to-left", -1));
1024c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmpint (HB_DIRECTION_TTB, ==, hb_direction_from_string ("ttb", -1));
103654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod
104654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod  g_assert (0 == strcmp ("ltr", hb_direction_to_string (HB_DIRECTION_LTR)));
105654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod  g_assert (0 == strcmp ("rtl", hb_direction_to_string (HB_DIRECTION_RTL)));
106654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod  g_assert (0 == strcmp ("ttb", hb_direction_to_string (HB_DIRECTION_TTB)));
107654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod  g_assert (0 == strcmp ("btt", hb_direction_to_string (HB_DIRECTION_BTT)));
108654f88fbc9bcb54f9bd2d5586236234e03424044Behdad Esfahbod  g_assert (0 == strcmp ("invalid", hb_direction_to_string (HB_DIRECTION_INVALID)));
1099faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod}
1109faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
1119faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodstatic void
1129faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodtest_types_tag (void)
1139faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{
1149faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmphex (HB_TAG_NONE, ==, 0);
1157ff7401c9237cda661869c1cb196d685706ac4e9Behdad Esfahbod
1169faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod  g_assert_cmphex (HB_TAG ('a','B','c','D'), ==, 0x61426344);
1179faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
1184c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe", -1), ==, 0x61426344);
1194c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcD", -1),  ==, 0x61426344);
1204c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBc", -1),   ==, 0x61426320);
1214c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aB", -1),    ==, 0x61422020);
1224c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("a", -1),     ==, 0x61202020);
1234c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe",  1), ==, 0x61202020);
1244c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe",  2), ==, 0x61422020);
1254c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe",  3), ==, 0x61426320);
1264c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe",  4), ==, 0x61426344);
1274c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("aBcDe",  4), ==, 0x61426344);
1284c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod
1294c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("", -1),      ==, HB_TAG_NONE);
1304c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string ("x", 0),      ==, HB_TAG_NONE);
1314c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (hb_tag_from_string (NULL, -1),    ==, HB_TAG_NONE);
1329faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod}
1339faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
134db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbodstatic void
135db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbodtest_types_script (void)
136db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod{
137db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t arab = HB_TAG_CHAR4 ("arab");
138db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t Arab = HB_TAG_CHAR4 ("Arab");
139db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t ARAB = HB_TAG_CHAR4 ("ARAB");
140db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
141db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t wWyZ = HB_TAG_CHAR4 ("wWyZ");
142db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t Wwyz = HB_TAG_CHAR4 ("Wwyz");
143db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
144db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  hb_tag_t x123 = HB_TAG_CHAR4 ("x123");
145db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
14639a840ae65327b173e6eb1bb291e235a8305d7a1Behdad Esfahbod  g_assert_cmpint (HB_SCRIPT_INVALID, ==, (hb_script_t) HB_TAG_NONE);
147db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, !=, HB_SCRIPT_LATIN);
148db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
1494c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_INVALID, ==, hb_script_from_string (NULL, -1));
1504c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_INVALID, ==, hb_script_from_string ("", -1));
1514c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_INVALID, ==, hb_script_from_string ("x", 0));
1524c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_UNKNOWN, ==, hb_script_from_string ("x", -1));
15339a840ae65327b173e6eb1bb291e235a8305d7a1Behdad Esfahbod
1544c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_string ("arab", -1));
1554c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_string ("Arab", -1));
1564c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_string ("ARAB", -1));
1574c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_string ("Arabic", 6));
1584c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, !=, hb_script_from_string ("Arabic", 3));
15939a840ae65327b173e6eb1bb291e235a8305d7a1Behdad Esfahbod
160db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_iso15924_tag (arab));
161db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_iso15924_tag (Arab));
162db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_ARABIC, ==, hb_script_from_iso15924_tag (ARAB));
163db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
164db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  /* Arbitrary tags that look like may be valid ISO 15924 should be preserved. */
1654c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_UNKNOWN, !=, hb_script_from_string ("wWyZ", -1));
166db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_UNKNOWN, !=, hb_script_from_iso15924_tag (wWyZ));
167db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  /* Otherwise, UNKNOWN should be returned. */
1684c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert_cmphex (HB_SCRIPT_UNKNOWN, ==, hb_script_from_string ("x123", -1));
169db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (HB_SCRIPT_UNKNOWN, ==, hb_script_from_iso15924_tag (x123));
170db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
171db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (hb_script_to_iso15924_tag (HB_SCRIPT_ARABIC), ==, Arab);
172db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmphex (hb_script_to_iso15924_tag (hb_script_from_iso15924_tag (wWyZ)), ==, Wwyz);
173db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
174db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmpint (hb_script_get_horizontal_direction (HB_SCRIPT_LATIN), ==, HB_DIRECTION_LTR);
175db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmpint (hb_script_get_horizontal_direction (HB_SCRIPT_ARABIC), ==, HB_DIRECTION_RTL);
176db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod  g_assert_cmpint (hb_script_get_horizontal_direction (hb_script_from_iso15924_tag (wWyZ)), ==, HB_DIRECTION_LTR);
177db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod}
178db60c96f20426111ffa71e9802ef6e248f8b28d0Behdad Esfahbod
17909125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbodstatic void
18009125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbodtest_types_language (void)
18109125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod{
1824c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  hb_language_t fa = hb_language_from_string ("fa", -1);
1834c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  hb_language_t fa_IR = hb_language_from_string ("fa_IR", -1);
1844c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  hb_language_t fa_ir = hb_language_from_string ("fa-ir", -1);
1854c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  hb_language_t en = hb_language_from_string ("en", -1);
18609125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod
1871a64f6e19a4b483e278c85e4941107be2f71b0a4Behdad Esfahbod  g_assert (HB_LANGUAGE_INVALID == NULL);
1881a64f6e19a4b483e278c85e4941107be2f71b0a4Behdad Esfahbod
18909125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  g_assert (fa != NULL);
19009125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  g_assert (fa_IR != NULL);
19109125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  g_assert (fa_IR == fa_ir);
19209125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod
19309125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  g_assert (en != NULL);
19409125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  g_assert (en != fa);
19509125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod
19609125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod  /* Test recall */
1974c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (en == hb_language_from_string ("en", -1));
1984c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (en == hb_language_from_string ("eN", -1));
1994c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (en == hb_language_from_string ("Enx", 2));
2004c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod
2014c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (HB_LANGUAGE_INVALID == hb_language_from_string (NULL, -1));
2024c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (HB_LANGUAGE_INVALID == hb_language_from_string ("", -1));
2034c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (HB_LANGUAGE_INVALID == hb_language_from_string ("en", 0));
2044c9fe88d30036340fe592bcbc375049b84602b8bBehdad Esfahbod  g_assert (HB_LANGUAGE_INVALID != hb_language_from_string ("en", 1));
2051a64f6e19a4b483e278c85e4941107be2f71b0a4Behdad Esfahbod  g_assert (NULL == hb_language_to_string (HB_LANGUAGE_INVALID));
20634fb5521a5fbb6b95ceff4bbac42a62628bc9f31Behdad Esfahbod
20734fb5521a5fbb6b95ceff4bbac42a62628bc9f31Behdad Esfahbod  /* Not sure how to test this better.  Setting env vars
20834fb5521a5fbb6b95ceff4bbac42a62628bc9f31Behdad Esfahbod   * here doesn't sound like the right approach, and I'm
20934fb5521a5fbb6b95ceff4bbac42a62628bc9f31Behdad Esfahbod   * not sure that it even works. */
2101a64f6e19a4b483e278c85e4941107be2f71b0a4Behdad Esfahbod  g_assert (HB_LANGUAGE_INVALID != hb_language_get_default ());
21109125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod}
21209125576ca745b3393f3dc49071df891400bbdc9Behdad Esfahbod
2139faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbodint
2149385caa8a693df0f06a511a71de9aa407637097cBehdad Esfahbodmain (int argc, char **argv)
2159faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod{
216aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_init (&argc, &argv);
2179faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
218aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_add (test_types_int);
219aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_add (test_types_direction);
220aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_add (test_types_tag);
221aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_add (test_types_script);
222aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  hb_test_add (test_types_language);
2239faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod
224aafe395ab550d3ba2fabc69155662e87d45e74a8Behdad Esfahbod  return hb_test_run();
2259faa980067f802f712c2adf8263152ed40c98088Behdad Esfahbod}
226