basic-reference-index.test.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import BasicReferenceIndex from '@/features/ide-react/references/basic-reference-index'
  2. import { expect } from 'chai'
  3. const entry1 = `@article{sample2023,
  4. author = {John Doe},
  5. title = {Sample Title},
  6. journal = {Sample Journal},
  7. year = {2023},
  8. date = {2023-01-01}
  9. }`
  10. const entry2 = `@book{example2022,
  11. author = {Jane Smith},
  12. title = {Example Book},
  13. journal = {Example Journal},
  14. year = {2022}
  15. date = {2022-05-15}
  16. }`
  17. const entry3 = `@inproceedings{test2021,
  18. author = {Alice Johnson},
  19. title = {Test Conference Paper},
  20. booktitle = {Test Conference},
  21. year = {2021},
  22. date = {2021-10-10}
  23. }
  24. `
  25. const fileWithMultipleEntries = `${entry1}\n${entry2}`
  26. const addEntry1 = { path: 'file1.bib', content: entry1 }
  27. const addEntry2 = { path: 'file2.bib', content: entry2 }
  28. const addEntry3 = { path: 'file3.bib', content: entry3 }
  29. const addFileWithMultipleEntries = {
  30. path: 'file5.bib',
  31. content: fileWithMultipleEntries,
  32. }
  33. const deleteEntry2 = 'file2.bib'
  34. describe('BasicReferenceIndex', function () {
  35. beforeEach(function () {
  36. this.index = new BasicReferenceIndex()
  37. })
  38. it('starts with an empty index', function () {
  39. expect(this.index.fileIndex.size).to.equal(0)
  40. expect(this.index.keys.size).to.equal(0)
  41. })
  42. describe('updateIndex', function () {
  43. it('Adds entry to index and keys', function () {
  44. const changes = { updates: [addEntry1], deletes: [] }
  45. const keys = this.index.updateIndex(changes)
  46. expect(this.index.fileIndex.size).to.equal(1)
  47. expect(this.index.fileIndex.get('file1.bib')).to.deep.equal(
  48. new Set(['sample2023'])
  49. )
  50. expect(keys).to.deep.equal(new Set(['sample2023']))
  51. })
  52. it("doesn't forget existing keys when adding new entries", function () {
  53. const changes = { updates: [addEntry1, addEntry2], deletes: [] }
  54. const keys = this.index.updateIndex(changes)
  55. expect(this.index.fileIndex.size).to.equal(2)
  56. expect(keys).to.deep.equal(new Set(['sample2023', 'example2022']))
  57. const additionalChanges = { updates: [addEntry3], deletes: [] }
  58. const updatedKeys = this.index.updateIndex(additionalChanges)
  59. expect(this.index.fileIndex.size).to.equal(3)
  60. expect(updatedKeys).to.deep.equal(
  61. new Set(['sample2023', 'example2022', 'test2021'])
  62. )
  63. })
  64. it('removes keys when files are deleted', function () {
  65. const changes = {
  66. updates: [addEntry1, addEntry2, addEntry3],
  67. deletes: [],
  68. }
  69. this.index.updateIndex(changes)
  70. expect(this.index.fileIndex.size).to.equal(3)
  71. expect(this.index.keys).to.deep.equal(
  72. new Set(['sample2023', 'example2022', 'test2021'])
  73. )
  74. const deletionChanges = { updates: [], deletes: [deleteEntry2] }
  75. const keysAfterDeletion = this.index.updateIndex(deletionChanges)
  76. expect(this.index.fileIndex.size).to.equal(2)
  77. expect(keysAfterDeletion).to.deep.equal(
  78. new Set(['sample2023', 'test2021'])
  79. )
  80. })
  81. it('handles multiple entries in a single file', function () {
  82. const changes = { updates: [addFileWithMultipleEntries], deletes: [] }
  83. const keys = this.index.updateIndex(changes)
  84. expect(this.index.fileIndex.size).to.equal(1)
  85. expect(this.index.fileIndex.get('file5.bib')).to.deep.equal(
  86. new Set(['sample2023', 'example2022'])
  87. )
  88. expect(keys).to.deep.equal(new Set(['sample2023', 'example2022']))
  89. })
  90. })
  91. })