Browse Source

* Fix whitespace handling due to new structure

git-svn-id: trunk@42887 -
michael 6 years ago
parent
commit
3bc01b590e
2 changed files with 31 additions and 2 deletions
  1. 1 1
      packages/fcl-json/src/jsonscanner.pp
  2. 30 1
      packages/fcl-json/tests/testjsonparser.pp

+ 1 - 1
packages/fcl-json/src/jsonscanner.pp

@@ -265,7 +265,7 @@ begin
       FetchLine;
       FetchLine;
       Result := tkWhitespace;
       Result := tkWhitespace;
       end;
       end;
-    #9, ' ':
+    #9, ' ', #10, #13:
       begin
       begin
       Result := tkWhitespace;
       Result := tkWhitespace;
       repeat
       repeat

+ 30 - 1
packages/fcl-json/tests/testjsonparser.pp

@@ -69,6 +69,7 @@ type
     Procedure TestNoHandlerError;
     Procedure TestNoHandlerError;
     Procedure TestHandlerResult;
     Procedure TestHandlerResult;
     Procedure TestHandlerResultStream;
     Procedure TestHandlerResultStream;
+    Procedure TestEmptyLine;
   end;
   end;
 
 
 implementation
 implementation
@@ -341,7 +342,6 @@ end;
 
 
 procedure TTestParser.TestObjectError;
 procedure TTestParser.TestObjectError;
 begin
 begin
-
   DoTestError('{ "name" : value }',[joUTF8]);
   DoTestError('{ "name" : value }',[joUTF8]);
 end;
 end;
 
 
@@ -490,15 +490,19 @@ procedure TTestParser.TestNoHandlerError;
 
 
 Var
 Var
   H : TJSONParserHandler;
   H : TJSONParserHandler;
+  HS : TJSONStringParserHandler;
 
 
 begin
 begin
   H:=GetJSONParserHandler;
   H:=GetJSONParserHandler;
+  HS:=GetJSONStringParserHandler;
   try
   try
     AssertSame('SetJSONParserHandler returns previous handler',H,SetJSONParserHandler(Nil));
     AssertSame('SetJSONParserHandler returns previous handler',H,SetJSONParserHandler(Nil));
+    AssertSame('SetJSONStringParserHandler returns previous handler',HS,SetJSONStringParserHandler(Nil));
     AssertException('No handler raises exception',EJSON,@CallNoHandler);
     AssertException('No handler raises exception',EJSON,@CallNoHandler);
     AssertException('No handler raises exception',EJSON,@CallNoHandlerStream);
     AssertException('No handler raises exception',EJSON,@CallNoHandlerStream);
   finally
   finally
     SetJSONParserHandler(H);
     SetJSONParserHandler(H);
+    SetJSONStringParserHandler(HS);
   end;
   end;
 end;
 end;
 
 
@@ -535,6 +539,31 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TTestParser.TestEmptyLine;
+// Bug report 36037
+Const MyJSON =
+'  {'+sLineBreak+
+'  "pylib__linux" : "libpython3.7m.so.1.0",'+sLineBreak+
+'  "ui_toolbar_theme": "default_24x24",'+sLineBreak+
+'  "ui_toolbar_show" : true,'+sLineBreak+
+'  "font_name__linux" : "DejaVu Sans Mono",'+sLineBreak+
+'  "font_size__linux" : 10,'+sLineBreak+
+'    "ui_listbox_fuzzy": false,'+sLineBreak+
+'    "ui_max_size_lexer": 5,'+sLineBreak+
+'    "find_separate_form": false,'+sLineBreak+sLineBreak+
+'}';
+  var
+    J : TJSONData;
+begin
+  With TJSONParser.Create(MyJSON,[joUTF8,joIgnoreTrailingComma]) do
+  Try
+    J:=Parse;
+    J.Free;
+  Finally
+    Free;
+  end;
+end;
+
 procedure TTestParser.DoTestError(S : String; Options : TJSONOptions = DefaultOpts);
 procedure TTestParser.DoTestError(S : String; Options : TJSONOptions = DefaultOpts);
 
 
 Var
 Var