unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; CheckBox1: TCheckBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses RequireEnsureUnit; {$R *.dfm} procedure VariantCheck(A, B: Variant); begin if not(A = B) then begin Assert(False, Format('not equal'#13#10+ 'A=%s'#13#10+ 'B=%s', [String(A), String(B)]) ); end; end; procedure Check(A, B: String); overload; begin VariantCheck(A, B); end; procedure Check(A, B: Integer); overload; begin VariantCheck(A, B); end; procedure TForm1.Button1Click(Sender: TObject); begin SetOld('Button1.Caption', Button1.Caption); SetOld('Self.Left', Self.Left); require([ Self.Caption = 'Form1', // Button1.Caption = 'Button1', true]); Button1.Caption := 'Button2'; ensure([ GetOld('Button1.Caption') = 'Button1', Button1.Caption = 'Button2', Self.Left = GetOld('Self.Left'), true]); end; procedure TForm1.Button2Click(Sender: TObject); begin SetOld('Button1.Caption', Button1.Caption); SetOld('Self.Left', Self.Left); require([ Self.Caption <> 'Form1', // Button1.Caption = 'Button1', false]); Button1.Caption := 'Button1'; ensure([ GetOld('Button1.Caption') <> 'Button2', Button1.Caption <> 'Button1', Self.Left <> GetOld('Self.Left'), false]); end; procedure TForm1.Button3Click(Sender: TObject); begin SetOld('Button1.Caption', Button1.Caption); SetOld('Self.Left', Self.Left); //メッセージが一方の要素にだけついている場合のテスト require([ Self.Caption = 'Form1', Button1.Caption = 'Button1', 'Button1Caption', true]); Button1.Caption := 'Button2'; ensure([ GetOld('Button1.Caption') = 'Button1', 'Form1Caption', Button1.Caption = 'Button2', 'Button1Caption', Self.Left = GetOld('Self.Left'), CheckBox1.Checked, true]); end; procedure TForm1.Button4Click(Sender: TObject); begin //要素0、これはnot OK require([ ]); //要素1、これもOK require([ true]); require([ false]); //要素が一つしかなくてBooleanでもない場合のテスト require([ 'True']); //これは例外になる end; procedure TForm1.Button5Click(Sender: TObject); begin //要素が一つしかなくてBooleanでもない場合のテスト require([ 1]); //これは例外になる end; procedure TForm1.Button6Click(Sender: TObject); begin require([ CheckBox1.Checked, true]); end; procedure TForm1.Button7Click(Sender: TObject); begin require([ CheckBox1.Checked, 'チェックボックス1に問題があります', true]); end; end.