Repository URL to install this package:
Version:
3.0.0 ▾
|
unit jsonconftest;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, testutils, testregistry, jsonconf;
type
{ TTestJSONConfig }
TTestJSONConfig= class(TTestCase)
Private
Function CreateConf(AFileName : String) : TJSONCOnfig;
Procedure DeleteConf(C : TJSONConfig; DeleteConfFile : Boolean = true);
published
procedure TestDataTypes;
procedure TestSubNodes;
procedure TestEnumSubkeys;
procedure TestEnumValues;
procedure TestClear;
procedure TestKey;
end;
implementation
function TTestJSONConfig.CreateConf(AFileName: String): TJSONCOnfig;
begin
Result:=TJSONConfig.Create(Nil);
Result.FileName:=AFileName;
end;
procedure TTestJSONConfig.DeleteConf(C: TJSONConfig; DeleteConfFile: Boolean);
Var
FN : String;
begin
If DeleteConfFile then
FN:=C.FileName;
FreeAndNil(C);
If DeleteConfFile then
DeleteFile(FN);
end;
procedure TTestJSONConfig.TestDataTypes;
Const
A = Integer(1);
B = 'A string';
C = 1.23;
D = True;
E = Int64($FFFFFFFFFFFFF);
Var
Co : TJSONCOnfig;
begin
Co:=CreateConf('test.json');
try
Co.SetValue('a',a);
AssertEquals('Integer read/Write',a,Co.GetValue('a',0));
Co.SetValue('b',b);
AssertEquals('String read/Write',b,Co.GetValue('b',''));
Co.SetValue('c',C);
AssertEquals('Float read/Write',c,Co.GetValue('c',0.0),0.01);
Co.SetValue('d',d);
AssertEquals('Boolean read/Write',d,Co.GetValue('d',False));
Co.SetValue('e',E);
AssertEquals('Int64 read/Write',e,Co.GetValue('e',Int64(0)));
Co.Flush;
finally
DeleteConf(Co,True);
end;
end;
procedure TTestJSONConfig.TestSubNodes;
Var
C : TJSONCOnfig;
begin
C:=CreateConf('test.json');
try
C.SetValue('a',1);
AssertEquals('Read at root',1,C.GetValue('a',0));
C.SetValue('b/a',2);
AssertEquals('Read at root',2,C.GetValue('b/a',2));
C.SetValue('b/c/a',3);
AssertEquals('Read at root',3,C.GetValue('b/c/a',3));
finally
DeleteConf(C,True);
end;
end;
procedure TTestJSONConfig.TestEnumSubkeys;
Var
C : TJSONCOnfig;
L : TStringList;
begin
C:=CreateConf('test.json');
try
C.SetValue('/a',1);
C.SetValue('/b/a',2);
C.SetValue('/b/b',2);
C.SetValue('/c/a',3);
C.SetValue('/c/b/a',4);
C.SetValue('/c/c/a',4);
C.SetValue('/c/d/d',4);
L:=TStringList.Create;
try
C.EnumSubKeys('/',L);
If (L.Count<>2) then
Fail('EnumSubkeys count');
If (L[0]<>'b') then
Fail('EnumSubkeys first element');
If (L[1]<>'c') then
Fail('EnumSubkeys second element');
finally
L.Free;
end;
finally
DeleteConf(C,True);
end;
end;
procedure TTestJSONConfig.TestEnumValues;
Var
C : TJSONCOnfig;
L : TStringList;
begin
C:=CreateConf('test.json');
try
C.SetValue('/a',1);
C.SetValue('/b/a',2);
C.SetValue('/b/b',2);
C.SetValue('/c/a',3);
C.SetValue('/c/b/a',4);
C.SetValue('/c/c/a',4);
C.SetValue('/c/d/d',4);
L:=TStringList.Create;
try
C.EnumValues('/',L);
If (L.Count<>1) then
Fail('EnumValues count');
If (L[0]<>'a') then
Fail('EnumValues first element');
L.Clear;
C.EnumValues('/b',L);
If (L.Count<>2) then
Fail('EnumValues subkey count');
If (L[0]<>'a') then
Fail('EnumValues subkey first element');
If (L[1]<>'b') then
Fail('EnumValues subkey second element');
finally
L.Free;
end;
finally
DeleteConf(C,True);
end;
end;
procedure TTestJSONConfig.TestClear;
Var
C : TJSONCOnfig;
begin
C:=CreateConf('test.json');
try
C.SetValue('a',1);
C.DeleteValue('a');
AssertEquals('Delete value',0,C.GetValue('a',0));
C.SetValue('b/a',1);
C.SetValue('b/c',2);
C.DeleteValue('b/a');
AssertEquals('Delete value in subkey',0,C.GetValue('a',0));
AssertEquals('Delete value only clears deleted value',2,C.GetValue('b/c',0));
C.SetValue('b/a',1);
C.DeletePath('b');
AssertEquals('Delete path',0,C.GetValue('b/a',0));
AssertEquals('Delete path deletes all values',0,C.GetValue('b/c',0));
C.Clear;
AssertEquals('Clear',0,C.GetValue('/a',0));
finally
DeleteConf(C,True);
end;
end;
procedure TTestJSONConfig.TestKey;
Var
C : TJSONCOnfig;
L : TStrings;
begin
C:=CreateConf('test.json');
try
C.SetValue('a',1);
C.SetValue('b/a',2);
C.SetValue('b/b',2);
C.SetValue('b/c/a',3);
C.SetValue('b/c/b',3);
C.OpenKey('/b',False);
AssertEquals('Read relative to key a',2,C.GetValue('a',0));
AssertEquals('Read relative to key b',2,C.GetValue('b',0));
AssertEquals('Read in subkey relative to key a',3,C.GetValue('c/a',0));
AssertEquals('Read in subkey relative to key b',3,C.GetValue('c/b',0));
AssertEquals('Read absolute, disregarding key',1,C.GetValue('/a',0));
AssertEquals('Read absolute in subkey, disregarding key',2,C.GetValue('/b/a',0));
AssertEquals('Read absolute in subkeys, disregarding key',3,C.GetValue('/b/c/a',0));
C.CloseKey;
AssertEquals('Closekey',1,C.GetValue('a',0));
C.OpenKey('b',False);
C.OpenKey('c',False);
AssertEquals('Open relative key',3,C.GetValue('a',0));
C.ResetKey;
AssertEquals('ResetKey',1,C.GetValue('a',0));
C.Clear;
L:=TStringList.Create;
try
C.EnumSubKeys('/',L);
If (L.Count<>0) then
Fail('clear failed');
C.OpenKey('/a/b/c/d',true);
C.EnumSubKeys('/a',L);
If (L.Count<>1) then
Fail('Open key with allowcreate, level 1');
If (L[0]<>'b') then
Fail('Open key with allowcreate, level 1');
L.Clear;
C.EnumSubKeys('/a/b',L);
If (L.Count<>1) then
Fail('Open key with allowcreate, level 2');
If (L[0]<>'c') then
Fail('Open key with allowcreate, level 2');
L.Clear;
C.EnumSubKeys('/a/b/c',L);
If (L.Count<>1) then
Fail('Open key with allowcreate, level 3');
If (L[0]<>'d') then
Fail('Open key with allowcreate, level 3');
finally
L.Free;
end;
finally
DeleteConf(C,True);
end;
end;
initialization
RegisterTest(TTestJSONConfig);
end.