mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 12:09:14 +02:00
* Added tests for new methods, added insert (null)
git-svn-id: trunk@18965 -
This commit is contained in:
parent
d924b36ee8
commit
4204cfe271
@ -314,6 +314,7 @@ Type
|
|||||||
function Add(AnObject: TJSONObject): Integer;
|
function Add(AnObject: TJSONObject): Integer;
|
||||||
Procedure Delete(Index : Integer);
|
Procedure Delete(Index : Integer);
|
||||||
procedure Exchange(Index1, Index2: Integer);
|
procedure Exchange(Index1, Index2: Integer);
|
||||||
|
procedure Insert(Index: Integer);
|
||||||
procedure Insert(Index: Integer; Item : TJSONData);
|
procedure Insert(Index: Integer; Item : TJSONData);
|
||||||
procedure Insert(Index: Integer; I : Integer);
|
procedure Insert(Index: Integer; I : Integer);
|
||||||
procedure Insert(Index: Integer; I : Int64);
|
procedure Insert(Index: Integer; I : Int64);
|
||||||
@ -1541,6 +1542,11 @@ begin
|
|||||||
FList.Exchange(Index1, Index2);
|
FList.Exchange(Index1, Index2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TJSONArray.Insert(Index: Integer);
|
||||||
|
begin
|
||||||
|
Insert(Index,TJSONNull.Create);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TJSONArray.Insert(Index: Integer; Item: TJSONData);
|
procedure TJSONArray.Insert(Index: Integer; Item: TJSONData);
|
||||||
begin
|
begin
|
||||||
FList.Insert(Index, Item);
|
FList.Insert(Index, Item);
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
<Version Value="9"/>
|
<Version Value="10"/>
|
||||||
<SearchPaths>
|
<SearchPaths>
|
||||||
<OtherUnitFiles Value="../src"/>
|
<OtherUnitFiles Value="../src"/>
|
||||||
</SearchPaths>
|
</SearchPaths>
|
||||||
|
@ -18,7 +18,7 @@ program testjson;
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, consoletestrunner, testjsondata, testjsonparser,
|
Classes, consoletestrunner, testjsondata, testjsonparser,
|
||||||
fpcunitconsolerunner, testjsonrtti, fpjsonrtti;
|
fpcunitconsolerunner; //, testjsonrtti, fpjsonrtti;
|
||||||
type
|
type
|
||||||
{ TLazTestRunner }
|
{ TLazTestRunner }
|
||||||
TMyTestRunner = class(TTestRunner)
|
TMyTestRunner = class(TTestRunner)
|
||||||
|
@ -130,6 +130,7 @@ type
|
|||||||
TTestArray = class(TTestJSON)
|
TTestArray = class(TTestJSON)
|
||||||
private
|
private
|
||||||
procedure TestAddBoolean(B : Boolean);
|
procedure TestAddBoolean(B : Boolean);
|
||||||
|
procedure TestInsertBoolean(B : Boolean);
|
||||||
published
|
published
|
||||||
Procedure TestCreate;
|
Procedure TestCreate;
|
||||||
Procedure TestCreateString;
|
Procedure TestCreateString;
|
||||||
@ -153,6 +154,17 @@ type
|
|||||||
procedure TestAddNull;
|
procedure TestAddNull;
|
||||||
procedure TestAddObject;
|
procedure TestAddObject;
|
||||||
procedure TestAddArray;
|
procedure TestAddArray;
|
||||||
|
procedure TestInsertInteger;
|
||||||
|
procedure TestInsertInt64;
|
||||||
|
procedure TestInsertFloat;
|
||||||
|
procedure TestInsertBooleanTrue;
|
||||||
|
procedure TestInsertBooleanFalse;
|
||||||
|
procedure TestInsertString;
|
||||||
|
procedure TestInsertNull;
|
||||||
|
procedure TestInsertObject;
|
||||||
|
procedure TestInsertArray;
|
||||||
|
procedure TestMove;
|
||||||
|
procedure TestExchange;
|
||||||
procedure TestDelete;
|
procedure TestDelete;
|
||||||
procedure TestRemove;
|
procedure TestRemove;
|
||||||
Procedure TestClone;
|
Procedure TestClone;
|
||||||
@ -1333,6 +1345,30 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertBoolean(B: Boolean);
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
|
||||||
|
begin
|
||||||
|
B:=True;
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add(Not B);
|
||||||
|
J.Insert(0,B);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtBoolean);
|
||||||
|
AssertEquals('J[0] is TJSONBoolean',TJSONBoolean,J[0].ClassType);
|
||||||
|
TestAsBoolean(J[0],B);
|
||||||
|
AssertEquals('J.Booleans[0]='+BoolToStr(B)+'"',B,J.Booleans[0]);
|
||||||
|
If B then
|
||||||
|
TestJSON(J,'[true, false]')
|
||||||
|
else
|
||||||
|
TestJSON(J,'[false, true]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestArray.TestAddBooleanTrue;
|
procedure TTestArray.TestAddBooleanTrue;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -1416,6 +1452,237 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertInteger;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
|
||||||
|
begin
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add(Integer(1));
|
||||||
|
J.Insert(0,Integer(0));
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtNumber);
|
||||||
|
AssertEquals('J[0] is TJSONIntegerNumber',J[0].ClassType,TJSONIntegerNumber);
|
||||||
|
AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
|
||||||
|
AssertEquals('J.Integers[0]=0',0,J.integers[0]);
|
||||||
|
TestAsInteger(J[0],0);
|
||||||
|
TestAsInt64(J[0],0);
|
||||||
|
TestJSON(J,'[0, 1]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertInt64;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
|
||||||
|
begin
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add(Int64(1));
|
||||||
|
J.Insert(0,Int64(0));
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtNumber);
|
||||||
|
AssertEquals('J[0] is TJSONInt64Number',J[0].ClassType,TJSONInt64Number);
|
||||||
|
AssertEquals('j.Types[0]=jtNumber',ord(J.Types[0]),Ord(jtNumber));
|
||||||
|
AssertEquals('J.Int64s[0]=0',0,J.Int64s[0]);
|
||||||
|
TestAsInteger(J[0],0);
|
||||||
|
TestAsInt64(J[0],0);
|
||||||
|
TestJSON(J,'[0, 1]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertFloat;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
S,S2 : String;
|
||||||
|
F : TJSONFloat;
|
||||||
|
begin
|
||||||
|
F:=1.2;
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add(2.3);
|
||||||
|
J.Insert(0,F);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtNumber);
|
||||||
|
AssertEquals('J[0] is TJSONFloatNumber',TJSONfloatNumber,J[0].ClassType);
|
||||||
|
AssertEquals('j.Types[0]=jtNumber',Ord(jtNumber),ord(J.Types[0]));
|
||||||
|
AssertEquals('J.Floats[0]='+FloatToStr(F),F,J.Floats[0]);
|
||||||
|
TestAsFloat(J[0],F);
|
||||||
|
Str(F,S);
|
||||||
|
F:=2.3;
|
||||||
|
Str(F,S2);
|
||||||
|
TestJSON(J,'['+S+', '+S2+']');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertBooleanTrue;
|
||||||
|
begin
|
||||||
|
TestInsertBoolean(True);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertBooleanFalse;
|
||||||
|
begin
|
||||||
|
TestInsertBoolean(False);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertString;
|
||||||
|
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
S : String;
|
||||||
|
F : TJSONFloat;
|
||||||
|
|
||||||
|
begin
|
||||||
|
S:='A string';
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add('Another string');
|
||||||
|
J.Insert(0,S);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtString);
|
||||||
|
AssertEquals('J[0] is TJSONString',TJSONString,J[0].ClassType);
|
||||||
|
TestAsString(J[0],S);
|
||||||
|
AssertEquals('J.Strings[0]="'+S+'"',S,J.Strings[0]);
|
||||||
|
TestJSON(J,'["'+StringToJSONString(S)+'", "Another string"]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertNull;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
S : String;
|
||||||
|
F : TJSONFloat;
|
||||||
|
|
||||||
|
begin
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add(123);
|
||||||
|
J.Insert(0);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtNull);
|
||||||
|
AssertEquals('J[0] is TJSONNull',TJSONNull,J[0].ClassType);
|
||||||
|
AssertEquals('J.Nulls[0]=True',True,J.Nulls[0]);
|
||||||
|
TestIsNull(J[0],true);
|
||||||
|
TestJSON(J,'[null, 123]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertObject;
|
||||||
|
Const
|
||||||
|
A = 'a';
|
||||||
|
B = 'b';
|
||||||
|
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
J2 : TJSONObject;
|
||||||
|
|
||||||
|
begin
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add('A string');
|
||||||
|
J2:=TJSonObject.Create;
|
||||||
|
J2.Add(A,0);
|
||||||
|
J2.Add(B,1);
|
||||||
|
J.Insert(0,J2);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtObject);
|
||||||
|
AssertEquals('J[0] is TJSONObject',TJSONObject,J[0].ClassType);
|
||||||
|
AssertEquals('J.Objects[0] is TJSONObject',TJSONObject,J.Objects[0].ClassType);
|
||||||
|
TestAsInteger(J.Objects[0][A],0);
|
||||||
|
TestAsInteger(J.Objects[0][B],1);
|
||||||
|
TestAsInt64(J.Objects[0][A],0);
|
||||||
|
TestAsInt64(J.Objects[0][B],1);
|
||||||
|
TestJSON(J,'[{ "a" : 0, "b" : 1 }, "A string"]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestInsertArray;
|
||||||
|
Var
|
||||||
|
J,J2 : TJSONArray;
|
||||||
|
|
||||||
|
begin
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add('Something nice');
|
||||||
|
J2:=TJSonArray.Create;
|
||||||
|
J2.Add(0);
|
||||||
|
J2.Add(1);
|
||||||
|
J.Insert(0,J2);
|
||||||
|
TestItemCount(J,2);
|
||||||
|
TestJSONType(J[0],jtArray);
|
||||||
|
AssertEquals('J[0] is TJSONArray',TJSONArray,J[0].ClassType);
|
||||||
|
AssertEquals('J.Arrays[0] is TJSONArray',TJSONArray,J.Arrays[0].ClassType);
|
||||||
|
TestAsInteger(J.Arrays[0][0],0);
|
||||||
|
TestAsInteger(J.Arrays[0][1],1);
|
||||||
|
TestAsInt64(J.Arrays[0][0],0);
|
||||||
|
TestAsInt64(J.Arrays[0][1],1);
|
||||||
|
TestJSON(J,'[[0, 1], "Something nice"]');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestMove;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
S : String;
|
||||||
|
F : TJSONFloat;
|
||||||
|
|
||||||
|
begin
|
||||||
|
S:='A string';
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add('First string');
|
||||||
|
J.Add('Second string');
|
||||||
|
J.Add('Third string');
|
||||||
|
J.Move(2,1);
|
||||||
|
TestItemCount(J,3);
|
||||||
|
AssertEquals('J[2] is TJSONString',TJSONString,J[1].ClassType);
|
||||||
|
AssertEquals('J[1] is TJSONString',TJSONString,J[2].ClassType);
|
||||||
|
TestAsString(J[1],'Third string');
|
||||||
|
TestAsString(J[2],'Second string');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTestArray.TestExchange;
|
||||||
|
Var
|
||||||
|
J : TJSONArray;
|
||||||
|
S : String;
|
||||||
|
F : TJSONFloat;
|
||||||
|
|
||||||
|
begin
|
||||||
|
S:='A string';
|
||||||
|
J:=TJSonArray.Create;
|
||||||
|
try
|
||||||
|
J.Add('First string');
|
||||||
|
J.Add('Second string');
|
||||||
|
J.Add('Third string');
|
||||||
|
J.Exchange(2,0);
|
||||||
|
TestItemCount(J,3);
|
||||||
|
AssertEquals('J[2] is TJSONString',TJSONString,J[0].ClassType);
|
||||||
|
AssertEquals('J[1] is TJSONString',TJSONString,J[2].ClassType);
|
||||||
|
TestAsString(J[0],'Third string');
|
||||||
|
TestAsString(J[2],'First string');
|
||||||
|
finally
|
||||||
|
FreeAndNil(J);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestArray.TestAddObject;
|
procedure TTestArray.TestAddObject;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
|
Loading…
Reference in New Issue
Block a user