tee: add sandbox driver
[oweals/u-boot.git] / test / unicode_ut.c
index 7fb9b03be9530d028166c47e78ad39bf44104515..b115d18afd373cfbef584a1f4792dc9c27237910 100644 (file)
@@ -50,6 +50,49 @@ static const char j1[] = {0x6a, 0x31, 0xa1, 0x6c, 0x00};
 static const char j2[] = {0x6a, 0x32, 0xc3, 0xc3, 0x6c, 0x00};
 static const char j3[] = {0x6a, 0x33, 0xf0, 0x90, 0xf0, 0x00};
 
+/* U-Boot uses UTF-16 strings in the EFI context only. */
+#if CONFIG_IS_ENABLED(EFI_LOADER) && !defined(API_BUILD)
+static int ut_string16(struct unit_test_state *uts)
+{
+       char buf[20];
+
+       /* Test length and precision */
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%8.6ls", c2);
+       ut_asserteq(' ', buf[1]);
+       ut_assert(!strncmp(&buf[2], d2, 7));
+       ut_assert(!buf[9]);
+
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%8.6ls", c4);
+       ut_asserteq(' ', buf[4]);
+       ut_assert(!strncmp(&buf[5], d4, 12));
+       ut_assert(!buf[17]);
+
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%-8.2ls", c4);
+       ut_asserteq(' ', buf[8]);
+       ut_assert(!strncmp(buf, d4, 8));
+       ut_assert(!buf[14]);
+
+       /* Test handling of illegal utf-16 sequences */
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%ls", i1);
+       ut_asserteq_str("i1?l", buf);
+
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%ls", i2);
+       ut_asserteq_str("i2?l", buf);
+
+       memset(buf, 0xff, sizeof(buf));
+       sprintf(buf, "%ls", i3);
+       ut_asserteq_str("i3?", buf);
+
+       return 0;
+}
+UNICODE_TEST(ut_string16);
+#endif
+
 static int ut_utf8_get(struct unit_test_state *uts)
 {
        const char *s;
@@ -135,7 +178,7 @@ static int ut_utf8_utf16_strlen(struct unit_test_state *uts)
 
        /* illegal utf-8 sequences */
        ut_asserteq(4, utf8_utf16_strlen(j1));
-       ut_asserteq(5, utf8_utf16_strlen(j2));
+       ut_asserteq(4, utf8_utf16_strlen(j2));
        ut_asserteq(3, utf8_utf16_strlen(j3));
 
        return 0;
@@ -153,7 +196,7 @@ static int ut_utf8_utf16_strnlen(struct unit_test_state *uts)
 
        /* illegal utf-8 sequences */
        ut_asserteq(4, utf8_utf16_strnlen(j1, 16));
-       ut_asserteq(5, utf8_utf16_strnlen(j2, 16));
+       ut_asserteq(4, utf8_utf16_strnlen(j2, 16));
        ut_asserteq(3, utf8_utf16_strnlen(j3, 16));
 
        return 0;
@@ -212,8 +255,8 @@ static int ut_utf8_utf16_strcpy(struct unit_test_state *uts)
 
        pos = buf;
        utf8_utf16_strcpy(&pos, j2);
-       ut_asserteq(5, pos - buf);
-       ut_assert(!ut_u16_strcmp(buf, L"j2??l", SIZE_MAX));
+       ut_asserteq(4, pos - buf);
+       ut_assert(!ut_u16_strcmp(buf, L"j2?l", SIZE_MAX));
 
        pos = buf;
        utf8_utf16_strcpy(&pos, j3);
@@ -457,6 +500,40 @@ int ut_utf16_utf8_strncpy(struct unit_test_state *uts)
 }
 UNICODE_TEST(ut_utf16_utf8_strncpy);
 
+int ut_utf_to_lower(struct unit_test_state *uts)
+{
+       ut_asserteq('@', utf_to_lower('@'));
+       ut_asserteq('a', utf_to_lower('A'));
+       ut_asserteq('z', utf_to_lower('Z'));
+       ut_asserteq('[', utf_to_lower('['));
+       ut_asserteq('m', utf_to_lower('m'));
+       /* Latin letter O with diaresis (umlaut) */
+       ut_asserteq(0x00f6, utf_to_lower(0x00d6));
+#ifdef CONFIG_EFI_UNICODE_CAPITALIZATION
+       /* Cyrillic letter I*/
+       ut_asserteq(0x0438, utf_to_lower(0x0418));
+#endif
+       return 0;
+}
+UNICODE_TEST(ut_utf_to_lower);
+
+int ut_utf_to_upper(struct unit_test_state *uts)
+{
+       ut_asserteq('`', utf_to_upper('`'));
+       ut_asserteq('A', utf_to_upper('a'));
+       ut_asserteq('Z', utf_to_upper('z'));
+       ut_asserteq('{', utf_to_upper('{'));
+       ut_asserteq('M', utf_to_upper('M'));
+       /* Latin letter O with diaresis (umlaut) */
+       ut_asserteq(0x00d6, utf_to_upper(0x00f6));
+#ifdef CONFIG_EFI_UNICODE_CAPITALIZATION
+       /* Cyrillic letter I */
+       ut_asserteq(0x0418, utf_to_upper(0x0438));
+#endif
+       return 0;
+}
+UNICODE_TEST(ut_utf_to_upper);
+
 int do_ut_unicode(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        struct unit_test *tests = ll_entry_start(struct unit_test, unicode_test);