diff --git a/test/lazutils/testunicode.lpi b/test/lazutils/testunicode.lpi index 363a2b3775..7a868b98be 100644 --- a/test/lazutils/testunicode.lpi +++ b/test/lazutils/testunicode.lpi @@ -6,7 +6,6 @@ - @@ -57,6 +56,7 @@ + diff --git a/test/lazutils/testunicode.pas b/test/lazutils/testunicode.pas index 62a2f7d43a..b74a4f9a20 100644 --- a/test/lazutils/testunicode.pas +++ b/test/lazutils/testunicode.pas @@ -3,18 +3,54 @@ program TestUnicode; {$mode objfpc}{$H+} uses - lazutf8; + sysutils, lazutf8; + +procedure WriteStringHex(Str: utf8string); +var + StrOut: utf8string; + i: Integer; +begin + StrOut := ''; + for i := 1 to Length(Str) do + begin + StrOut := StrOut + IntToHex(Byte(Str[i]), 2) + ' '; + end; + Write(StrOut); +end; procedure AssertStringOperation(AMsg, AStr1, AStr2, AStrExpected2: utf8string); begin - Write(AMsg, ' ', AStr1, ' => ', AStr2, ' Expected ', AStrExpected2); - if UTF8CompareStr(AStr1, AStr2) <> 0 then Write(' !Error!'); + Write(AMsg, ' ', AStr1, ' => ', AStr2); + if UTF8CompareStr(AStr1, AStr2) <> 0 then + begin + Write(' Expected ', AStrExpected2, ' !Error!'); + WriteLn(); + WriteStringHex(AStr2); + WriteLn(''); + WriteLn('Expected'); + WriteStringHex(AStr2); + end; WriteLn(); end; +procedure AssertStringOperationUTF8UpperCase(AMsg, ALocale, AStr1, AStrExpected2: utf8string); begin + AssertStringOperation(AMsg, AStr1, UTF8UpperCase(AStr1, ALocale), AStrExpected2); +end; + +procedure TestUTF8UpperCase; +begin + // ASCII + AssertStringOperationUTF8UpperCase('ASCII UTF8UpperCase', '', 'abcdefghijklmnopqrstuwvxyz', 'ABCDEFGHIJKLMNOPQRSTUWVXYZ'); + // Latin + AssertStringOperationUTF8UpperCase('Polish UTF8UpperCase 1', '', 'aąbcćdeęfghijklłmnńoóprsśtuwyzźż', 'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ'); + AssertStringOperationUTF8UpperCase('Polish UTF8UpperCase 2', '', 'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ', 'AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ'); // Turkish - AssertStringOperation('Turkish UTF8UpperCase 1', 'abcçdefgğhıijklmnoöprsştuüvyz', UTF8UpperCase('abcçdefgğhıijklmnoöprsştuüvyz'), 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'); - AssertStringOperation('Turkish UTF8UpperCase 2', 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ', UTF8UpperCase('ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'), 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'); + AssertStringOperationUTF8UpperCase('Turkish UTF8UpperCase 1', 'tu', 'abcçdefgğhıijklmnoöprsştuüvyz', 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'); + AssertStringOperationUTF8UpperCase('Turkish UTF8UpperCase 2', 'tu', 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ', 'ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'); +end; + +begin + TestUTF8UpperCase(); end.