@itwin/core-backend 5.10.0-dev.16 → 5.10.0-dev.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/lib/cjs/ChangesetReader.d.ts +84 -1
  2. package/lib/cjs/ChangesetReader.d.ts.map +1 -1
  3. package/lib/cjs/ChangesetReader.js +108 -12
  4. package/lib/cjs/ChangesetReader.js.map +1 -1
  5. package/lib/cjs/TxnManager.d.ts.map +1 -1
  6. package/lib/cjs/TxnManager.js +7 -0
  7. package/lib/cjs/TxnManager.js.map +1 -1
  8. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  9. package/lib/cjs/internal/ElementLRUCache.js +23 -4
  10. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  11. package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  12. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +54 -9
  13. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  14. package/lib/cjs/workspace/SettingsSchemas.d.ts +15 -1
  15. package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
  16. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  17. package/lib/esm/ChangesetReader.d.ts +84 -1
  18. package/lib/esm/ChangesetReader.d.ts.map +1 -1
  19. package/lib/esm/ChangesetReader.js +108 -12
  20. package/lib/esm/ChangesetReader.js.map +1 -1
  21. package/lib/esm/TxnManager.d.ts.map +1 -1
  22. package/lib/esm/TxnManager.js +7 -0
  23. package/lib/esm/TxnManager.js.map +1 -1
  24. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  25. package/lib/esm/internal/ElementLRUCache.js +23 -4
  26. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  27. package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
  28. package/lib/esm/internal/workspace/SettingsSchemasImpl.js +54 -9
  29. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  30. package/lib/esm/test/ElementLRUCache.test.js +60 -0
  31. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  32. package/lib/esm/test/imodel/IModel.test.js +29 -0
  33. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  34. package/lib/esm/test/standalone/ChangesetReader.test.js +945 -337
  35. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  36. package/lib/esm/test/standalone/SettingsSchemas.test.js +382 -0
  37. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  38. package/lib/esm/workspace/SettingsSchemas.d.ts +15 -1
  39. package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
  40. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  41. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\r\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\r\nimport { IModelJsNative } from \"../core-backend\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\n\r\ndescribe('ElementLruCache', () => {\r\n const testElem1: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\"\r\n },\r\n }\r\n\r\n const testElem2: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId2\",\r\n model: \"testModel2\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\",\r\n value: \"testValue2\"\r\n },\r\n classFullName: \"testName2\"\r\n },\r\n }\r\n\r\n const testElem3: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId3\",\r\n model: \"testModel3\",\r\n code: {\r\n spec: \"testSpec3\",\r\n scope: \"testScope3\"\r\n },\r\n classFullName: \"testName3\"\r\n },\r\n }\r\n\r\n const testElemFedGuid: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testIdFed\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\",\r\n federationGuid: \"testFedGuid\"\r\n },\r\n }\r\n\r\n const testElemCode: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId5\",\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2:testValue2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n const testElemNoId: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: undefined,\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n it('should store and retrieve a valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n });\r\n\r\n it('should overwrite existing valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n const testElemModel = testElem1;\r\n cache.set(testElemModel);\r\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemModel);\r\n\r\n testElemModel.elProps.model = \"newModel\";\r\n cache.set(testElemModel);\r\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElemModel);\r\n });\r\n\r\n it('should store and retrieve a valid element by fedGuid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElemFedGuid);\r\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemFedGuid);\r\n });\r\n\r\n it('should store and retrieve a valid element by code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n\r\n cache.set(testElem2);\r\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem2);\r\n });\r\n\r\n it('should fail to store an element without id', () => {\r\n const cache = new ElementLRUCache(3);\r\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem2);\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.be.undefined;\r\n\r\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\r\n expect(retrievedElem3).to.not.be.undefined;\r\n expect(retrievedElem3).to.equal(testElem3);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ id: testElem2.elProps.id });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testElem2.elProps.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with model id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteWithModel(testElem2.elProps.model);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n\r\n it('should not return wrong element when passed a manipulated code value', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem2);\r\n expect(cache.size).to.equal(1);\r\n\r\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n});\r\n\r\ndescribe('InstanceKeyLRUCache', () => {\r\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\r\n partialKey: {\r\n id: Id64.fromJSON(\"0x123\"),\r\n baseClassName: \"baseName\",\r\n },\r\n }\r\n\r\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\r\n federationGuid: \"testFedGuid\",\r\n }\r\n\r\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\",\r\n value: \"testValue\"\r\n }\r\n }\r\n\r\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n }\r\n }\r\n\r\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\r\n {\r\n id: Id64.fromJSON(\"0x123\"),\r\n classFullName: \"testName1\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x122\"),\r\n classFullName: \"testName2\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x133\"),\r\n classFullName: \"testName3\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x144\"),\r\n classFullName: \"testName4\",\r\n }\r\n ];\r\n\r\n it('should store and retrieve a valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should overwrite existing valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const testResult = testResults[0];\r\n cache.set(testArgs1, testResult);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResult);\r\n\r\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\r\n cache.set(testArgs1, newTestResult);\r\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(newTestResult);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs2, testResults[0]);\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs3, testResults[0]);\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n\r\n cache.set(testArgs4, testResults[1]);\r\n const retrievedResult2 = cache.get({ code: testArgs4.code });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3}, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should not store a bad id as result in the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const badResult: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.invalid, classFullName: \"badName\" };\r\n expect(() => cache.set(testArgs1, badResult)).to.throw(Error, \"Invalid InstanceKey result\");\r\n expect(cache.size).to.equal(0);\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n cache.set(testArgs4, testResults[3]);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedResult = cache.get(testArgs2);\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[1]);\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n\r\n const retrievedResult3 = cache.get(testArgs3);\r\n expect(retrievedResult3).to.not.be.undefined;\r\n expect(retrievedResult3).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with partialKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ partialKey: testArgs1.partialKey });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteById(testArgs1.partialKey!.id);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should throw when deleting with a bad id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testArgs2.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs3);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testArgs3.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[0]);\r\n });\r\n\r\n it('should delete with any applicable arg', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n expect(cache.size).to.equal(1);\r\n cache.delete(testArgs3);\r\n expect(cache.size).to.equal(0);\r\n const retrievedResult = cache.get(testArgs1);\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.set(testArgs4, testResults[0]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.delete(testArgs4);\r\n expect(cache.size).to.equal(2);\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n });\r\n\r\n it('should throw when trying to delete with all undefined keys', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n expect(() => cache.delete({\r\n partialKey: undefined,\r\n federationGuid: undefined,\r\n code: undefined\r\n })).to.throw(Error, \"ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid\");\r\n\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get(testArgs1);\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n});\r\n"]}
1
+ {"version":3,"file":"ElementLRUCache.test.js","sourceRoot":"","sources":["../../../src/test/ElementLRUCache.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\r\nimport { CachedElement, ElementLRUCache, InstanceKeyLRUCache } from \"../internal/ElementLRUCache\";\r\nimport { IModelJsNative } from \"../core-backend\";\r\nimport { Id64 } from \"@itwin/core-bentley\";\r\nimport { Code } from \"@itwin/core-common\";\r\n\r\ndescribe('ElementLruCache', () => {\r\n const testElem1: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\"\r\n },\r\n }\r\n\r\n const testElem2: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId2\",\r\n model: \"testModel2\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\",\r\n value: \"testValue2\"\r\n },\r\n classFullName: \"testName2\"\r\n },\r\n }\r\n\r\n const testElem3: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId3\",\r\n model: \"testModel3\",\r\n code: {\r\n spec: \"testSpec3\",\r\n scope: \"testScope3\"\r\n },\r\n classFullName: \"testName3\"\r\n },\r\n }\r\n\r\n const testElemFedGuid: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testIdFed\",\r\n model: \"testModel\",\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n },\r\n classFullName: \"testName\",\r\n federationGuid: \"testFedGuid\"\r\n },\r\n }\r\n\r\n const testElemCode: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"testId5\",\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2:testValue2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n const testElemNoId: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: undefined,\r\n model: \"testModel5\",\r\n code: {\r\n spec: \"testSpec2\",\r\n scope: \"testScope2\"\r\n },\r\n classFullName: \"testName5\",\r\n federationGuid: \"testFedGuid5\"\r\n },\r\n }\r\n\r\n it('should store and retrieve a valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n });\r\n\r\n it('should overwrite existing valid element', () => {\r\n const cache = new ElementLRUCache(3);\r\n const testElemModel = testElem1;\r\n cache.set(testElemModel);\r\n const retrievedElem = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemModel);\r\n\r\n testElemModel.elProps.model = \"newModel\";\r\n cache.set(testElemModel);\r\n const retrievedElem2 = cache.get({ id: testElemModel.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElemModel);\r\n });\r\n\r\n it('should store and retrieve a valid element by fedGuid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElemFedGuid);\r\n const retrievedElem = cache.get({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElemFedGuid);\r\n });\r\n\r\n it('should store and retrieve a valid element by code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n const retrievedElem = cache.get({ code: testElem1.elProps.code });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem1);\r\n\r\n cache.set(testElem2);\r\n const retrievedElem2 = cache.get({ code: testElem2.elProps.code });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem2);\r\n });\r\n\r\n it('should fail to store an element without id', () => {\r\n const cache = new ElementLRUCache(3);\r\n expect(() => cache.set(testElemNoId)).to.throw(Error, \"Element must have an id\");\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.not.be.undefined;\r\n expect(retrievedElem).to.equal(testElem2);\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.be.undefined;\r\n\r\n const retrievedElem3 = cache.get({ id: testElem3.elProps.id });\r\n expect(retrievedElem3).to.not.be.undefined;\r\n expect(retrievedElem3).to.equal(testElem3);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ id: testElem2.elProps.id });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElemFedGuid);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testElemFedGuid.elProps.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElemFedGuid.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testElem2.elProps.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should delete with model id', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteWithModel(testElem2.elProps.model);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedElem = cache.get({ id: testElem2.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n\r\n const retrievedElem2 = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem2).to.not.be.undefined;\r\n expect(retrievedElem2).to.equal(testElem1);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem1);\r\n cache.set(testElem2);\r\n cache.set(testElem3);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get({ id: testElem1.elProps.id });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n\r\n it('should not return wrong element when passed a manipulated code value', () => {\r\n const cache = new ElementLRUCache(3);\r\n cache.set(testElem2);\r\n expect(cache.size).to.equal(1);\r\n\r\n const retrievedElem = cache.get({ code: testElemCode.elProps.code });\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n\r\n\r\n it('looking up by an empty code should not return any element', () => {\r\n const cache = new ElementLRUCache(10);\r\n cache.set({\r\n loadOptions: {},\r\n elProps: {\r\n id: \"0x10\",\r\n model: \"0x20\",\r\n code: Code.createEmpty(),\r\n classFullName: \"BisCore:Element\",\r\n },\r\n });\r\n\r\n const retrieved = cache.get({ code: Code.createEmpty() });\r\n expect(retrieved, \"empty-code lookup should return undefined\").to.be.undefined;\r\n });\r\n\r\n it('simulate inserting a second element with an empty code should not evict the first from the cache', () => {\r\n const elementWithEmptyCode: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"0x10\",\r\n model: \"0x20\",\r\n code: Code.createEmpty(),\r\n classFullName: \"BisCore:Element\",\r\n },\r\n };\r\n\r\n // Insert an element with an empty Code\r\n const cache = new ElementLRUCache(10);\r\n cache.set(elementWithEmptyCode);\r\n expect(cache.size).to.equal(1);\r\n\r\n const anotherElementWithEmptyCode: CachedElement = {\r\n loadOptions: {},\r\n elProps: {\r\n id: \"0x11\",\r\n model: \"0x20\",\r\n code: Code.createEmpty(),\r\n classFullName: \"BisCore:Element\",\r\n },\r\n };\r\n\r\n // Simulate the pre-insert cache invalidation for anotherElementWithEmptyCode (id not yet assigned).\r\n cache.delete({ id: undefined, federationGuid: undefined, code: anotherElementWithEmptyCode.elProps.code });\r\n\r\n // elementWithEmptyCode must NOT have been evicted — the delete should have been a no-op.\r\n const firstElement = cache.get({ id: elementWithEmptyCode.elProps.id });\r\n expect(firstElement, \"first element should still be in cache after pre-insert delete of second empty-code element\").to.equal(elementWithEmptyCode);\r\n });\r\n});\r\n\r\ndescribe('InstanceKeyLRUCache', () => {\r\n const testArgs1: IModelJsNative.ResolveInstanceKeyArgs = {\r\n partialKey: {\r\n id: Id64.fromJSON(\"0x123\"),\r\n baseClassName: \"baseName\",\r\n },\r\n }\r\n\r\n const testArgs2: IModelJsNative.ResolveInstanceKeyArgs = {\r\n federationGuid: \"testFedGuid\",\r\n }\r\n\r\n const testArgs3: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\",\r\n value: \"testValue\"\r\n }\r\n }\r\n\r\n const testArgs4: IModelJsNative.ResolveInstanceKeyArgs = {\r\n code: {\r\n spec: \"testSpec\",\r\n scope: \"testScope\"\r\n }\r\n }\r\n\r\n const testResults: IModelJsNative.ResolveInstanceKeyResult[] = [\r\n {\r\n id: Id64.fromJSON(\"0x123\"),\r\n classFullName: \"testName1\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x122\"),\r\n classFullName: \"testName2\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x133\"),\r\n classFullName: \"testName3\",\r\n },\r\n {\r\n id: Id64.fromJSON(\"0x144\"),\r\n classFullName: \"testName4\",\r\n }\r\n ];\r\n\r\n it('should store and retrieve a valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should overwrite existing valid InstanceKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const testResult = testResults[0];\r\n cache.set(testArgs1, testResult);\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResult);\r\n\r\n const newTestResult = { id: testResult.id, classFullName: \"newModel\" };\r\n cache.set(testArgs1, newTestResult);\r\n const retrievedResult2 = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(newTestResult);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by fedGuid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs2, testResults[0]);\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n });\r\n\r\n it('should store and retrieve a valid InstanceKey by code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs3, testResults[0]);\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[0]);\r\n\r\n cache.set(testArgs4, testResults[1]);\r\n const retrievedResult2 = cache.get({ code: testArgs4.code });\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should find the same InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set({ ...testArgs1, ...testArgs2, ...testArgs3 }, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should update an existing InstanceKey with either code, fedGuid, or Id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n\r\n const retrievedResultById = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResultById).to.not.be.undefined;\r\n expect(retrievedResultById).to.equal(testResults[0]);\r\n\r\n const retrievedResultByFedGuid = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResultByFedGuid).to.not.be.undefined;\r\n expect(retrievedResultByFedGuid).to.equal(testResults[0]);\r\n\r\n const retrievedResultByCode = cache.get({ code: testArgs3.code });\r\n expect(retrievedResultByCode).to.not.be.undefined;\r\n expect(retrievedResultByCode).to.equal(testResults[0]);\r\n });\r\n\r\n it('should not store a bad id as result in the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n const badResult: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.invalid, classFullName: \"badName\" };\r\n expect(() => cache.set(testArgs1, badResult)).to.throw(Error, \"Invalid InstanceKey result\");\r\n expect(cache.size).to.equal(0);\r\n });\r\n\r\n it('should delete least used element', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n cache.set(testArgs4, testResults[3]);\r\n expect(cache.size).to.equal(3);\r\n\r\n const retrievedResult = cache.get(testArgs2);\r\n expect(retrievedResult).to.not.be.undefined;\r\n expect(retrievedResult).to.equal(testResults[1]);\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n\r\n const retrievedResult3 = cache.get(testArgs3);\r\n expect(retrievedResult3).to.not.be.undefined;\r\n expect(retrievedResult3).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with partialKey', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ partialKey: testArgs1.partialKey });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should delete with id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.deleteById(testArgs1.partialKey!.id);\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ partialKey: testArgs1.partialKey });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs2);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[1]);\r\n });\r\n\r\n it('should throw when deleting with a bad id', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n expect(() => cache.deleteById(\"badid\")).to.throw(Error, \"Invalid id provided\");\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should delete with federation guid', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ federationGuid: testArgs2.federationGuid });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ federationGuid: testArgs2.federationGuid });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs3);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[2]);\r\n });\r\n\r\n it('should delete with code', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.delete({ code: testArgs3.code });\r\n expect(cache.size).to.equal(2);\r\n\r\n const retrievedResult = cache.get({ code: testArgs3.code });\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.not.be.undefined;\r\n expect(retrievedResult2).to.equal(testResults[0]);\r\n });\r\n\r\n it('should delete with any applicable arg', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[0]);\r\n cache.set(testArgs3, testResults[0]);\r\n expect(cache.size).to.equal(1);\r\n cache.delete(testArgs3);\r\n expect(cache.size).to.equal(0);\r\n const retrievedResult = cache.get(testArgs1);\r\n expect(retrievedResult).to.be.undefined;\r\n\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n cache.set(testArgs4, testResults[0]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.delete(testArgs4);\r\n expect(cache.size).to.equal(2);\r\n const retrievedResult2 = cache.get(testArgs1);\r\n expect(retrievedResult2).to.be.undefined;\r\n });\r\n\r\n it('should throw when trying to delete with all undefined keys', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n expect(() => cache.delete({\r\n partialKey: undefined,\r\n federationGuid: undefined,\r\n code: undefined\r\n })).to.throw(Error, \"ResolveInstanceKeyArgs must have a partialKey, code, or federationGuid\");\r\n\r\n expect(cache.size).to.equal(3);\r\n });\r\n\r\n it('should clear the cache', () => {\r\n const cache = new InstanceKeyLRUCache(3);\r\n cache.set(testArgs1, testResults[0]);\r\n cache.set(testArgs2, testResults[1]);\r\n cache.set(testArgs3, testResults[2]);\r\n expect(cache.size).to.equal(3);\r\n\r\n cache.clear();\r\n expect(cache.size).to.equal(0);\r\n\r\n const retrievedElem = cache.get(testArgs1);\r\n expect(retrievedElem).to.be.undefined;\r\n });\r\n\r\n it('two entries with empty codes should not collide in the instance key cache', () => {\r\n const emptyCodeArgs: IModelJsNative.ResolveInstanceKeyArgs = {\r\n federationGuid: \"testFedGuid\",\r\n code: Code.createEmpty()\r\n };\r\n\r\n const emptyCodeResult1: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.fromJSON(\"0x200\"), classFullName: \"BisCore:Element\" };\r\n const emptyCodeResult2: IModelJsNative.ResolveInstanceKeyResult = { id: Id64.fromJSON(\"0x201\"), classFullName: \"BisCore:Element\" };\r\n\r\n const cache = new InstanceKeyLRUCache(10);\r\n cache.set(emptyCodeArgs, emptyCodeResult1);\r\n expect(cache.size).to.equal(1);\r\n\r\n cache.set(emptyCodeArgs, emptyCodeResult2);\r\n const byCode = cache.get({ code: emptyCodeArgs.code });\r\n expect(byCode, \"empty-code lookup should return undefined even after two stores\").to.be.undefined;\r\n\r\n expect(cache.get({ partialKey: { id: emptyCodeResult1.id, baseClassName: \"\" } })).to.equal(emptyCodeResult1);\r\n expect(cache.get({ partialKey: { id: emptyCodeResult2.id, baseClassName: \"\" } })).to.equal(emptyCodeResult2);\r\n });\r\n});\r\n"]}
@@ -2275,6 +2275,35 @@ describe("iModel", () => {
2275
2275
  txn.end("abandon");
2276
2276
  db.close();
2277
2277
  });
2278
+ it("inserting a second element with an empty code must not evict the first from the element props cache", () => {
2279
+ const standaloneFile = IModelTestUtils.prepareOutputFile("IModel", "EmptyCodeCacheCollision.bim");
2280
+ const db = StandaloneDb.createEmpty(standaloneFile, { rootSubject: { name: "EmptyCodeCacheCollision" } });
2281
+ withEditTxn(db, (txn) => {
2282
+ const categoryId = SpatialCategory.insert(txn, IModel.dictionaryId, "TestCategory", new SubCategoryAppearance());
2283
+ const modelId = PhysicalModel.insert(txn, IModel.rootSubjectId, "TestModel");
2284
+ const emptyCodeProps = {
2285
+ classFullName: PhysicalObject.classFullName,
2286
+ model: modelId,
2287
+ category: categoryId,
2288
+ code: Code.createEmpty(),
2289
+ };
2290
+ // Insert the first element
2291
+ const id1 = txn.insertElement({ ...emptyCodeProps });
2292
+ db.elements.getElementProps(id1); // populate the element props cache
2293
+ const cacheSizeAfterFirstInsertAndRead = db.elements[_cache].size;
2294
+ expect(cacheSizeAfterFirstInsertAndRead).to.be.greaterThan(0, "cache should be populated after getElementProps");
2295
+ // Insert a second element with the same empty code
2296
+ const id2 = txn.insertElement({ ...emptyCodeProps });
2297
+ // The first element must still be in the cache.
2298
+ const cached1 = db.elements[_cache].get({ id: id1 });
2299
+ expect(cached1, "first element should still be in cache after inserting second element with the same empty code").to.not.be.undefined;
2300
+ expect(cached1.elProps.id).to.equal(id1);
2301
+ expect(Id64.isValidId64(id1)).to.be.true;
2302
+ expect(Id64.isValidId64(id2)).to.be.true;
2303
+ expect(id1).to.not.equal(id2);
2304
+ });
2305
+ db.close();
2306
+ });
2278
2307
  it("Standalone iModel properties", () => {
2279
2308
  const standaloneRootSubjectName = "Standalone";
2280
2309
  const standaloneFile1 = IModelTestUtils.prepareOutputFile("IModel", "Standalone1.bim");