Browse Source

* Add testcase for jdoIgnoreNulls

git-svn-id: trunk@46328 -
michael 5 years ago
parent
commit
a5a4a32ff9
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

@@ -396,9 +396,8 @@ begin
       If B then
         exit;
       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
     On E : Exception do
       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: TJSONObject; AObject: TObject);
     procedure DoDateTimeFormat;
+    Procedure DoNullError;
   protected
     procedure SetUp; override;
     procedure TearDown; override;
@@ -138,6 +139,8 @@ type
     Procedure TestVariantString;
     Procedure TestVariantArray;
     procedure TestEmpty;
+    procedure TestNullError;
+    procedure TestNull;
     procedure TestBoolean;
     procedure TestInteger;
     procedure TestIntegerCaseInsensitive;
@@ -284,6 +287,23 @@ begin
   AssertEquals('Empty Tag',0,TComponent(FToFree).Tag);
 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);
 
 begin
@@ -428,6 +448,15 @@ begin
   DeStream('{"DateTimeProp" : "'+DateTimeToStr(RecodeMillisecond(Now,0))+'"}',FToFree);
 end;
 
+procedure TTestJSONDeStreamer.DoNullError;
+Var
+  B : TBooleanComponent;
+
+begin
+  B:=TBooleanComponent.Create(Nil);
+  Destream('{ "BooleanProp" : null }',B);
+end;
+
 procedure TTestJSONDeStreamer.TestDateTimeFormat;
 
 Const