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.