summaryrefslogtreecommitdiff
path: root/packages/fcl-registry
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-03-24 08:47:16 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-03-24 08:47:16 +0000
commitdcc3aab911d38d0b271be0b96e70ef8da5220c68 (patch)
treea4b5b3f7255eebf611619302fa56fd47518af4f9 /packages/fcl-registry
parentaf1320bc3e1dd1e5dbf32dfe472fda8a71b56475 (diff)
downloadfpc-dcc3aab911d38d0b271be0b96e70ef8da5220c68.tar.gz
* Unicode test program using UnicodeString
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@41785 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-registry')
-rw-r--r--packages/fcl-registry/examples/testunicode2.pp262
1 files changed, 262 insertions, 0 deletions
diff --git a/packages/fcl-registry/examples/testunicode2.pp b/packages/fcl-registry/examples/testunicode2.pp
new file mode 100644
index 0000000000..adad479a69
--- /dev/null
+++ b/packages/fcl-registry/examples/testunicode2.pp
@@ -0,0 +1,262 @@
+program testunicode2;
+
+{ Unicode test program, using unicode strings }
+
+{$mode objfpc}{$H+}
+{$codepage utf8}
+{$IFNDEF UNIX}
+{$APPTYPE CONSOLE}
+{$ENDIF}
+uses
+{$ifdef unix}
+ cwstring,
+{$endif}
+ sysutils, classes, registry;
+
+Var
+ EditKey : Unicodestring = 'ASCII;这是一个测试';
+ labeledEditName : Unicodestring = 'ASCII;പേര് ഇതാണ്ASCII;这是一个测试';
+ labeledEditValue : Unicodestring = 'これは値です;ASCII';
+ labelkeycaption : UnicodeString = 'HKCU\Software\zzz_test\';
+ reg: TRegistry;
+ Results : TStrings;
+
+
+
+function TestKey (const AKey: UnicodeString): boolean;
+begin
+ Result:=false;
+ try
+ reg.CloseKey;
+ if reg.KeyExists(AKey) then
+ reg.DeleteKey(AKey);
+ if reg.KeyExists(AKey) then
+ begin
+ Results.Add('TestKey-01 failed: DeleteKey(%s);',[AKey]);
+ exit;
+ end;
+ if not reg.OpenKey(AKey,true) then
+ begin
+ Results.Add('TestKey-02 failed: OpenKey(%s,true)',[AKey]);
+ exit;
+ end;
+ reg.CloseKey;
+ if not reg.KeyExists(AKey) then
+ begin
+ Results.Add('TestKey-03 failed: OpenKey(%s,true)',[AKey]);
+ exit;
+ end;
+ reg.DeleteKey(AKey);
+ if not reg.CreateKey(AKey) then
+ begin
+ Results.Add('TestKey-04 failed: CreateKey(%s)',[AKey]);
+ exit;
+ end;
+ if not reg.KeyExists(AKey) then
+ begin
+ Results.Add('TestKey-05 failed: CreateKey(%s,true)',[AKey]);
+ exit;
+ end;
+ if not reg.OpenKeyReadOnly(AKey) then
+ begin
+ Results.Add('TestKey-06 failed: OpenKeyReadOnly(%s)',[AKey]);
+ exit;
+ end;
+ reg.CloseKey;
+ if not reg.OpenKey(AKey,false) then
+ begin
+ Results.Add('TestKey-07 failed: OpenKey(%s,false)',[AKey]);
+ exit;
+ end;
+
+ Results.Add('TestKey passed: %s',[AKey]);
+
+ except
+ on e:Exception do
+ Results.Add('TestKey-08 failed: %s; %s;',[AKey,e.Message]);
+ end;
+
+ Result:=true;
+
+end;
+
+procedure TestValue (const AName, AValue: Unicodestring);
+var
+ wrong,s: unicodestring;
+begin
+ try
+ wrong:=AName+'_wrong';
+ if reg.ValueExists(wrong) then
+ reg.DeleteValue(wrong);
+ if reg.ValueExists(wrong) then
+ begin
+ Results.Add('TestValue-01 failed: DeleteValue(%s)',[wrong]);
+ exit;
+ end;
+ reg.WriteString(wrong,AValue);
+ s:=reg.ReadString(wrong);
+ if s<>AValue then
+ begin
+ Results.Add('TestValue-02 failed: WriteString(%s,%s)',[wrong,AValue]);
+ exit;
+ end;
+
+ if reg.ValueExists(AName) then
+ reg.DeleteValue(AName);
+ if reg.ValueExists(AName) then
+ begin
+ Results.Add('TestValue-03 failed: DeleteValue(%s)',[AName]);
+ exit;
+ end;
+
+ reg.RenameValue(wrong,AName);
+ s:=reg.ReadString(AName);
+ if s<>AValue then
+ begin
+ Results.Add('TestValue-04 failed: RenameValue(%s,%s)',[wrong,AName]);
+ exit;
+ end;
+
+ Results.Add('TestValue passed: %s; %s;',[AName,AValue]);
+
+ except
+ on e:Exception do
+ Results.Add('TestValue-08 failed: %s; %s; %s;',[AName,AValue,e.Message]);
+ end;
+end;
+
+procedure TestGetKeyNames (const AKey, AExpected: Unicodestring);
+var
+ sl: TStringList;
+begin
+ sl:=TStringList.Create;
+ sl.Delimiter:=';';
+ reg.CloseKey;
+ try
+ if not reg.OpenKeyReadOnly(AKey) then
+ begin
+ Results.Add('TestGetKeyNames-01 failed: Key "%s";',[AKey]);
+ exit;
+ end;
+ reg.GetKeyNames(sl);
+ if Utf8Decode(sl.DelimitedText)=AExpected then
+ Results.Add('TestGetKeyNames passed: Key: "%s"; Expected: "%s";',[AKey,AExpected])
+ else
+ Results.Add('TestGetKeyNames-02 failed: Key: "%s"; got: "%s"; expected: "%s";',
+ [AKey,sl.DelimitedText,AExpected]);
+ except
+ on e:Exception do
+ Results.Add('TestGetKeyNames-03 failed exception: Key: "%s"; Got: "%s"; Expected: "%s"; Exception: "%s";',
+ [AKey,sl.DelimitedText,AExpected,e.Message]);
+ end;
+ sl.Free;
+end;
+
+procedure TestGetValueNames (const AKey, AExpected: Unicodestring);
+var
+ sl: TStringList;
+begin
+ sl:=TStringList.Create;
+ sl.Delimiter:=';';
+ try
+ reg.GetValueNames(sl);
+ if Utf8Decode(sl.DelimitedText)=AExpected then
+ Results.Add('TestGetValueNames passed: Key: "%s"; Expected "%s";',[AKey,AExpected])
+ else
+ Results.Add('TestGetValueNames-01 failed: Key "%s"; Got: "%s"; Expected: "%s";',
+ [AKey,sl.DelimitedText,AExpected]);
+ except
+ on e:Exception do
+ Results.Add('TestGetValueNames-02 failed exception: Key: "%s"; Got: "%s"; expected: "%s"; exception: "%s";',
+ [AKey,sl.DelimitedText,AExpected,e.Message]);
+ end;
+ sl.Free;
+end;
+
+procedure Test;
+var
+ sKey: Unicodestring;
+ slKeys,
+ slNames,
+ slValues: TStringList;
+ sValueNames,
+ s: Unicodestring;
+ k,n,v: integer;
+ l: longint;
+begin
+ sKey:=LabelKeyCaption;
+ l:=pos('\',LabelKeyCaption);
+ if l>0 then
+ delete(sKey,1,l);
+ if sKey[Length(sKey)]='\' then
+ SetLength(sKey,Length(sKey)-1);
+
+ slKeys:=TStringList.Create;
+ slKeys.Delimiter:=';';
+ slKeys.DelimitedText:=Utf8Encode(EditKey);
+
+ slNames:=TStringList.Create;
+ slNames.Delimiter:=';';
+ slNames.DelimitedText:=Utf8Encode(LabeledEditName);
+
+ slValues:=TStringList.Create;
+ slValues.Delimiter:=';';
+ slValues.DelimitedText:=Utf8Encode(LabeledEditValue);
+
+ for k:=0 to slKeys.Count-1 do
+ if TestKey(sKey+'\'+Utf8Decode(slKeys[k])) then
+ begin
+ sValueNames:='';
+ for n:=0 to slNames.Count-1 do
+ for v:=0 to slValues.Count-1 do
+ begin
+ s:=UnicodeFormat('%d%d%d_%s',[k,n,v,Utf8Decode(slNames[n])]);
+ if sValueNames='' then
+ sValueNames:=s
+ else
+ sValueNames:=sValueNames+Utf8Decode(slNames.Delimiter)+s;
+ TestValue(s,Utf8Decode(slValues[v]));
+ end;
+ TestGetValueNames(reg.CurrentPath,sValueNames);
+ end;
+
+ TestGetKeyNames(sKey,Utf8Decode(slKeys.DelimitedText));
+
+ reg.CloseKey;
+
+ slKeys.Free;
+ slNames.Free;
+ slValues.Free;
+end;
+
+Procedure WN;
+Var
+ F : Text;
+
+
+begin
+ Assign(F,'names.txt');
+ Rewrite(F);
+ Writeln(F,EditKey);
+ Writeln(F,labeledEditName);
+ Writeln(F,LabeledEditValue);
+ Writeln(F,LabelKeyCaption);
+ Close(F);
+end;
+
+begin
+ defaultsystemcodepage:=CP_UTF8;
+ if (ParamStr(1)='-s') then
+ WN;
+ reg:=TRegistry.Create;
+ reg.lazywrite:=false;
+ Results:=TStringList.Create;
+ Test;
+ Reg.Free;
+ if (ParamStr(1)='-s') then
+ Results.SaveToFile('result.txt');
+ Writeln(Results.Text);
+ Results.Free;
+ {$IFDEF WINDOWS}Readln;{$ENDIF}
+end.
+