@@ -167,6 +167,60 @@ BEGIN NAMESPACE XSharp.VFP.Tests
167167 END TRY
168168 END TRY
169169 END METHOD
170+
171+ [Fact];
172+ METHOD TestIndexSeek () AS VOID
173+ VAR cOldDir := System.IO.Directory.GetCurrentDirectory ()
174+ VAR oDir := System.IO.Directory.CreateDirectory (Path .Combine (Path .GetTempPath (), ;
175+ "IndexSeekTest_" + Guid.NewGuid ():ToString ("N" )))
176+ VAR cTempPath := oDir :FullName
177+ TRY
178+ SET DEFAULT TO (cTempPath )
179+ CREATE TABLE SeekTest (Id INT, Name C (10 ))
180+ INSERT INTO SeekTest VALUES (1 , "Alpha" )
181+ INSERT INTO SeekTest VALUES (2 , "Beta" )
182+ INSERT INTO SeekTest VALUES (3 , "Gamma" )
183+ INDEX ON Name TAG NameIdx
184+ // Found -> pointer must not move.
185+ GO TOP
186+ VAR nRec := RecNo ()
187+ Assert.True (IndexSeek ("Beta" ))
188+ Assert.Equal ((INT)nRec , (INT) RecNo ())
189+
190+ // Not found -> pointer must not move
191+ nRec := RecNo ()
192+ Assert.False (IndexSeek ("Zeta" ))
193+ Assert.Equal ((INT)nRec , (INT) RecNo ())
194+
195+ // Found -> pointer must move
196+ GO TOP
197+ Assert.True (IndexSeek ("Beta" , .T. ))
198+ Assert.Equal ("Beta" , ALLTRIM (SeekTest.Name))
199+
200+ // Not found with lMovePointer = .T.
201+ Assert.False (IndexSeek ("Zeta" , .T. ))
202+
203+ // With alias string -> pointer must not move
204+ GO TOP
205+ nRec := RecNo ()
206+ Assert.True (IndexSeek ("Gamma" , .F. , "SeekTest" ))
207+ Assert.Equal ((INT)nRec , (INT) RecNo ())
208+
209+ // With workarea number -> pointer must not move
210+ GO TOP
211+ nRec := RecNo ()
212+ Assert.True (IndexSeek ("Alpha" , .F. , Select ()))
213+ Assert.Equal ((INT)nRec , (INT) RecNo ())
214+
215+ // Non-existent area -> must return false
216+ Assert.False (IndexSeek ("Alpha" , .F. , "NonExistent" ))
217+ FINALLY
218+ XSharp.CoreDb.CloseAll ()
219+ SET DEFAULT TO (cOldDir )
220+ System.IO.Directory.SetCurrentDirectory (cOldDir )
221+ TRY ; System.IO.Directory.Delete (cTempPath , TRUE ) ; CATCH ; END TRY
222+ END TRY
223+ END METHOD
170224 END CLASS
171225
172226END NAMESPACE
0 commit comments