瀏覽代碼

fcl-db: tests: improve testing Blobs (use not only ascii characters, but also binary data etc.)

git-svn-id: trunk@25451 -
lacak 12 年之前
父節點
當前提交
91783105cc
共有 1 個文件被更改,包括 46 次插入32 次删除
  1. 46 32
      packages/fcl-db/tests/testfieldtypes.pas

+ 46 - 32
packages/fcl-db/tests/testfieldtypes.pas

@@ -167,6 +167,16 @@ const
     '0001-01-01'
     '0001-01-01'
   );
   );
 
 
+  testBlobValuesCount = 6;
+  testBlobValues : Array[0..testBlobValuesCount-1] of ansistring = (
+    'Test deze Blob',    // common value
+    '',                  // empty value
+    'a'#0'b'#13#10#1'c', // binary data
+    '''":a',             // single quotes
+    '\''\',              // backslash
+    '\n'#13'\0ab''c'
+  );
+
   testBytesValuesCount = 5;
   testBytesValuesCount = 5;
   testVarBytesValuesCount = 8;
   testVarBytesValuesCount = 8;
   testBytesValues : Array[0..testVarBytesValuesCount-1] of shortstring = (
   testBytesValues : Array[0..testVarBytesValuesCount-1] of shortstring = (
@@ -1545,7 +1555,7 @@ begin
         ftBCD    : Params.ParamByName('field1').AsCurrency:= testBCDValues[i];
         ftBCD    : Params.ParamByName('field1').AsCurrency:= testBCDValues[i];
         ftFixedChar,
         ftFixedChar,
         ftString : Params.ParamByName('field1').AsString  := testValues[ADataType,i];
         ftString : Params.ParamByName('field1').AsString  := testValues[ADataType,i];
-        ftTime   : Params.ParamByName('field1').AsTime  := TimeStringToDateTime(testTimeValues[i]);
+        ftTime   : Params.ParamByName('field1').AsTime    := TimeStringToDateTime(testTimeValues[i]);
         ftDate   : if cross then
         ftDate   : if cross then
                      Params.ParamByName('field1').AsString:= testDateValues[i]
                      Params.ParamByName('field1').AsString:= testDateValues[i]
                    else
                    else
@@ -1580,20 +1590,20 @@ begin
       begin
       begin
       AssertEquals(i,FieldByName('ID').AsInteger);
       AssertEquals(i,FieldByName('ID').AsInteger);
       case ADataType of
       case ADataType of
-        ftSmallInt: AssertEquals(testSmallIntValues[i],FieldByName('FIELD1').AsInteger);
-        ftInteger: AssertEquals(testIntValues[i],FieldByName('FIELD1').AsInteger);
-        ftLargeInt: AssertEquals(testLargeIntValues[i],FieldByName('FIELD1').AsLargeInt);
-        ftBoolean: AssertEquals(testBooleanValues[i],FieldByName('FIELD1').AsBoolean);
-        ftFloat  : AssertEquals(testFloatValues[i],FieldByName('FIELD1').AsFloat);
-        ftBCD    : AssertEquals(testBCDValues[i],FieldByName('FIELD1').AsCurrency);
+        ftSmallInt : AssertEquals(testSmallIntValues[i],FieldByName('FIELD1').AsInteger);
+        ftInteger  : AssertEquals(testIntValues[i],FieldByName('FIELD1').AsInteger);
+        ftLargeInt : AssertEquals(testLargeIntValues[i],FieldByName('FIELD1').AsLargeInt);
+        ftBoolean  : AssertEquals(testBooleanValues[i],FieldByName('FIELD1').AsBoolean);
+        ftFloat    : AssertEquals(testFloatValues[i],FieldByName('FIELD1').AsFloat);
+        ftBCD      : AssertEquals(testBCDValues[i],FieldByName('FIELD1').AsCurrency);
         ftFixedChar : AssertEquals(PadRight(testStringValues[i],10),FieldByName('FIELD1').AsString);
         ftFixedChar : AssertEquals(PadRight(testStringValues[i],10),FieldByName('FIELD1').AsString);
-        ftString : AssertEquals(testStringValues[i],FieldByName('FIELD1').AsString);
-        ftTime   : AssertEquals(testTimeValues[i],DateTimeToTimeString(FieldByName('FIELD1').AsDateTime));
-        ftDate   : AssertEquals(testDateValues[i],DateTimeToStr(FieldByName('FIELD1').AsDateTime, DBConnector.FormatSettings));
+        ftString   : AssertEquals(testStringValues[i],FieldByName('FIELD1').AsString);
+        ftTime     : AssertEquals(testTimeValues[i],DateTimeToTimeString(FieldByName('FIELD1').AsDateTime));
+        ftDate     : AssertEquals(testDateValues[i],DateTimeToStr(FieldByName('FIELD1').AsDateTime, DBConnector.FormatSettings));
         ftDateTime : AssertEquals(testValues[ADataType,i], DateTimeToStr(FieldByName('FIELD1').AsDateTime, DBConnector.FormatSettings));
         ftDateTime : AssertEquals(testValues[ADataType,i], DateTimeToStr(FieldByName('FIELD1').AsDateTime, DBConnector.FormatSettings));
-        ftFMTBcd : AssertEquals(testFmtBCDValues[i], BCDToStr(FieldByName('FIELD1').AsBCD, DBConnector.FormatSettings));
+        ftFMTBcd   : AssertEquals(testFmtBCDValues[i], BCDToStr(FieldByName('FIELD1').AsBCD, DBConnector.FormatSettings));
         ftVarBytes,
         ftVarBytes,
-        ftBytes  : AssertEquals(testBytesValues[i], shortstring(FieldByName('FIELD1').AsString));
+        ftBytes    : AssertEquals(testBytesValues[i], shortstring(FieldByName('FIELD1').AsString));
       else
       else
         AssertTrue('no test for paramtype available',False);
         AssertTrue('no test for paramtype available',False);
       end;
       end;
@@ -1607,32 +1617,36 @@ begin
 end;
 end;
 
 
 procedure TTestFieldTypes.TestSetBlobAsParam(asWhat: integer);
 procedure TTestFieldTypes.TestSetBlobAsParam(asWhat: integer);
-const
-  TestValue='Test deze BLob';
-var
-  ASQL          : TSQLQuery;
+var i: integer;
 begin
 begin
   CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
   CreateTableWithFieldType(ftBlob,FieldtypeDefinitions[ftBlob]);
   TestFieldDeclaration(ftBlob,0);
   TestFieldDeclaration(ftBlob,0);
 
 
-  ASQL := DBConnector.GetNDataset(True,1) as tsqlquery;
-  with ASql  do
+  with TSQLDBConnector(DBConnector).Query do
     begin
     begin
-    sql.Text := 'insert into FPDEV2 (FT) values (:BlobParam)';
-    case asWhat of
-      0: Params.ParamByName('blobParam').AsMemo := TestValue;
-      1: Params.ParamByName('blobParam').AsString := TestValue;
-      2: Params.ParamByName('blobParam').AsBlob := TestValue;
-    end;
+    SQL.Text := 'insert into FPDEV2 (FT) values (:BlobParam)';
+    for i:=0 to testBlobValuesCount - 1 do
+      begin
+      case asWhat of
+        0: Params.ParamByName('blobParam').AsMemo   := TestBlobValues[i];
+        1: Params.ParamByName('blobParam').AsBlob   := TestBlobValues[i];
+        2: Params.ParamByName('blobParam').AsString := TestBlobValues[i];
+      end;
+      ExecSQL;
+      end;
+    Params.ParamByName('blobParam').Clear;
     ExecSQL;
     ExecSQL;
-    end;
 
 
-  with TSQLDBConnector(DBConnector).Query do
-    begin
+    SQL.Text := 'select FT from FPDEV2';
     Open;
     Open;
-    if not eof then
-      AssertEquals(TestValue, Fields[0].AsString);
-    close;
+    for i:=0 to testBlobValuesCount - 1 do
+      begin
+      AssertEquals(TestBlobValues[i], Fields[0].AsString);
+      Next;
+      end;
+    AssertTrue(Fields[0].IsNull);
+
+    Close;
     end;
     end;
 end;
 end;
 
 
@@ -1645,12 +1659,12 @@ end;
 
 
 procedure TTestFieldTypes.TestSetBlobAsBlobParam;
 procedure TTestFieldTypes.TestSetBlobAsBlobParam;
 begin
 begin
-  TestSetBlobAsParam(2);
+  TestSetBlobAsParam(1);
 end;
 end;
 
 
 procedure TTestFieldTypes.TestSetBlobAsStringParam;
 procedure TTestFieldTypes.TestSetBlobAsStringParam;
 begin
 begin
-  TestSetBlobAsParam(1);
+  TestSetBlobAsParam(2);
 end;
 end;