PageRenderTime 44ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/Source Code/UnitTests/Searching and Indexing/SearcherTest.vb

#
Visual Basic | 597 lines | 379 code | 118 blank | 100 comment | 2 complexity | 82005c39491819fb7a5d7de9db04b22c MD5 | raw file
  1. Imports System.Collections.Generic
  2. Imports Microsoft.VisualStudio.TestTools.UnitTesting
  3. Imports PowerSong.FastSearching
  4. ''' <summary>
  5. ''' This is a test class for SearcherTest and is intended
  6. ''' to contain all SearcherTest Unit Tests
  7. ''' </summary>
  8. <TestClass()> _
  9. Public Class SearcherTest
  10. Inherits BaseSearchTester
  11. <ClassCleanup()> _
  12. Public Shared Sub CleanUp()
  13. RemoveTemporaryFiles()
  14. End Sub
  15. ''' <summary>
  16. ''' Verifies that searching for nothing in an empty index returns no documents.
  17. ''' </summary>
  18. <TestMethod()> _
  19. Public Sub SearchEmptyIndexTest1()
  20. Dim Index As New Indexer
  21. Dim Searcher As New Searcher(Index)
  22. Dim Results As List(Of String) = Searcher.Search(String.Empty)
  23. Assert.AreEqual(0, Results.Count, "Some results were returned when they were not expected.")
  24. End Sub
  25. ''' <summary>
  26. ''' Verifies that searching for something in an empty index returns no documents.
  27. ''' </summary>
  28. <TestMethod()> _
  29. Public Sub SearchEmptyIndexTest2()
  30. Dim Index As New Indexer
  31. Dim Searcher As New Searcher(Index)
  32. Dim Results As List(Of String) = Searcher.Search("First")
  33. Assert.AreEqual(0, Results.Count, "Some results were returned when they were not expected.")
  34. Results = Searcher.Search("TWO WORDS")
  35. Assert.AreEqual(0, Results.Count, "Some results were returned when they were not expected.")
  36. Results = Searcher.Search("!!!")
  37. Assert.AreEqual(0, Results.Count, "Some results were returned when they were not expected.")
  38. End Sub
  39. ''' <summary>
  40. ''' Verifies that searching for nothing in a populated index returns no documents.
  41. ''' </summary>
  42. <TestMethod()> _
  43. Public Sub SearchPopulatedIndexTest()
  44. Dim Index As Indexer = CreateBasicIndex()
  45. Dim Searcher As New Searcher(Index)
  46. Dim Results As List(Of String) = Searcher.Search(String.Empty)
  47. Assert.AreEqual(0, Results.Count, "Some results were returned when they were not expected.")
  48. End Sub
  49. ''' <summary>
  50. ''' Verifies that searching for a word existing in the sole document in an index
  51. ''' returns that document.
  52. ''' </summary>
  53. <TestMethod()> _
  54. Public Sub SearchForSoleFileTest()
  55. Dim Index As New Indexer
  56. Index.AddFileContentsToIndex("SOLE_FILE", "This is the sole file in the index.")
  57. Dim Searcher As New Searcher(Index)
  58. For Each Terms As String In New String() {"sole", "SOLE", "index.", "the sole file", "this is the sole file in the index"}
  59. Dim Results As List(Of String) = Searcher.Search(Terms)
  60. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned when searching for '" + Terms + "'.")
  61. Assert.AreEqual("SOLE_FILE", Results(0), "The file was not returned.")
  62. Next
  63. End Sub
  64. ''' <summary>
  65. ''' Ensures that searching a moderately sized index works, for one word existing in
  66. ''' a single document.
  67. ''' </summary>
  68. <TestMethod()> _
  69. Public Sub SearchForAFileTest()
  70. Dim Index As Indexer = CreateModerateIndex()
  71. Dim Searcher As New Searcher(Index)
  72. For Each Terms As String In New String() {"FIRST", "SECOND", "THIRD", "FOURTH", "FIFTH", "SIXTH", "SEVENTH", "ONE"}
  73. Dim Results As List(Of String) = Searcher.Search(Terms)
  74. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned when searching for '" + Terms + "'.")
  75. Next
  76. Assert.AreEqual("A", Searcher.Search("FIRST")(0), "The file was not returned.")
  77. Assert.AreEqual("B", Searcher.Search("SECOND")(0), "The file was not returned.")
  78. Assert.AreEqual("C", Searcher.Search("THIRD")(0), "The file was not returned.")
  79. Assert.AreEqual("D", Searcher.Search("FOURTH")(0), "The file was not returned.")
  80. Assert.AreEqual("E", Searcher.Search("FIFTH")(0), "The file was not returned.")
  81. Assert.AreEqual("F", Searcher.Search("SIXTH")(0), "The file was not returned.")
  82. Assert.AreEqual("G", Searcher.Search("SEVENTH")(0), "The file was not returned.")
  83. Assert.AreEqual("D", Searcher.Search("ONE")(0), "The file was not returned.")
  84. End Sub
  85. ''' <summary>
  86. ''' Ensures that searching a moderately sized index works, for one word existing in
  87. ''' multiple documents.
  88. ''' </summary>
  89. <TestMethod()> _
  90. Public Sub SearchForMultipleFilesTest()
  91. Dim Index As Indexer = CreateModerateIndex()
  92. Dim Searcher As New Searcher(Index)
  93. Dim Results As List(Of String) = Searcher.Search("ONE")
  94. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  95. Assert.AreEqual("D", Results(0), "An unexpected file was returned.")
  96. Results = Searcher.Search("two")
  97. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  98. Assert.IsTrue(Results.Contains("A"), "An unexpected file was returned.")
  99. Assert.IsTrue(Results.Contains("D"), Results(0), "An unexpected file was returned.")
  100. Results = Searcher.Search(" three")
  101. Assert.AreEqual(3, Results.Count, "Incorrect number of documents returned.")
  102. Assert.IsTrue(Results.Contains("A"), "An unexpected file was returned.")
  103. Assert.IsTrue(Results.Contains("D"), "An unexpected file was returned.")
  104. Assert.IsTrue(Results.Contains("G"), "An unexpected file was returned.")
  105. Results = Searcher.Search(" four ")
  106. Assert.AreEqual(4, Results.Count, "Incorrect number of documents returned.")
  107. Assert.IsTrue(Results.Contains("C"), "An unexpected file was returned.")
  108. Assert.IsTrue(Results.Contains("D"), "An unexpected file was returned.")
  109. Assert.IsTrue(Results.Contains("E"), "An unexpected file was returned.")
  110. Assert.IsTrue(Results.Contains("F"), "An unexpected file was returned.")
  111. Results = Searcher.Search("five")
  112. Assert.AreEqual(5, Results.Count, "Incorrect number of documents returned.")
  113. Assert.IsTrue(Results.Contains("C"), "An unexpected file was returned.")
  114. Assert.IsTrue(Results.Contains("D"), "An unexpected file was returned.")
  115. Assert.IsTrue(Results.Contains("E"), "An unexpected file was returned.")
  116. Assert.IsTrue(Results.Contains("F"), "An unexpected file was returned.")
  117. Assert.IsTrue(Results.Contains("G"), "An unexpected file was returned.")
  118. Results = Searcher.Search("SIX")
  119. Assert.AreEqual(6, Results.Count, "Incorrect number of documents returned.")
  120. Assert.IsTrue(Results.Contains("B"), "An unexpected file was returned.")
  121. Assert.IsTrue(Results.Contains("C"), "An unexpected file was returned.")
  122. Assert.IsTrue(Results.Contains("D"), "An unexpected file was returned.")
  123. Assert.IsTrue(Results.Contains("E"), "An unexpected file was returned.")
  124. Assert.IsTrue(Results.Contains("F"), "An unexpected file was returned.")
  125. Assert.IsTrue(Results.Contains("G"), "An unexpected file was returned.")
  126. Results = Searcher.Search("all")
  127. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  128. Assert.IsTrue(Results.Contains("A"), "An unexpected file was returned.")
  129. Assert.IsTrue(Results.Contains("B"), "An unexpected file was returned.")
  130. Assert.IsTrue(Results.Contains("C"), "An unexpected file was returned.")
  131. Assert.IsTrue(Results.Contains("D"), "An unexpected file was returned.")
  132. Assert.IsTrue(Results.Contains("E"), "An unexpected file was returned.")
  133. Assert.IsTrue(Results.Contains("F"), "An unexpected file was returned.")
  134. Assert.IsTrue(Results.Contains("G"), "An unexpected file was returned.")
  135. End Sub
  136. ''' <summary>
  137. ''' Ensures that searching a moderately sized index works, for multiple words existing
  138. ''' in a single document.
  139. ''' </summary>
  140. <TestMethod()> _
  141. Public Sub SearchMultipleWordsSingleDocumentTest()
  142. Dim Index As Indexer = CreateModerateIndex()
  143. Dim Searcher As New Searcher(Index)
  144. Dim Results As List(Of String) = Searcher.Search("ONE")
  145. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  146. Assert.AreEqual("D", Results(0), "An unexpected file was returned.")
  147. Results = Searcher.Search("ONE ONE ONE ONE")
  148. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  149. Assert.AreEqual("D", Results(0), "An unexpected file was returned.")
  150. Results = Searcher.Search("ONE fourth")
  151. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  152. Assert.AreEqual("D", Results(0), "An unexpected file was returned.")
  153. End Sub
  154. ''' <summary>
  155. ''' Ensures that searching a moderately sized index works, for multiple words existing
  156. ''' in multiple documents. (This involves various scenarios and is the most complex test)
  157. ''' </summary>
  158. <TestMethod()> _
  159. Public Sub SearchMultipleWordsMultipleDocumentsTest()
  160. Dim Index As Indexer = CreateModerateIndex()
  161. Dim Searcher As New Searcher(Index)
  162. Dim Results As List(Of String) = Searcher.Search("ONE two")
  163. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  164. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  165. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  166. Results = Searcher.Search("three two")
  167. Assert.AreEqual(3, Results.Count, "Incorrect number of documents returned.")
  168. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  169. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  170. Assert.IsTrue(Results.Contains("G"), "An expected file was not returned.")
  171. Results = Searcher.Search("first second")
  172. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  173. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  174. Assert.IsTrue(Results.Contains("B"), "An expected file was not returned.")
  175. Results = Searcher.Search("third seventh")
  176. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  177. Assert.IsTrue(Results.Contains("C"), "An expected file was not returned.")
  178. Assert.IsTrue(Results.Contains("G"), "An expected file was not returned.")
  179. Results = Searcher.Search("second two")
  180. Assert.AreEqual(3, Results.Count, "Incorrect number of documents returned.")
  181. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  182. Assert.IsTrue(Results.Contains("B"), "An expected file was not returned.")
  183. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  184. Results = Searcher.Search("all one two three")
  185. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  186. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  187. Assert.IsTrue(Results.Contains("B"), "An expected file was not returned.")
  188. Assert.IsTrue(Results.Contains("C"), "An expected file was not returned.")
  189. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  190. Assert.IsTrue(Results.Contains("E"), "An expected file was not returned.")
  191. Assert.IsTrue(Results.Contains("F"), "An expected file was not returned.")
  192. Assert.IsTrue(Results.Contains("G"), "An expected file was not returned.")
  193. Results = Searcher.Search("this is the first file")
  194. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  195. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  196. Assert.IsTrue(Results.Contains("B"), "An expected file was not returned.")
  197. Assert.IsTrue(Results.Contains("C"), "An expected file was not returned.")
  198. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  199. Assert.IsTrue(Results.Contains("E"), "An expected file was not returned.")
  200. Assert.IsTrue(Results.Contains("F"), "An expected file was not returned.")
  201. Assert.IsTrue(Results.Contains("G"), "An expected file was not returned.")
  202. End Sub
  203. ''' <summary>
  204. ''' Ensures that searching a moderately sized index works, for multiple words
  205. ''' existing in all documents.
  206. ''' </summary>
  207. <TestMethod()> _
  208. Public Sub SearchMultipleWordsAllDocumentsTest()
  209. Dim Index As Indexer = CreateModerateIndex()
  210. Dim Searcher As New Searcher(Index)
  211. Dim Results As List(Of String) = Searcher.Search("this all two three second")
  212. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  213. Assert.IsTrue(Results.Contains("A"), "An expected file was not returned.")
  214. Assert.IsTrue(Results.Contains("B"), "An expected file was not returned.")
  215. Assert.IsTrue(Results.Contains("C"), "An expected file was not returned.")
  216. Assert.IsTrue(Results.Contains("D"), "An expected file was not returned.")
  217. Assert.IsTrue(Results.Contains("E"), "An expected file was not returned.")
  218. Assert.IsTrue(Results.Contains("F"), "An expected file was not returned.")
  219. Assert.IsTrue(Results.Contains("G"), "An expected file was not returned.")
  220. End Sub
  221. ''' <summary>
  222. ''' Ensures that searching a moderately sized index works, for all words not
  223. ''' existing in any documents.
  224. ''' </summary>
  225. <TestMethod()> _
  226. Public Sub SearchWordsNotInAnyDocumentsTest()
  227. Dim Index As Indexer = CreateModerateIndex()
  228. Dim Searcher As New Searcher(Index)
  229. Dim Results As List(Of String) = Searcher.Search("hooligans manchester welsh english")
  230. Assert.AreEqual(0, Results.Count, "Incorrect number of documents returned.")
  231. End Sub
  232. ''' <summary>
  233. ''' Check that the correct order of documents is returned when searching a moderately sized index.
  234. ''' </summary>
  235. <TestMethod()> _
  236. Public Sub ConfirmDocumentOrderTest()
  237. Dim Index As Indexer = CreateModerateIndex()
  238. Dim Searcher As New Searcher(Index)
  239. Dim Results As List(Of String) = Searcher.Search("ONE")
  240. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  241. Assert.AreEqual("D", Results(0), "Incorrect document or document order.")
  242. Results = Searcher.Search("TWO")
  243. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  244. Assert.AreEqual("D", Results(0), "Incorrect document or document order.")
  245. Assert.AreEqual("A", Results(1), "Incorrect document or document order.")
  246. Results = Searcher.Search("TWO ONE")
  247. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  248. Assert.AreEqual("D", Results(0), "Incorrect document or document order.")
  249. Assert.AreEqual("A", Results(1), "Incorrect document or document order.")
  250. Results = Searcher.Search("TWO forceTop")
  251. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  252. Assert.AreEqual("A", Results(0), "Incorrect document or document order.")
  253. Assert.AreEqual("D", Results(1), "Incorrect document or document order.")
  254. Results = Searcher.Search("ALL SIX FIVE FOUR THREE TWO ONE")
  255. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  256. Assert.AreEqual("D", Results(0), "Incorrect document or document order.")
  257. Assert.AreEqual("A", Results(1), "Incorrect document or document order.")
  258. Assert.AreEqual("G", Results(2), "Incorrect document or document order.")
  259. Assert.AreEqual("F", Results(3), "Incorrect document or document order.")
  260. Assert.AreEqual("E", Results(4), "Incorrect document or document order.")
  261. Assert.AreEqual("C", Results(5), "Incorrect document or document order.")
  262. Assert.AreEqual("B", Results(6), "Incorrect document or document order.")
  263. End Sub
  264. ''' <summary>
  265. ''' Confirm searching works as expected after clearing the index.
  266. ''' </summary>
  267. <TestMethod()> _
  268. Public Sub SearchClearedIndexTest()
  269. Dim Index As Indexer = CreateModerateIndex()
  270. Dim Searcher As New Searcher(Index)
  271. Dim Results As List(Of String) = Searcher.Search("ALL")
  272. Assert.AreEqual(7, Results.Count, "Incorrect number of documents returned.")
  273. Index.Clear()
  274. Assert.AreEqual(0, Searcher.Search("ALL").Count, "Documents were returned.")
  275. End Sub
  276. ''' <summary>
  277. ''' Confirm searching works as expected after adding documents.
  278. ''' </summary>
  279. <TestMethod()> _
  280. Public Sub SearchAfterAddingDocumentsTest()
  281. ' Create a searcher
  282. Dim Index As Indexer = CreateModerateIndex()
  283. Dim Searcher As New Searcher(Index)
  284. ' Perform a simple search
  285. Dim Results As List(Of String) = Searcher.Search("TWO EIGHT")
  286. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  287. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  288. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  289. ' Add a document with unique word "EIGHT"
  290. Index.AddFileContentsToIndex("NEW1", "additional file EIGHT")
  291. ' Confirm the new document can be returned by itself
  292. Results = Searcher.Search("EIGHT")
  293. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  294. Assert.IsTrue(Results.Contains("NEW1"), "Expected document was not returned.")
  295. ' Confirm the new document can be returned along with other documents
  296. Results = Searcher.Search("TWO EIGHT")
  297. Assert.AreEqual(3, Results.Count, "Incorrect number of documents returned.")
  298. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  299. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  300. Assert.IsTrue(Results.Contains("NEW1"), "Expected document was not returned.")
  301. ' Confirm all documents can be returned, including the new one
  302. Results = Searcher.Search("ALL EIGHT")
  303. Assert.AreEqual(8, Results.Count, "Incorrect number of documents returned.")
  304. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  305. Assert.IsTrue(Results.Contains("B"), "Expected document was not returned.")
  306. Assert.IsTrue(Results.Contains("C"), "Expected document was not returned.")
  307. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  308. Assert.IsTrue(Results.Contains("E"), "Expected document was not returned.")
  309. Assert.IsTrue(Results.Contains("F"), "Expected document was not returned.")
  310. Assert.IsTrue(Results.Contains("G"), "Expected document was not returned.")
  311. Assert.IsTrue(Results.Contains("NEW1"), "Expected document was not returned.")
  312. ' Confirm only old documents can be returned
  313. Results = Searcher.Search("TWO")
  314. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  315. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  316. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  317. ' Add another file, this time with a word that already exists in other documents
  318. Index.AddFileContentsToIndex("NEW2", "YET MORE: TWO")
  319. ' Confirm that searching for a word in old and new documents returns the correct results
  320. Results = Searcher.Search("TWO")
  321. Assert.AreEqual(3, Results.Count, "Incorrect number of documents returned.")
  322. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  323. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  324. Assert.IsTrue(Results.Contains("NEW2"), "Expected document was not returned.")
  325. ' Confirm that all documents can be returned
  326. Results = Searcher.Search("ALL EIGHT TWO")
  327. Assert.AreEqual(9, Results.Count, "Incorrect number of documents returned.")
  328. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  329. Assert.IsTrue(Results.Contains("B"), "Expected document was not returned.")
  330. Assert.IsTrue(Results.Contains("C"), "Expected document was not returned.")
  331. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  332. Assert.IsTrue(Results.Contains("E"), "Expected document was not returned.")
  333. Assert.IsTrue(Results.Contains("F"), "Expected document was not returned.")
  334. Assert.IsTrue(Results.Contains("G"), "Expected document was not returned.")
  335. Assert.IsTrue(Results.Contains("NEW1"), "Expected document was not returned.")
  336. Assert.IsTrue(Results.Contains("NEW2"), "Expected document was not returned.")
  337. End Sub
  338. ''' <summary>
  339. ''' A simple test for proving no documents get returned when an index is emptied by
  340. ''' removing existing document(s).
  341. ''' </summary>
  342. <TestMethod()> _
  343. Public Sub SearchEmptiedIndexTest()
  344. ' Create an index with one document
  345. Dim Index As New Indexer
  346. Index.AddFileContentsToIndex("A", "File contents go here.")
  347. ' Search for the document
  348. Dim Searcher As New Searcher(Index)
  349. Dim Results As List(Of String) = Searcher.Search("contents")
  350. Assert.AreEqual(1, Results.Count, "No documents returned when one was expected.")
  351. Assert.AreEqual("A", Results(0), "Incorrect document returned.")
  352. ' Remove the document
  353. Index.RemoveDocumentFromIndex("A")
  354. ' The same search should no longer work
  355. Results = Searcher.Search("contents")
  356. Assert.AreEqual(0, Results.Count, "One or more documents were returned.")
  357. End Sub
  358. ''' <summary>
  359. ''' The simpler version of SearchAterRemovingDocumentsTest2.
  360. ''' </summary>
  361. <TestMethod()> _
  362. Public Sub SearchAterRemovingDocumentsTest1()
  363. ' Create an index with one document
  364. Dim Index As New Indexer
  365. Index.AddFileContentsToIndex("A", "File contents go here.")
  366. Index.AddFileContentsToIndex("B", "File contents go here.")
  367. ' Search for the document
  368. Dim Searcher As New Searcher(Index)
  369. Dim Results As List(Of String) = Searcher.Search("contents")
  370. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  371. Assert.IsTrue(Results.Contains("A"), "Document not returned as expected.")
  372. Assert.IsTrue(Results.Contains("B"), "Document not returned as expected.")
  373. ' Remove a document, and prove only one gets returned now
  374. Index.RemoveDocumentFromIndex("B")
  375. Results = Searcher.Search("contents")
  376. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  377. Assert.IsTrue(Results.Contains("A"), "Document not returned as expected.")
  378. ' Remove a document, and prove only one gets returned now
  379. Index.RemoveDocumentFromIndex("A")
  380. Results = Searcher.Search("contents")
  381. Assert.AreEqual(0, Results.Count, "One or more documents were returned.")
  382. End Sub
  383. ''' <summary>
  384. ''' Confirm searching works as expected after removing documents.
  385. ''' </summary>
  386. <TestMethod()> _
  387. Public Sub SearchAterRemovingDocumentsTest2()
  388. ' Create a searcher
  389. Dim Index As Indexer = CreateModerateIndex()
  390. Dim Searcher As New Searcher(Index)
  391. ' Perform a simple search
  392. Dim Results As List(Of String) = Searcher.Search("TWO")
  393. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  394. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  395. Assert.IsTrue(Results.Contains("D"), "Expected document was not returned.")
  396. ' Remove a document
  397. Index.RemoveDocumentFromIndex("D")
  398. ' Confirm the same search returns only one document
  399. Results = Searcher.Search("TWO")
  400. Assert.AreEqual(1, Results.Count, "Incorrect number of documents returned.")
  401. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  402. ' Confirm searching for all documents returns everything except the removed document
  403. Results = Searcher.Search("ALL")
  404. Assert.AreEqual(6, Results.Count, "Incorrect number of documents returned.")
  405. Assert.IsTrue(Results.Contains("A"), "Expected document was not returned.")
  406. Assert.IsTrue(Results.Contains("B"), "Expected document was not returned.")
  407. Assert.IsTrue(Results.Contains("C"), "Expected document was not returned.")
  408. Assert.IsTrue(Results.Contains("E"), "Expected document was not returned.")
  409. Assert.IsTrue(Results.Contains("F"), "Expected document was not returned.")
  410. Assert.IsTrue(Results.Contains("G"), "Expected document was not returned.")
  411. ' Remove some more documents
  412. Index.RemoveDocumentFromIndex("G")
  413. Index.RemoveDocumentFromIndex("A")
  414. ' Confirm previously valid terms no longer return documents
  415. Results = Searcher.Search("TWO")
  416. Assert.AreEqual(0, Results.Count, "Incorrect number of documents returned.")
  417. ' Get all remaining documents
  418. Results = Searcher.Search("ALL documents including ONE TWO THREE FOUR FIVE SIX")
  419. Assert.AreEqual(4, Results.Count, "Incorrect number of documents returned.")
  420. Assert.IsTrue(Results.Contains("B"), "Expected document was not returned.")
  421. Assert.IsTrue(Results.Contains("C"), "Expected document was not returned.")
  422. Assert.IsTrue(Results.Contains("E"), "Expected document was not returned.")
  423. Assert.IsTrue(Results.Contains("F"), "Expected document was not returned.")
  424. End Sub
  425. ''' <summary>
  426. ''' Confirm searching works as expected after both adding and removing documents.
  427. ''' </summary>
  428. <TestMethod()> _
  429. Public Sub SearchAterAddingAndRemovingDocumentsTest()
  430. ' Create an index
  431. Dim Index As Indexer = CreateModerateIndex()
  432. ' Remove two documents
  433. Index.RemoveDocumentFromIndex("B")
  434. Index.RemoveDocumentFromIndex("D")
  435. ' Add a document
  436. Index.AddFileContentsToIndex("X", "XXX YYY ZZZ ALL")
  437. ' Save and load the index again
  438. Dim FileName As String = GetTemporaryFileName()
  439. Index.Save(FileName)
  440. Index = Indexer.LoadIndex(FileName)
  441. ' Perform some quick checks
  442. Assert.AreEqual(6, Index.DocumentCount, "Incorrect number of documents indexed.")
  443. Assert.AreEqual("A", Index.DocumentName(0), "Document not indexed properly.")
  444. Assert.AreEqual("C", Index.DocumentName(2), "Document not indexed properly.")
  445. Assert.AreEqual("E", Index.DocumentName(4), "Document not indexed properly.")
  446. Assert.AreEqual("F", Index.DocumentName(5), "Document not indexed properly.")
  447. Assert.AreEqual("G", Index.DocumentName(6), "Document not indexed properly.")
  448. Assert.AreEqual("X", Index.DocumentName(7), "Document not indexed properly.")
  449. ' Perform some searches
  450. Dim Searcher As New Searcher(Index)
  451. Assert.AreEqual("X", Searcher.Search("XXX")(0))
  452. Assert.AreEqual("X", Searcher.Search("YYY")(0))
  453. Assert.AreEqual("X", Searcher.Search("ZZZ")(0))
  454. Assert.AreEqual("X", Searcher.Search("XXX YYY ZZZ")(0))
  455. Assert.AreEqual("X", Searcher.Search("ZZZ")(0))
  456. ' Get all documents and check that they are all returned
  457. Dim Results As List(Of String) = Searcher.Search("ALL")
  458. Assert.AreEqual(6, Results.Count, "Incorrect number of documents returned.")
  459. Assert.IsTrue(Results.Contains("A"), "Result does not contain expected document.")
  460. Assert.IsTrue(Results.Contains("C"), "Result does not contain expected document.")
  461. Assert.IsTrue(Results.Contains("E"), "Result does not contain expected document.")
  462. Assert.IsTrue(Results.Contains("F"), "Result does not contain expected document.")
  463. Assert.IsTrue(Results.Contains("G"), "Result does not contain expected document.")
  464. Assert.IsTrue(Results.Contains("X"), "Result does not contain expected document.")
  465. ' Also, confirm that it is possible to not get the document
  466. Results = Searcher.Search("THREE")
  467. Assert.AreEqual(2, Results.Count, "Incorrect number of documents returned.")
  468. Assert.IsTrue(Results.Contains("A"), "Result does not contain expected document.")
  469. Assert.IsTrue(Results.Contains("G"), "Result does not contain expected document.")
  470. End Sub
  471. ''' <summary>
  472. ''' A test for Searcher Constructor.
  473. ''' </summary>
  474. <TestMethod()> _
  475. Public Sub SearcherConstructorTest()
  476. Dim Index As New Indexer
  477. Dim Search As Searcher = New Searcher(Index)
  478. End Sub
  479. End Class