nulltests.pas

来自「DELPHI 访问SQLITE3 数据库的VCL控件」· PAS 代码 · 共 373 行

PAS
373
字号
unit NullTests;
{


Author:       Sean Cross
Description:
              Delphi DUnit Test Case
              ----------------------
              This unit contains a skeleton test case class generated by the
              Test Case Wizard. Modify the generated code to correctly setup
              and call the methods from the unit being tested.
Target:       Delphi 4, 5, 6 and 7; Delphi 2005, 2006; Borland C++ 5 and 6
Creation:     mai 8, 2006
Version:      2006.05.A
Alterations:  Albert Drent
              added unit tests
EMail:        a.drent@aducom.com (www.aducom.com)

}

interface

uses
  TestFramework, StdCtrls, AMDSqlite3, Classes, Buttons, Windows, Dialogs, Variants, Forms,
  SysUtils, Controls, Graphics, Messages, ModTestU;
type
  // Test methods for class TFMD

  TTestNullSupport = class(TTestCase)
  private
    TestModule: TmodTest;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestGetValuesNulls;
    procedure TestGetValues;
    procedure TestCreateDatabase;
    procedure TestInsertGivesNulls;
    procedure TestSetFieldToNull;
    procedure TestCalculatedFields;
    procedure TestCreateAndFree;
    procedure TestUpdate;
    procedure TestBlobs;
    procedure TestPost;
    procedure TestGetFieldBufferIndex;
    procedure TestTypeless;
    procedure TestFieldsOutOfOrder;
  end;

  TTestMasterDetail = class(TTestCase)
  private
    TestModule: TmodTest;
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
//    procedure TestCreateDatabase;
    procedure TestMasterDetail;
  end;

implementation

uses DateUtils, Db;

function GetCalcFieldsCount(ADataset: TDataset): integer;
var i: integer;
begin
  result:= 0;
  for I := 0 to ADataset.FieldCount - 1 do
    if ADataset.Fields[i].FieldKind <> fkData then
      inc(result);
end;

{ TTestNullSupport }

procedure TTestNullSupport.TestGetFieldBufferIndex;
begin
  TestModule.CreateDatabase;
  TestModule.tblCalc_.Open;


  CheckEquals(1, TestModule.tblCalc_FPKey.FieldNo);
  CheckEquals(0, TestModule.tblCalc_FPKey.Index);
  CheckEquals(0, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FPKey));

  CheckEquals(2, TestModule.tblCalc_FInt.FieldNo);
  CheckEquals(1, TestModule.tblCalc_FInt.Index);
  CheckEquals(1, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FInt));

  CheckEquals(7, TestModule.tblCalc_FText.FieldNo);
  CheckEquals(2, TestModule.tblCalc_FText.Index);
  CheckEquals(6, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FText)); //Was 2???

  CheckEquals(-1, TestModule.tblCalc_CalcInt.FieldNo);
  CheckEquals(3, TestModule.tblCalc_CalcInt.Index);
  CheckEquals(7, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_CalcInt)); //was 3

  CheckEquals(-1, TestModule.tblCalc_CalcString.FieldNo);
  CheckEquals(4, TestModule.tblCalc_CalcString.Index);
  CheckEquals(8, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_CalcString)); //was 4
end;

procedure TTestNullSupport.TestTypeless;
begin
  TestModule.CreateDatabase;
end;

procedure TTestNullSupport.SetUp;
begin
  inherited;
  TestModule:= TmodTest.Create(nil);
end;

procedure TTestNullSupport.TearDown;
begin
  inherited;
  TestModule.Free;
end;

procedure TTestNullSupport.TestBlobs;
begin
  TestModule.CreateDatabase;
  TestModule.OpenTable('TestBlobs');

  Check(ftMemo = TestModule.tblTemp.FieldByName('FBlob').DataType);
  Check(TestModule.tblTemp.FieldByName('FBlob').IsBlob);

  TestModule.tblTemp.insert;
  Check(TestModule.tblTemp.FieldByName('FBlob').isnull);

  TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 1;
  TestModule.tblTemp.FieldByName('FBlob').AsString:= 'This is a blob field....';
  CheckEquals('This is a blob field....', TestModule.tblTemp.FieldByName('FBlob').AsString);
  TestModule.tblTemp.Post;
//    onderste deel gaat nog fout
  TestModule.tblTemp.Close;
  TestModule.tblTemp.Open;
  CheckEquals(1, TestModule.tblTemp.FieldByName('FPKey').AsInteger);
  CheckEquals('This is a blob field....', TestModule.tblTemp.FieldByName('FBlob').AsString);
end;

procedure TTestNullSupport.TestCalculatedFields;
begin
  TestModule.CreateDatabase;
  TestModule.tblCalc_.Open;

  CheckEquals(2, GetCalcFieldsCount(TestModule.tblCalc_));
  
  CheckEquals(1, TestModule.tblCalc_FPKey.AsInteger);
  CheckEquals(12345, TestModule.tblCalc_FInt.AsInteger);
  CheckEquals('This is text!', TestModule.tblCalc_FText.AsString);
  CheckEquals(12355, TestModule.tblCalc_CalcInt.AsInteger);
  CheckEquals('Calc12345', TestModule.tblCalc_CalcString.AsString);
end;

procedure TTestNullSupport.TestCreateAndFree;
var Module: TmodTest;
begin
  Module:= TmodTest.Create(nil);
  Module.OpenTable('Testing');
  Module.tblTemp.FieldByName('FInt').IsNull;

  Module.Free;
end;

procedure TTestNullSupport.TestCreateDatabase;
begin
  TestModule.CreateDatabase;

  CheckEquals(2, TestModule.GetIntegerFromSql('select count(*) from Testing'));
end;

procedure TTestNullSupport.TestFieldsOutOfOrder;
begin
// as for blob test, but with fields in different order to table layout
  TestModule.CreateDatabase;
  TestModule.tblOutOfOrder_.Open;

  Check(ftMemo = TestModule.tblOutOfOrder_FBlob.DataType);
  Check(TestModule.tblOutOfOrder_FBlob.IsBlob);

  TestModule.tblOutOfOrder_.insert;
  Check(TestModule.tblOutOfOrder_FBlob.isnull);
//  CheckEquals('', TestModule.tblTemp.FieldByName('FBlob').AsString);

  TestModule.tblOutOfOrder_.FieldByName('FPKey').AsInteger:= 1;
  TestModule.tblOutOfOrder_FBlob.AsString:= 'This is a blob field....';
  CheckEquals('This is a blob field....', TestModule.tblOutOfOrder_.FieldByName('FBlob').AsString);
  TestModule.tblOutOfOrder_.Post;

  TestModule.tblOutOfOrder_.Close;
  TestModule.tblOutOfOrder_.Open;
  CheckEquals(1, TestModule.tblOutOfOrder_.FieldByName('FPKey').AsInteger);
  CheckEquals('This is a blob field....', TestModule.tblOutOfOrder_FBlob.AsString);

  TestModule.sqlOutOfOrder_.Close;
  TestModule.sqlOutOfOrder_.Open;
  CheckEquals(1, TestModule.sqlOutOfOrder_FPKey.AsInteger);
  CheckEquals('This is a blob field....', TestModule.sqlOutOfOrder_FBlob.AsString);
end;

procedure TTestNullSupport.TestGetValues;
begin
  TestModule.CreateDatabase;

  TestModule.OpenSql('select * from Testing where FPKey = 1');
  CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  CheckEquals(12345, TestModule.sqlTemp.FieldByName('FInt').AsInteger);
  CheckEquals(123.45, TestModule.sqlTemp.FieldByName('FFloat').AsFloat, 0.01);
  CheckEquals(True, TestModule.sqlTemp.FieldByName('FBool').AsBoolean);
  CheckEquals(EncodeDate(2006, 4, 1), TestModule.sqlTemp.FieldByName('FDate').AsDateTime);
  CheckEquals(EncodeDateTime(2006, 4, 1, 23, 30, 0, 0), TestModule.sqlTemp.FieldByName('FDateTime').AsDateTime);
  CheckEquals('This is text!', TestModule.sqlTemp.FieldByName('FText').AsString);

end;

procedure TTestNullSupport.TestGetValuesNulls;
begin
  TestModule.CreateDatabase;

  TestModule.OpenSql('select * from Testing where FPKey = 2');
  CheckEquals(2, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  Check(TestModule.sqlTemp.FieldByName('FInt').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FFloat').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FBool').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FDate').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FDateTime').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FText').IsNull);

end;

procedure TTestNullSupport.TestInsertGivesNulls;
begin
  TestModule.CreateDatabase;

  TestModule.OpenTable('Testing');
//  CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  TestModule.tblTemp.Insert;
  Check(TestModule.tblTemp.FieldByName('FInt').IsNull);
  Check(TestModule.tblTemp.FieldByName('FFloat').IsNull);
  Check(TestModule.tblTemp.FieldByName('FBool').IsNull);
  Check(TestModule.tblTemp.FieldByName('FDate').IsNull);
  Check(TestModule.tblTemp.FieldByName('FDateTime').IsNull);
  Check(TestModule.tblTemp.FieldByName('FText').IsNull);

end;

procedure TTestNullSupport.TestPost;
begin
  TestModule.CreateDatabase;
// not nulls

  TestModule.OpenTable('Testing');
  TestModule.tblTemp.Insert;
  TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 3;
  TestModule.tblTemp.FieldByName('FInt').AsInteger:= 67890;
  TestModule.tblTemp.FieldByName('FFloat').AsFloat:= 678.9;
  TestModule.tblTemp.FieldByName('FBool').AsBoolean:= true;
  TestModule.tblTemp.FieldByName('FDate').AsDateTime:= EncodeDate(2006, 4, 10);
  TestModule.tblTemp.FieldByName('FDateTime').AsDateTime:= EncodeDateTime(2006, 4, 10, 23, 30, 0, 0);
  TestModule.tblTemp.FieldByName('FText').AsString:= 'ABCDE';
  TestModule.tblTemp.Post;


  TestModule.tblTemp.Insert;
  TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 4;
  TestModule.tblTemp.Post;

  TestModule.OpenSql('select * from Testing where FPKey = 3');
  CheckEquals(3, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  CheckEquals(67890, TestModule.sqlTemp.FieldByName('FInt').AsInteger);
  CheckEquals(678.9, TestModule.sqlTemp.FieldByName('FFloat').AsFloat, 0.01);
  CheckEquals(True, TestModule.sqlTemp.FieldByName('FBool').AsBoolean);
  CheckEquals(EncodeDate(2006, 4, 10), TestModule.sqlTemp.FieldByName('FDate').AsDateTime);
  CheckEquals(EncodeDateTime(2006, 4, 10, 23, 30, 0, 0), TestModule.sqlTemp.FieldByName('FDateTime').AsDateTime);
  CheckEquals('ABCDE', TestModule.sqlTemp.FieldByName('FText').AsString);

// nulls
  TestModule.OpenSql('select * from Testing where FPKey = 4');
  CheckEquals(4, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  Check(TestModule.sqlTemp.FieldByName('FInt').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FFloat').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FBool').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FDate').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FDateTime').IsNull);
  Check(TestModule.sqlTemp.FieldByName('FText').IsNull);
end;

procedure TTestNullSupport.TestSetFieldToNull;
begin
  TestModule.CreateDatabase;

  TestModule.OpenTable('Testing');

  CheckEquals(1, TestModule.tblTemp.FieldByName('FPKey').AsInteger);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FInt').IsNull);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FFloat').IsNull);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FBool').IsNull);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FDate').IsNull);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FDateTime').IsNull);
  CheckEquals(false, TestModule.tblTemp.FieldByName('FText').IsNull);

  TestModule.tblTemp.FieldByName('FInt').Clear;
  TestModule.tblTemp.FieldByName('FFloat').Clear;
  TestModule.tblTemp.FieldByName('FBool').Clear;
  TestModule.tblTemp.FieldByName('FDate').Clear;
  TestModule.tblTemp.FieldByName('FDateTime').Clear;
  TestModule.tblTemp.FieldByName('FText').Clear;

  Check(TestModule.tblTemp.FieldByName('FInt').IsNull);
  Check(TestModule.tblTemp.FieldByName('FFloat').IsNull);
  Check(TestModule.tblTemp.FieldByName('FBool').IsNull);
  Check(TestModule.tblTemp.FieldByName('FDate').IsNull);
  Check(TestModule.tblTemp.FieldByName('FDateTime').IsNull);
  Check(TestModule.tblTemp.FieldByName('FText').IsNull);
end;

procedure TTestNullSupport.TestUpdate;
begin
  TestModule.CreateDatabase;

  TestModule.OpenTable('Testing');
//  CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
  TestModule.tblTemp.Insert;

  TestModule.tblTemp.FieldByName('FInt').AsInteger:= 67890;
  CheckEquals(67890, TestModule.tblTemp.FieldByName('FInt').AsInteger);

  TestModule.tblTemp.FieldByName('FFloat').AsFloat:= 678.9;
  CheckEquals(678.9, TestModule.tblTemp.FieldByName('FFloat').AsFloat, 0.01);

  TestModule.tblTemp.FieldByName('FBool').AsBoolean:= true;
  CheckEquals(True, TestModule.tblTemp.FieldByName('FBool').AsBoolean);
  TestModule.tblTemp.FieldByName('FBool').AsBoolean:= false;
  CheckEquals(false, TestModule.tblTemp.FieldByName('FBool').AsBoolean);

  TestModule.tblTemp.FieldByName('FDate').AsDateTime:= EncodeDate(2006, 4, 10);
  CheckEquals(EncodeDate(2006, 4, 10), TestModule.tblTemp.FieldByName('FDate').AsDateTime);
  // 2006-04-01 23:30:00.000

  TestModule.tblTemp.FieldByName('FDateTime').AsDateTime:= EncodeDateTime(2006, 4, 10, 23, 30, 0, 0);
  CheckEquals(EncodeDateTime(2006, 4, 10, 23, 30, 0, 0), TestModule.tblTemp.FieldByName('FDateTime').AsDateTime);

  TestModule.tblTemp.FieldByName('FText').AsString:= 'ABCDE';
  CheckEquals('ABCDE', TestModule.tblTemp.FieldByName('FText').AsString);

end;

procedure TTestMasterDetail.TestMasterDetail;
begin
  TestModule.CreateDatabase;
end;

procedure TTestMasterDetail.SetUp;
begin
  inherited;
  TestModule:= TmodTest.Create(nil);
end;

procedure TTestMasterDetail.TearDown;
begin
  inherited;
  TestModule.Free;
end;

initialization
  // Register any test cases with the test runner
  RegisterTest(TTestNullSupport.Suite);
  RegisterTest(TTestMasterDetail.Suite);
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?