procedure TfDtpTests.TestDegistir; begin assert(fDtp.Degistir('') = ''); end;
Test projemizi çalıştırdığımızda, yeşil çubuğumuz da kendini gösterecek hemen.
Peki, fonksiyonumuza boş karakter yerine bir dizgi (string) yollarsak ne olacak?
procedure TfDtpTests.TestDegistir; begin assert(fDtp.Degistir('a') = 'a'); end;Test projemizi tekrar çalıştıralım. Bu kez çubuğun rengi ne? Kırmızı.
function TfDtp.Degistir(s:string):string; begin Result := s; end;Bu durumda ister boş, ister dolu bir dizgi göndersek te aynı dizgi geri döneceği için rengimiz de yeşile dönecek demektir.
procedure TfDtpTests.TestDegistir; begin assert(fDtp.Degistir('') = ''); assert(fDtp.Degistir('a') = 'a'); assert(fDtp.Degistir('Test') = 'Test'); assert(fDtp.Degistir('işgüzarlık') = 'işgüzarlık'); assert(fDtp.Degistir('dağıtım') = 'dağıtım'); end;İlk dört test, doğru sonuç üretecektir. Ancak son test, henüz değişim işlemleri uygulanmadığı için üreteceği sonuç, yanlıştır.
///turkcele.txt dosyasındaki bilgiler kullanılacak procedure TfDtp.Oku; var F:TextFile; S:string; i:integer; begin say:=0; if FileExists('TURKCELE.TXT') then begin i:=0; imax:=50; SetLength(kod,imax); SetLength(kar,imax); AssignFile(F,'TURKCELE.TXT'); Reset(F); while True do begin ReadLn(F,S); if Length(S)>2 then begin if (Copy(S,1,2)=' :') then S:=TrimRight(S) else S:=Trim(S); end; if (S='') then break; if Length(S)>2 then begin if Copy(S,2,1)=':' then begin kar[i]:=Copy(S,1,1); kod[i]:=Trim(Copy(S,3,Length(S)-2)); i:=i+1; if i>=imax then///Dosya satir sayisi dizi boyutunu asarsa begin imax:=imax+10;///dizinin yeni boyutunu belirle SetLength(kod,imax); SetLength(kar,imax); end; end; end; end; CloseFile(F); say:=i;//toplam donusum sayı ///Sirala; end else begin ShowMessage('TURKCELE.TXT DOSYASI BULUNAMADI'); end; Okundu:=True; end;Sonra da Degistir fonksiyonumuzu yeniden düzenleyelim.
function TfDtp.Degistir(s: string): string; var j:integer; s1:string; begin ///Turkcele.txt'in okunmasini garantile if not Okundu then Oku; Result:=s; for j:=0 to say-1 do begin Result:=StringReplace(Result,kod[j],kar[j],[rfReplaceAll]); end; end;uDtpTests.pas dosyasında herhangi bir değişiklik yapmaya gerek yok.
var fDtp: TfDtp; ///Aşağıdaki değişkenlere diğer birim dosyalardan da ///sorunsuz erişilebilir. imax,say:integer; Okundu:boolean; kod: array of string; kar: array of string; implementation {$R *.dfm}Diğer yöntemde ise, değişkenlerimizi TfDtp class public alanında tanımlar, ayrıca test fonksiyonları çalışmadan önce fDtp formunun yaratılmasını da bir fonksiyon aracılığıyla garanti altına alırız.
type TfDtp = class(TForm) Memo1: TMemo; Memo2: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private procedure Oku; { Private declarations } public { Public declarations } kod: array of string; kar: array of string; imax,say:integer; Okundu:boolean; function Degistir(s: string): string; end;uDtpTests.pas biriminde kullanacağımız yeni fonksiyon da şu şekildedir:
///fDtp public değişkenlerini kullanabilmek için ///fDtp'nin önceden tanımlanmış olması gerekiyor function getfDtp:TfDtp; begin if Assigned(fDtp) then begin Result := fDtp; end else begin fDtp := TfDtp.Create(Application); Result := fDtp; end; end;Doğru olan, ikinci yöntemdir. Biz de bunu kullanacağız.
procedure TfDtp.Button1Click(Sender: TObject); var j:integer; s:string; begin Memo2.Lines.Clear; for j:=0 to Memo1.Lines.Count do begin s:=Degistir(Memo1.Lines.Strings[j]); Memo2.Lines.Append(s); end; end;Geldiğimiz son durumda, Memo1'e kopyaladığımız bozuk metin, butona bastığımızda düzeltilmiş olarak Memo2'ye kopyalanıyor.