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