diff --git a/tests/nwnss/codepage/test_nwnss_codepage.c b/tests/nwnss/codepage/test_nwnss_codepage.c index 135cbd9..f149952 100644 --- a/tests/nwnss/codepage/test_nwnss_codepage.c +++ b/tests/nwnss/codepage/test_nwnss_codepage.c @@ -17,14 +17,72 @@ extern STATUS LB_GetMacCodePageName(BYTE *nameBuffer, NINT bufferLen); } \ } while (0) +static int check_raw_codepage_table(void) +{ + char cp437_bytes[] = { (char)0x80, (char)0x82, 0 }; + unicode_t cp437_unicode[] = { 0x00c7, 0x00e9, 0 }; + unicode_t unicode[8]; + char bytes[8]; + NINT actual = -1; + + CHECK(LB_ByteToUnicode(NSS_UNI_CONVERSION_RAW, unicode, + (NINT)(sizeof(unicode) / sizeof(unicode[0])), + cp437_bytes, &actual) == zOK); + CHECK(actual == 2); + CHECK(unicode[0] == 0x00c7); + CHECK(unicode[1] == 0x00e9); + CHECK(unicode[2] == 0); + + CHECK(LB_UnicodeToByte(NSS_UNI_CONVERSION_RAW, bytes, sizeof(bytes), + cp437_unicode, &actual) == zOK); + CHECK(actual == 2); + CHECK((unsigned char)bytes[0] == 0x80); + CHECK((unsigned char)bytes[1] == 0x82); + CHECK(bytes[2] == 0); + return 0; +} + +static int check_mac_roman_table(void) +{ + char mac_bytes[] = { (char)0x80, (char)0x8e, 0 }; + unicode_t mac_unicode[] = { 0x00c4, 0x00e9, 0 }; + unicode_t unicode[8]; + char bytes[8]; + NINT actual = -1; + + CHECK(LB_MacByteToUnicode(NSS_UNI_CONVERSION_RAW, unicode, + (NINT)(sizeof(unicode) / sizeof(unicode[0])), + mac_bytes, &actual) == zOK); + CHECK(actual == 2); + CHECK(unicode[0] == 0x00c4); + CHECK(unicode[1] == 0x00e9); + CHECK(unicode[2] == 0); + + CHECK(LB_UnicodeToMacByte(NSS_UNI_CONVERSION_RAW, bytes, sizeof(bytes), + mac_unicode, &actual) == zOK); + CHECK(actual == 2); + CHECK((unsigned char)bytes[0] == 0x80); + CHECK((unsigned char)bytes[1] == 0x8e); + CHECK(bytes[2] == 0); + return 0; +} + +static int check_mac_codepage_name(void) +{ + BYTE mac_name[64]; + BYTE short_name[4]; + + CHECK(LB_GetMacCodePageName(short_name, sizeof(short_name)) == zERR_BUFFER_TOO_SMALL); + CHECK(LB_GetMacCodePageName(mac_name, sizeof(mac_name)) == zOK); + CHECK(strcmp((const char *)mac_name, "Roman") == 0); + return 0; +} + int main(void) { unicode_t unicode[32]; char bytes[32]; NINT actual = -1; - BYTE mac_name[64]; - - (void)mac_name; CHECK(LB_UnicodeStartup() == zOK); @@ -56,8 +114,9 @@ int main(void) CHECK(bytes[0] == 'O'); CHECK(bytes[1] == 'K'); - CHECK(LB_GetMacCodePageName(mac_name, sizeof(mac_name)) == zOK); - CHECK(strcmp((const char *)mac_name, "Roman") == 0); + CHECK(check_raw_codepage_table() == 0); + CHECK(check_mac_roman_table() == 0); + CHECK(check_mac_codepage_name() == 0); LB_UnicodeShutdown(); CHECK(LB_UnicodeStartup() == zOK); diff --git a/tests/nwnss/unicode/test_nwnss_unicode.c b/tests/nwnss/unicode/test_nwnss_unicode.c index c929ebc..3a8035f 100644 --- a/tests/nwnss/unicode/test_nwnss_unicode.c +++ b/tests/nwnss/unicode/test_nwnss_unicode.c @@ -65,6 +65,10 @@ static int check_unicode_case_helpers(void) CHECK(LB_GetNssUnicodeVersion() == 1); CHECK(LB_unitolower('A') == 'a'); CHECK(LB_unitoupper('z') == 'Z'); + CHECK(LB_unitolower(0x00c4) == 0x00e4); + CHECK(LB_unitoupper(0x00e4) == 0x00c4); + CHECK(LB_unitolower(0x03a9) == 0x03c9); + CHECK(LB_unitoupper(0x03c9) == 0x03a9); CHECK(LB_unilwr(mixed) == mixed); CHECK(LB_unicmp(mixed, (const unicode_t[]){ 'm', 'a', 'r', 's', '-', 'n', 'w', 'e', 0 }) == 0); @@ -86,6 +90,30 @@ static int check_unicode_case_helpers(void) return 0; } +static int check_unicode_table_conversions(void) +{ + char cp437_bytes[] = { (char)0x80, (char)0x82, 0 }; + unicode_t cp437_unicode[] = { 0x00c7, 0x00e9, 0 }; + unicode_t unicode[8]; + char bytes[8]; + NINT actual = -1; + + CHECK(LB_ByteToUnicode(NSS_UNI_CONVERSION_RAW, unicode, 8, + cp437_bytes, &actual) == zOK); + CHECK(actual == 2); + CHECK(unicode[0] == cp437_unicode[0]); + CHECK(unicode[1] == cp437_unicode[1]); + CHECK(unicode[2] == 0); + + CHECK(LB_UnicodeToByte(NSS_UNI_CONVERSION_RAW, bytes, sizeof(bytes), + cp437_unicode, &actual) == zOK); + CHECK(actual == 2); + CHECK((unsigned char)bytes[0] == 0x80); + CHECK((unsigned char)bytes[1] == 0x82); + CHECK(bytes[2] == 0); + return 0; +} + static int check_unicode_parse_overrides(void) { unicode_t out = 0; @@ -186,6 +214,7 @@ int main(void) CHECK(LB_UnicodeStartup() == zOK); CHECK(check_unicode_string_helpers() == 0); CHECK(check_unicode_case_helpers() == 0); + CHECK(check_unicode_table_conversions() == 0); CHECK(check_unicode_parse_overrides() == 0); CHECK(check_unicode_converter_registration() == 0); LB_UnicodeShutdown();