Browse Source

* Merging revisions r46328 from trunk:
------------------------------------------------------------------------
r46328 | michael | 2020-08-08 14:28:19 +0200 (Sat, 08 Aug 2020) | 1 line

* Add testcase for jdoIgnoreNulls
------------------------------------------------------------------------

git-svn-id: branches/fixes_3_2@46636 -

michael 5 years ago
parent
commit
3d7a00bfc9
2 changed files with 31 additions and 3 deletions
  1. 2 3
      packages/fcl-json/src/fpjsonrtti.pp
  2. 29 0
      packages/fcl-json/tests/testjsonrtti.pp

+ 2 - 3
packages/fcl-json/src/fpjsonrtti.pp

@@ -398,9 +398,8 @@ begin
       If B then
       If B then
         exit;
         exit;
       end;
       end;
-    if (PropData.JSONType=jtNull) then
-      if Not (jdoIgnoreNulls in Options) then
-        DoRestoreProperty(AObject,PropInfo,PropData);
+    if (PropData.JSONType<>jtNull) or not (jdoIgnoreNulls in Options) then
+      DoRestoreProperty(AObject,PropInfo,PropData)
   except
   except
     On E : Exception do
     On E : Exception do
       If Assigned(FOnPropError) then
       If Assigned(FOnPropError) then

+ 29 - 0
packages/fcl-json/tests/testjsonrtti.pp

@@ -122,6 +122,7 @@ type
     procedure DeStream(JSON: TJSONStringType; AObject: TObject);
     procedure DeStream(JSON: TJSONStringType; AObject: TObject);
     procedure DeStream(JSON: TJSONObject; AObject: TObject);
     procedure DeStream(JSON: TJSONObject; AObject: TObject);
     procedure DoDateTimeFormat;
     procedure DoDateTimeFormat;
+    Procedure DoNullError;
   protected
   protected
     procedure SetUp; override;
     procedure SetUp; override;
     procedure TearDown; override;
     procedure TearDown; override;
@@ -138,6 +139,8 @@ type
     Procedure TestVariantString;
     Procedure TestVariantString;
     Procedure TestVariantArray;
     Procedure TestVariantArray;
     procedure TestEmpty;
     procedure TestEmpty;
+    procedure TestNullError;
+    procedure TestNull;
     procedure TestBoolean;
     procedure TestBoolean;
     procedure TestInteger;
     procedure TestInteger;
     procedure TestIntegerCaseInsensitive;
     procedure TestIntegerCaseInsensitive;
@@ -284,6 +287,23 @@ begin
   AssertEquals('Empty Tag',0,TComponent(FToFree).Tag);
   AssertEquals('Empty Tag',0,TComponent(FToFree).Tag);
 end;
 end;
 
 
+procedure TTestJSONDeStreamer.TestNullError;
+
+begin
+  AssertException('Null error',EJSON, @DoNullError);
+end;
+
+procedure TTestJSONDeStreamer.TestNull;
+Var
+  B : TBooleanComponent;
+
+begin
+  B:=TBooleanComponent.Create(Nil);
+  DS.Options:=DS.Options+[jdoIgnoreNulls];
+  DeStream('{ "BooleanProp" : null }',B);
+  AssertEquals('Correct boolean value',False,B.BooleanProp);
+end;
+
 procedure TTestJSONDeStreamer.DeStream(JSON : TJSONStringType; AObject : TObject);
 procedure TTestJSONDeStreamer.DeStream(JSON : TJSONStringType; AObject : TObject);
 
 
 begin
 begin
@@ -428,6 +448,15 @@ begin
   DeStream('{"DateTimeProp" : "'+DateTimeToStr(RecodeMillisecond(Now,0))+'"}',FToFree);
   DeStream('{"DateTimeProp" : "'+DateTimeToStr(RecodeMillisecond(Now,0))+'"}',FToFree);
 end;
 end;
 
 
+procedure TTestJSONDeStreamer.DoNullError;
+Var
+  B : TBooleanComponent;
+
+begin
+  B:=TBooleanComponent.Create(Nil);
+  Destream('{ "BooleanProp" : null }',B);
+end;
+
 procedure TTestJSONDeStreamer.TestDateTimeFormat;
 procedure TTestJSONDeStreamer.TestDateTimeFormat;
 
 
 Const
 Const