@itwin/core-backend 5.3.0-dev.9 → 5.4.0-dev.2

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 (137) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  3. package/lib/cjs/BriefcaseManager.js +14 -0
  4. package/lib/cjs/BriefcaseManager.js.map +1 -1
  5. package/lib/cjs/CloudSqlite.d.ts +11 -0
  6. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  7. package/lib/cjs/CloudSqlite.js.map +1 -1
  8. package/lib/cjs/DisplayStyle.d.ts +2 -2
  9. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  10. package/lib/cjs/DisplayStyle.js +4 -4
  11. package/lib/cjs/DisplayStyle.js.map +1 -1
  12. package/lib/cjs/ECDb.js +1 -1
  13. package/lib/cjs/ECDb.js.map +1 -1
  14. package/lib/cjs/Element.d.ts +2 -2
  15. package/lib/cjs/Element.d.ts.map +1 -1
  16. package/lib/cjs/Element.js +2 -2
  17. package/lib/cjs/Element.js.map +1 -1
  18. package/lib/cjs/IModelDb.d.ts +15 -3
  19. package/lib/cjs/IModelDb.d.ts.map +1 -1
  20. package/lib/cjs/IModelDb.js +42 -5
  21. package/lib/cjs/IModelDb.js.map +1 -1
  22. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  23. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  24. package/lib/cjs/IModelElementCloneContext.js +2 -2
  25. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  26. package/lib/cjs/Material.d.ts +1 -1
  27. package/lib/cjs/Material.d.ts.map +1 -1
  28. package/lib/cjs/Material.js +2 -2
  29. package/lib/cjs/Material.js.map +1 -1
  30. package/lib/cjs/Relationship.d.ts +5 -0
  31. package/lib/cjs/Relationship.d.ts.map +1 -1
  32. package/lib/cjs/Relationship.js +7 -0
  33. package/lib/cjs/Relationship.js.map +1 -1
  34. package/lib/cjs/TxnManager.d.ts +8 -0
  35. package/lib/cjs/TxnManager.d.ts.map +1 -1
  36. package/lib/cjs/TxnManager.js +30 -2
  37. package/lib/cjs/TxnManager.js.map +1 -1
  38. package/lib/cjs/ViewDefinition.d.ts +1 -1
  39. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  40. package/lib/cjs/ViewDefinition.js +2 -2
  41. package/lib/cjs/ViewDefinition.js.map +1 -1
  42. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  43. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  44. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +4 -4
  45. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  46. package/lib/cjs/annotations/TextAnnotationElement.d.ts +5 -4
  47. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  48. package/lib/cjs/annotations/TextAnnotationElement.js +26 -11
  49. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  50. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  51. package/lib/cjs/internal/ElementLRUCache.js +2 -0
  52. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  53. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  54. package/lib/esm/BriefcaseManager.js +14 -0
  55. package/lib/esm/BriefcaseManager.js.map +1 -1
  56. package/lib/esm/CloudSqlite.d.ts +11 -0
  57. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  58. package/lib/esm/CloudSqlite.js.map +1 -1
  59. package/lib/esm/DisplayStyle.d.ts +2 -2
  60. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  61. package/lib/esm/DisplayStyle.js +4 -4
  62. package/lib/esm/DisplayStyle.js.map +1 -1
  63. package/lib/esm/ECDb.js +1 -1
  64. package/lib/esm/ECDb.js.map +1 -1
  65. package/lib/esm/Element.d.ts +2 -2
  66. package/lib/esm/Element.d.ts.map +1 -1
  67. package/lib/esm/Element.js +2 -2
  68. package/lib/esm/Element.js.map +1 -1
  69. package/lib/esm/IModelDb.d.ts +15 -3
  70. package/lib/esm/IModelDb.d.ts.map +1 -1
  71. package/lib/esm/IModelDb.js +42 -5
  72. package/lib/esm/IModelDb.js.map +1 -1
  73. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  74. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  75. package/lib/esm/IModelElementCloneContext.js +2 -2
  76. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  77. package/lib/esm/Material.d.ts +1 -1
  78. package/lib/esm/Material.d.ts.map +1 -1
  79. package/lib/esm/Material.js +2 -2
  80. package/lib/esm/Material.js.map +1 -1
  81. package/lib/esm/Relationship.d.ts +5 -0
  82. package/lib/esm/Relationship.d.ts.map +1 -1
  83. package/lib/esm/Relationship.js +7 -0
  84. package/lib/esm/Relationship.js.map +1 -1
  85. package/lib/esm/TxnManager.d.ts +8 -0
  86. package/lib/esm/TxnManager.d.ts.map +1 -1
  87. package/lib/esm/TxnManager.js +30 -2
  88. package/lib/esm/TxnManager.js.map +1 -1
  89. package/lib/esm/ViewDefinition.d.ts +1 -1
  90. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  91. package/lib/esm/ViewDefinition.js +2 -2
  92. package/lib/esm/ViewDefinition.js.map +1 -1
  93. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  94. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  95. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +4 -4
  96. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  97. package/lib/esm/annotations/TextAnnotationElement.d.ts +5 -4
  98. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  99. package/lib/esm/annotations/TextAnnotationElement.js +26 -11
  100. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  101. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  102. package/lib/esm/internal/ElementLRUCache.js +2 -0
  103. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  104. package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
  105. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
  106. package/lib/esm/test/ElementDrivesElement.test.js +862 -0
  107. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
  108. package/lib/esm/test/ElementLRUCache.test.js +19 -0
  109. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  110. package/lib/esm/test/annotations/Fields.test.js +44 -0
  111. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  112. package/lib/esm/test/annotations/TextAnnotation.test.js +71 -25
  113. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  114. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +2 -2
  115. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  116. package/lib/esm/test/ecdb/ECSqlStatement.test.js +33 -2
  117. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  118. package/lib/esm/test/hubaccess/Rebase.test.js +169 -2
  119. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  120. package/lib/esm/test/imodel/Code.test.d.ts +2 -0
  121. package/lib/esm/test/imodel/Code.test.d.ts.map +1 -0
  122. package/lib/esm/test/imodel/Code.test.js +272 -0
  123. package/lib/esm/test/imodel/Code.test.js.map +1 -0
  124. package/lib/esm/test/imodel/IModel.test.js +144 -1
  125. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  126. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  127. package/lib/esm/test/standalone/ChangesetReader.test.js +64 -55
  128. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  129. package/lib/esm/test/standalone/DisplayStyle.test.js +6 -6
  130. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  131. package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
  132. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  133. package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
  134. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  135. package/lib/esm/test/standalone/TxnManager.test.js +33 -5
  136. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  137. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"Fields.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/Fields.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Code, ElementAspectProps, FieldPropertyHost, FieldPropertyPath, FieldPropertyType, FieldRun, FieldValue, PhysicalElementProps, SubCategoryAppearance, TextAnnotation, TextBlock, TextBlockProps, TextRun } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { createUpdateContext, updateField, updateFields } from \"../../internal/annotations/fields\";\nimport { DbResult, Id64, Id64String, ProcessDetector } from \"@itwin/core-bentley\";\nimport { SpatialCategory } from \"../../Category\";\nimport { Point3d, XYAndZ, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { Schema, Schemas } from \"../../Schema\";\nimport { ClassRegistry } from \"../../ClassRegistry\";\nimport { PhysicalElement } from \"../../Element\";\nimport { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, IModelElementCloneContext, TextAnnotation3d } from \"../../core-backend\";\nimport { ElementDrivesTextAnnotation, TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\n\nfunction isIntlSupported(): boolean {\n // Node in the mobile add-on does not include Intl, so this test fails. Right now, mobile\n // users are not expected to do any editing, but long term we will attempt to find a better\n // solution.\n return !ProcessDetector.isMobileAppBackend;\n}\n\nfunction createTestElement(imodel: StandaloneDb, model: Id64String, category: Id64String, overrides?: Partial<TestElementProps>, aspectProp = 999): Id64String {\n const props: TestElementProps = {\n classFullName: \"Fields:TestElement\",\n model,\n category,\n code: Code.createEmpty(),\n intProp: 100,\n point: { x: 1, y: 2, z: 3 },\n strings: [\"a\", \"b\", `\"name\": \"c\"`],\n datetime: new Date(\"2025-08-28T13:45:30.123Z\"),\n intEnum: 1,\n outerStruct: {\n innerStruct: { bool: false, doubles: [1, 2, 3] },\n innerStructs: [{ bool: true, doubles: [] }, { bool: false, doubles: [5, 4, 3, 2, 1] }],\n },\n outerStructs: [{\n innerStruct: { bool: true, doubles: [10, 9] },\n innerStructs: [{ bool: false, doubles: [5] }],\n }],\n placement: {\n origin: new Point3d(1, 2, 0),\n angles: new YawPitchRollAngles(),\n },\n jsonProperties: {\n stringProp: \"abc\",\n ints: [10, 11, 12, 13],\n bool: true,\n zoo: {\n address: {\n zipcode: 12345,\n },\n birds: [\n { name: \"duck\", sound: \"quack\" },\n { name: \"hawk\", sound: \"scree!\" },\n ],\n },\n },\n ...overrides,\n };\n\n const id = imodel.elements.insertElement(props);\n\n const aspectProps: TestAspectProps = {\n classFullName: TestAspect.classFullName,\n aspectProp,\n element: new ElementOwnsUniqueAspect(id),\n };\n imodel.elements.insertAspect(aspectProps);\n\n imodel.saveChanges();\n return id;\n}\n\ndescribe(\"updateField\", () => {\n const mockElementId = \"0x1\";\n const mockPath: FieldPropertyPath = {\n propertyName: \"mockProperty\",\n accessors: [0, \"nestedProperty\"],\n };\n const mockCachedContent = \"cachedContent\";\n const mockUpdatedContent = \"updatedContent\";\n\n const createMockContext = (elementId: string, propertyValue?: string) => ({\n hostElementId: elementId,\n getProperty: (field: FieldRun): FieldValue | undefined => {\n const propertyPath = field.propertyPath;\n if (\n propertyPath.propertyName === \"mockProperty\" &&\n propertyPath.accessors?.[0] === 0 &&\n propertyPath.accessors?.[1] === \"nestedProperty\" &&\n propertyValue !== undefined\n ) {\n return { value: propertyValue, type: \"string\" };\n }\n return undefined;\n },\n });\n\n it(\"does nothing if hostElementId does not match\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(\"0x2\", mockUpdatedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.false;\n expect(fieldRun.cachedContent).to.equal(mockCachedContent);\n });\n\n it(\"produces invalid content indicator if property value is undefined\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n\n it(\"returns false if cached content matches new content\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId, mockCachedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.false;\n expect(fieldRun.cachedContent).to.equal(mockCachedContent);\n });\n\n it(\"returns true and updates cached content if new content is different\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId, mockUpdatedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(mockUpdatedContent);\n });\n\n it(\"resolves to invalid content indicator if an exception occurs\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = {\n hostElementId: mockElementId,\n getProperty: () => {\n throw new Error(\"Test exception\");\n },\n };\n\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n});\n\nconst fieldsSchemaXml = `\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ECSchema schemaName=\"Fields\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n\n <ECEnumeration typeName=\"IntEnum\" backingTypeName=\"int\">\n <ECEnumerator name=\"one\" displayLabel=\"One\" value=\"1\" />\n <ECEnumerator name=\"two\" displayLabel=\"Two\" value=\"2\"/>\n </ECEnumeration>\n\n <ECStructClass typeName=\"InnerStruct\" modifier=\"None\">\n <ECProperty propertyName=\"bool\" typeName=\"boolean\"/>\n <ECArrayProperty propertyName=\"doubles\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECStructClass>\n\n <ECStructClass typeName=\"OuterStruct\" modifier=\"None\">\n <ECStructProperty propertyName=\"innerStruct\" typeName=\"InnerStruct\"/>\n <ECStructArrayProperty propertyName=\"innerStructs\" typeName=\"InnerStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECStructClass>\n\n <ECEntityClass typeName=\"TestElement\" modifier=\"None\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"intProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"point\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"maybeNull\" typeName=\"int\"/>\n <ECProperty propertyName=\"datetime\" typeName=\"dateTime\"/>\n <ECArrayProperty propertyName=\"strings\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructProperty propertyName=\"outerStruct\" typeName=\"OuterStruct\"/>\n <ECStructArrayProperty propertyName=\"outerStructs\" typeName=\"OuterStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECProperty propertyName=\"intEnum\" typeName=\"IntEnum\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <ECProperty propertyName=\"aspectProp\" typeName=\"int\"/>\n </ECEntityClass>\n</ECSchema>\n`;\n\ninterface InnerStruct {\n bool: boolean;\n doubles: number[];\n}\n\ninterface OuterStruct {\n innerStruct: InnerStruct;\n innerStructs: InnerStruct[];\n}\n\ninterface TestElementProps extends PhysicalElementProps {\n intProp: number;\n point: XYAndZ;\n maybeNull?: number;\n strings: string[];\n datetime: Date;\n outerStruct: OuterStruct;\n outerStructs: OuterStruct[];\n intEnum?: number;\n}\n\nclass TestElement extends PhysicalElement {\n public static override get className() { return \"TestElement\"; }\n declare public intProp: number;\n declare public point: XYAndZ;\n declare public maybeNull?: number;\n declare public strings: string[];\n declare public datetime: Date;\n declare public outerStruct: OuterStruct;\n declare public outerStructs: OuterStruct[];\n}\n\nclass TestAspect extends ElementUniqueAspect {\n public static override get className() { return \"TestAspect\"; }\n\n declare public aspectProp: number;\n}\n\ninterface TestAspectProps extends ElementAspectProps {\n aspectProp: number;\n}\n\nclass FieldsSchema extends Schema {\n public static override get schemaName() { return \"Fields\"; }\n}\n\nasync function registerTestSchema(iModel: IModelDb): Promise<void> {\n if (!Schemas.getRegisteredSchema(\"Fields\")) {\n Schemas.registerSchema(FieldsSchema);\n ClassRegistry.register(TestElement, FieldsSchema);\n ClassRegistry.register(TestAspect, FieldsSchema);\n }\n\n await iModel.importSchemaStrings([fieldsSchemaXml]);\n iModel.saveChanges();\n}\n\ndescribe(\"Field evaluation\", () => {\n let imodel: StandaloneDb;\n let model: Id64String;\n let category: Id64String;\n let sourceElementId: Id64String;\n\n before(async () => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"UpdateFieldsContext\", \"test.bim\");\n imodel = StandaloneDb.createEmpty(iModelPath, { rootSubject: { name: \"UpdateFieldsContext\" }, allowEdit: JSON.stringify({ txns: true } )});\n\n await registerTestSchema(imodel);\n\n model = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true)[1];\n category = SpatialCategory.insert(imodel, StandaloneDb.dictionaryId, \"UpdateFieldsContextCategory\", new SubCategoryAppearance());\n sourceElementId = insertTestElement();\n\n await imodel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n });\n });\n\n after(() => {\n imodel.close();\n });\n\n function insertTestElement(overrides?: Partial<TestElementProps>, aspectProp?: number): Id64String {\n return createTestElement(imodel, model, category, overrides, aspectProp);\n }\n\n function evaluateField(propertyPath: FieldPropertyPath, propertyHost: FieldPropertyHost | Id64String, deletedDependency = false): FieldValue | undefined {\n if (typeof propertyHost === \"string\") {\n propertyHost = { schemaName: \"Fields\", className: \"TestElement\", elementId: propertyHost };\n }\n\n const field = FieldRun.create({\n propertyPath,\n propertyHost,\n });\n\n const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);\n return context.getProperty(field);\n }\n\n describe(\"getProperty\", () => {\n function expectValue(expected: any, propertyPath: FieldPropertyPath, propertyHost: FieldPropertyHost | Id64String, deletedDependency = false): void {\n expect(evaluateField(propertyPath, propertyHost, deletedDependency)?.value).to.deep.equal(expected);\n }\n\n it(\"returns a primitive property value\", () => {\n expectValue(100, { propertyName: \"intProp\" }, sourceElementId);\n });\n\n it(\"returns an integer enum property value\", () => {\n expectValue(1, { propertyName: \"intEnum\" }, sourceElementId);\n });\n\n it(\"treats points as primitive values\", () => {\n expectValue({ x: 1, y: 2, z: 3 }, { propertyName: \"point\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"point\", accessors: [\"x\"] }, sourceElementId);\n });\n\n it(\"returns a primitive array value\", () => {\n expectValue(\"a\", { propertyName: \"strings\", accessors: [0] }, sourceElementId);\n expectValue(\"b\", { propertyName: \"strings\", accessors: [1] }, sourceElementId);\n expectValue(`\"name\": \"c\"`, { propertyName: \"strings\", accessors: [2] }, sourceElementId);\n });\n\n it(\"supports negative array indices\", () => {\n expectValue(\"a\", { propertyName: \"strings\", accessors: [-3] }, sourceElementId);\n expectValue(\"b\", { propertyName: \"strings\", accessors: [-2] }, sourceElementId);\n expectValue(`\"name\": \"c\"`, { propertyName: \"strings\", accessors: [-1] }, sourceElementId);\n });\n\n it(\"returns undefined if the dependency was deleted\", () => {\n expectValue(undefined, { propertyName: \"intProp\" }, sourceElementId, true);\n });\n\n it(\"returns undefined if the host element does not exist\", () => {\n expectValue(undefined, { propertyName: \"intProp\" }, \"0xbaadf00d\");\n });\n\n it(\"returns undefined if the host element is not of the specified class or a subclass thereof\", () => {\n expectValue(undefined, { propertyName: \"origin\" }, { schemaName: \"BisCore\", className: \"GeometricElement2d\", elementId: sourceElementId });\n });\n\n it(\"returns undefined if an access string is specified for a non-object property\", () => {\n expectValue(undefined, { propertyName: \"intProp\", accessors: [\"property\"] }, sourceElementId);\n });\n\n it(\"returns undefined if the specified property does not exist\", () => {\n expectValue(undefined, { propertyName: \"nonExistentProperty\" }, sourceElementId);\n });\n\n it(\"returns undefined if the specified property is null\", () => {\n expectValue(undefined, { propertyName: \"maybeNull\" }, sourceElementId);\n });\n\n it(\"returns undefined if an array index is specified for a non-array property\", () => {\n expectValue(undefined, { propertyName: \"intProp\", accessors: [0] }, sourceElementId);\n });\n\n it(\"returns undefined if an array index is out of bounds\", () => {\n for (const index of [3, 4, -4, -5]) {\n expectValue(undefined, { propertyName: \"strings\", accessors: [index] }, sourceElementId);\n }\n });\n\n it(\"returns undefined for a non-primitive value\", () => {\n expectValue(undefined, { propertyName: \"strings\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStruct\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStruct\", accessors: [\"innerStruct\"] }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\", accessors: [0] }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\", accessors: [0, \"innerStruct\"] }, sourceElementId);\n });\n\n it(\"returns arbitrarily-nested properties of structs and struct arrays\", () => {\n expectValue(false, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"bool\"] }, sourceElementId);\n for (const index of [0, 1, 2]) {\n expectValue(index + 1, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", index] },sourceElementId);\n expectValue(3 - index, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", -1 - index] },sourceElementId);\n }\n\n expectValue(9, { propertyName: \"outerStructs\", accessors: [0, \"innerStruct\", \"doubles\", 1] }, sourceElementId);\n expectValue(false, { propertyName: \"outerStructs\", accessors: [0, \"innerStructs\", -1, \"bool\"] }, sourceElementId);\n expectValue(5, { propertyName: \"outerStructs\", accessors: [0, \"innerStructs\", 0, \"doubles\", 0] }, sourceElementId);\n });\n\n it(\"returns the value of a property of an aspect\", () => {\n expect(imodel.elements.getAspects(sourceElementId, \"Fields:TestAspect\").length).to.equal(1);\n expectValue(999, { propertyName: \"aspectProp\" }, { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestAspect\" });\n });\n\n it(\"should fail to evaluate if prop type does not match\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"string\", accessors: [0] },\n cachedContent: \"oldValue\",\n formatOptions: {\n case: \"upper\",\n prefix: \"Value: \",\n suffix: \"!\"\n }\n });\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n\n const updated = updateField(fieldRun, context);\n\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n\n function getPropertyType(propertyHost: FieldPropertyHost, propertyPath: string | FieldPropertyPath): FieldPropertyType | undefined {\n if (typeof propertyPath === \"string\") {\n propertyPath = { propertyName: propertyPath };\n }\n\n return evaluateField(propertyPath, propertyHost)?.type;\n }\n\n it(\"deduces type for primitive properties\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"intProp\")).to.equal(\"string\");\n expect(getPropertyType(propertyHost, \"point\")).to.equal(\"coordinate\");\n expect(getPropertyType(propertyHost, { propertyName: \"strings\", accessors: [0] })).to.equal(\"string\");\n expect(getPropertyType(propertyHost, \"intEnum\")).to.equal(\"int-enum\");\n expect(getPropertyType(propertyHost, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", 0] })).to.equal(\"quantity\");\n expect(getPropertyType(propertyHost, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"bool\"] })).to.equal(\"boolean\");\n\n propertyHost.schemaName = \"BisCore\";\n propertyHost.className = \"GeometricElement3d\";\n expect(getPropertyType(propertyHost, \"LastMod\")).to.equal(\"datetime\");\n expect(getPropertyType(propertyHost, \"FederationGuid\")).to.equal(\"string\");\n });\n\n it(\"returns undefined for non-primitive properties\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"outerStruct\")).to.equal(undefined);\n expect(getPropertyType(propertyHost, \"outerStructs\")).to.equal(undefined);\n });\n\n it(\"returns undefined for invalid property paths\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"unknownPropertyName\")).to.be.undefined;\n });\n\n it(\"should return undefined for unsupported primitive types\", () => {\n const host = { elementId: sourceElementId, schemaName: \"BisCore\", className: \"GeometricElement3d\" };\n expect(getPropertyType(host, \"GeometryStream\")).to.be.undefined;\n });\n });\n\n describe(\"updateFields\", () => {\n it(\"recomputes cached content\", () => {\n const textBlock = TextBlock.create();\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"oldValue\",\n });\n\n textBlock.appendRun(fieldRun);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(1);\n expect(fieldRun.cachedContent).to.equal(\"100\"); // `intProp` value from the test element\n });\n\n it(\"does not update a field if recomputed content matches cached content\", () => {\n const textBlock = TextBlock.create();\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"100\",\n });\n\n textBlock.appendRun(fieldRun);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(0);\n expect(fieldRun.cachedContent).to.equal(\"100\");\n });\n\n it(\"returns the number of fields updated\", () => {\n const textBlock = TextBlock.create();\n const fieldRun1 = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"100\",\n });\n\n const fieldRun2 = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"strings\", accessors: [0] },\n cachedContent: \"oldValue\",\n });\n\n textBlock.appendRun(fieldRun1);\n textBlock.appendRun(fieldRun2);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(1);\n expect(fieldRun1.cachedContent).to.equal(\"100\");\n expect(fieldRun2.cachedContent).to.equal(\"a\");\n });\n });\n\n function createAnnotationElement(textBlock: TextBlock | undefined): TextAnnotation3d {\n const elem = TextAnnotation3d.fromJSON({\n model,\n category,\n code: Code.createEmpty(),\n placement: {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n },\n classFullName: TextAnnotation3d.classFullName,\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x123\").toJSON(),\n }, imodel);\n\n if (textBlock) {\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n }\n\n return elem;\n }\n\n function insertAnnotationElement(textBlock: TextBlock | undefined): Id64String {\n const elem = createAnnotationElement(textBlock);\n return elem.insert();\n }\n\n describe(\"ElementDrivesTextAnnotation\", () => {\n function expectNumRelationships(expected: number, targetId?: Id64String): void {\n const where = targetId ? ` WHERE TargetECInstanceId=${targetId}` : \"\";\n const ecsql = `SELECT COUNT(*) FROM BisCore.ElementDrivesTextAnnotation ${where}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel.withPreparedStatement(ecsql, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n expect(stmt.getValue(0).getInteger()).to.equal(expected);\n });\n }\n\n it(\"can be inserted\", () => {\n expectNumRelationships(0);\n\n const targetId = insertAnnotationElement(undefined);\n expect(targetId).not.to.equal(Id64.invalid);\n\n const target = imodel.elements.getElement(targetId);\n expect(target.classFullName).to.equal(\"BisCore:TextAnnotation3d\");\n expect(target).instanceof(TextAnnotation3d);\n\n const targetAnno = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(targetAnno).instanceof(TextAnnotation3d);\n\n const rel = ElementDrivesTextAnnotation.create(imodel, sourceElementId, targetId);\n const relId = rel.insert();\n expect(relId).not.to.equal(Id64.invalid);\n\n expectNumRelationships(1);\n\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementDrivesTextAnnotation\", relId);\n expect(relationship.sourceId).to.equal(sourceElementId);\n expect(relationship.targetId).to.equal(targetId);\n });\n\n function createField(propertyHost: Id64String | FieldPropertyHost, cachedContent: string, propertyName = \"intProp\", accessors?: Array<string | number>): FieldRun {\n if (typeof propertyHost === \"string\") {\n propertyHost = { schemaName: \"Fields\", className: \"TestElement\", elementId: propertyHost };\n }\n\n return FieldRun.create({\n styleOverrides: { font: { name: \"Karla\" } },\n propertyHost,\n cachedContent,\n propertyPath: { propertyName, accessors },\n });\n }\n\n describe(\"updateFieldDependencies\", () => {\n it(\"creates exactly one relationship for each unique source element on insert and update\", () => {\n const source1 = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(source1, \"1\"));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n\n const source2 = insertTestElement();\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n const anno = target.getAnnotation()!;\n anno.textBlock.appendRun(createField(source2, \"2a\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n\n anno.textBlock.appendRun(createField(source2, \"2b\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n\n const source3 = insertTestElement();\n anno.textBlock.appendRun(createField(source3, \"3\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(3, targetId);\n });\n\n it(\"deletes stale relationships\", () => {\n const sourceA = insertTestElement();\n const sourceB = insertTestElement();\n\n const block = TextBlock.create();\n block.appendRun(createField(sourceA, \"A\"));\n block.appendRun(createField(sourceB, \"B\"));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n const anno = target.getAnnotation()!;\n\n // Remove the sourceA FieldRun from the first paragraph.\n const p1 = anno.textBlock.children[0];\n p1.children.shift();\n\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;\n\n anno.textBlock.children.length = 0;\n anno.textBlock.appendRun(createField(sourceA, \"A2\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;\n\n anno.textBlock.children.length = 0;\n anno.textBlock.appendRun(TextRun.create({\n styleOverrides: { font: { name: \"Karla\" } },\n content: \"not a field\",\n }));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(0, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;\n });\n\n it(\"ignores invalid source element Ids\", () => {\n const source = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(Id64.invalid, \"invalid\"));\n block.appendRun(createField(\"0xbaadf00d\", \"non-existent\"));\n block.appendRun(createField(source, \"valid\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectNumRelationships(1, targetId);\n });\n });\n\n function expectText(expected: string, elemId: Id64String, db?: StandaloneDb): void {\n db = db ?? imodel;\n const elem = db.elements.getElement<TextAnnotation3d>(elemId);\n const anno = elem.getAnnotation()!;\n const actual = anno.textBlock.stringify();\n expect(actual).to.equal(expected);\n }\n\n it(\"evaluates cachedContent when annotation element is inserted\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"initial cached content\"));\n expect(block.stringify()).to.equal(\"initial cached content\");\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(target.getAnnotation()!.textBlock.stringify()).to.equal(\"100\");\n });\n\n it(\"updates fields when source element is modified or deleted\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"old value\"));;\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(target.getAnnotation()).not.to.be.undefined;\n\n expectText(\"100\", targetId);\n\n let source = imodel.elements.getElement<TestElement>(sourceId);\n source.intProp = 50;\n source.update();\n\n expectText(\"100\", targetId);\n\n imodel.saveChanges();\n\n source = imodel.elements.getElement<TestElement>(sourceId);\n expect(source.intProp).to.equal(50);\n\n expectText(\"50\", targetId);\n\n imodel.elements.deleteElement(sourceId);\n expectText(\"50\", targetId);\n\n imodel.saveChanges();\n expectText(FieldRun.invalidContentIndicator, targetId);\n });\n\n it(\"updates fields when source element aspect is modified, deleted, or recreated\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField({ elementId: sourceId, schemaName: \"Fields\", className: \"TestAspect\" }, \"\", \"aspectProp\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"999\", targetId);\n\n const aspects = imodel.elements.getAspects(sourceId, \"Fields:TestAspect\");\n expect(aspects.length).to.equal(1);\n const aspect = aspects[0] as TestAspect;\n expect(aspect.aspectProp).to.equal(999);\n\n aspect.aspectProp = 12345;\n imodel.elements.updateAspect(aspect.toJSON());\n imodel.saveChanges();\n expectText(\"12345\", targetId);\n\n imodel.elements.deleteAspect([aspect.id]);\n imodel.saveChanges();\n expectText(FieldRun.invalidContentIndicator, targetId);\n\n const newAspect: TestAspectProps = {\n element: new ElementOwnsUniqueAspect(sourceId),\n classFullName: TestAspect.classFullName,\n aspectProp: 42,\n };\n imodel.elements.insertAspect(newAspect);\n imodel.saveChanges();\n expectText(\"42\", targetId);\n });\n\n it(\"updates only fields for specific modified element\", () => {\n const sourceA = insertTestElement();\n const sourceB = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceA, \"A\"));\n block.appendRun(createField(sourceB, \"B\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"100100\", targetId);\n\n const sourceElem = imodel.elements.getElement<TestElement>(sourceB);\n sourceElem.intProp = 123;\n sourceElem.update();\n imodel.saveChanges();\n\n expectText(\"100123\", targetId);\n });\n\n it(\"supports complex property paths\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"\", \"outerStruct\", [\"innerStructs\", 1, \"doubles\", -2]));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"2\", targetId);\n\n const source = imodel.elements.getElement<TestElement>(sourceId);\n source.outerStruct.innerStructs[1].doubles[3] = 12.5;\n source.update();\n imodel.saveChanges();\n expectText(\"12.5\", targetId);\n });\n\n describe(\"remapFields\", () => {\n let dstIModel: StandaloneDb;\n let dstModel: Id64String;\n let dstCategory: Id64String;\n let dstSourceElementId: Id64String;\n\n before(async () => {\n const path = IModelTestUtils.prepareOutputFile(\"RemapFields\", `dst.bim`);\n dstIModel = StandaloneDb.createEmpty(path, { rootSubject: { name: `RemapFields-dst` }, allowEdit: JSON.stringify({ txns: true })});\n await registerTestSchema(dstIModel);\n\n // Insert additional unused elements to ensure element Ids differ between src and dst iModels\n for (let i = 0; i < 3; i++) {\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);\n }\n\n const modelAndElement = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);\n expect(modelAndElement[0]).to.equal(modelAndElement[1]);\n\n dstModel = modelAndElement[1];\n dstCategory = SpatialCategory.insert(dstIModel, StandaloneDb.dictionaryId, `dstCat`, new SubCategoryAppearance());\n dstSourceElementId = createTestElement(dstIModel, dstModel, dstCategory, {\n intProp: 200,\n point: { x: -1, y: -2, z: -3 },\n strings: [\"x\", \"y\", \"z\"],\n intEnum: 2,\n }, 1234);\n\n await dstIModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n });\n\n expect(dstCategory).not.to.equal(category);\n expect(dstModel).not.to.equal(model);\n expect(dstSourceElementId).not.to.equal(sourceElementId);\n });\n\n after(() => {\n dstIModel.close();\n });\n\n function getTextBlockJson(): TextBlockProps {\n return {\n children: [{\n children: [{\n type: \"field\",\n propertyHost: {\n elementId: sourceElementId,\n schemaName: \"Fields\",\n className: \"TestElement\",\n },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"intProp\",\n }, {\n type: \"field\",\n propertyHost: {\n elementId: category,\n schemaName: \"BisCore\",\n className: \"Element\",\n },\n propertyPath: { propertyName: \"CodeValue\" },\n cachedContent: \"CodeValue\"\n }],\n }],\n };\n }\n\n function expectHostIds(elem: TextAnnotation3d, host1: Id64String, host2: Id64String): void {\n const anno = elem.getAnnotation()!;\n expect(anno.textBlock.children.length).to.equal(1);\n const para = anno.textBlock.children[0];\n expect(para.children.length).to.equal(2);\n expect(para.children.every((x) => x.type === \"field\"));\n const field1 = para.children[0] as FieldRun;\n expect(field1.propertyHost.elementId).to.equal(host1);\n const field2 = para.children[1] as FieldRun;\n expect(field2.propertyHost.elementId).to.equal(host2);\n }\n\n it(\"remaps field hosts\", () => {\n const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));\n expectHostIds(elem, sourceElementId, category);\n\n const context = new IModelElementCloneContext(imodel, dstIModel);\n context.remapElement(sourceElementId, dstSourceElementId);\n context.remapElement(category, dstCategory);\n\n ElementDrivesTextAnnotation.remapFields(elem, context);\n expectHostIds(elem, dstSourceElementId, dstCategory);\n });\n\n it(\"invalidates field host if source element not remapped\", () => {\n const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));\n expectHostIds(elem, sourceElementId, category);\n\n const context = new IModelElementCloneContext(imodel, dstIModel);\n\n ElementDrivesTextAnnotation.remapFields(elem, context);\n expectHostIds(elem, Id64.invalid, Id64.invalid);\n });\n });\n });\n\n describe(\"Format Validation\", () => {\n it(\"validates formatting options for string property type\", () => {\n // Create a FieldRun with string property type and some format options\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"strings\", accessors: [0] },\n cachedContent: \"oldValue\",\n formatOptions: {\n case: \"upper\",\n prefix: \"Value: \",\n suffix: \"!\"\n }\n });\n\n // Context returns a string value for the property\n const context = {\n hostElementId: sourceElementId,\n getProperty: () => { return { value: \"abc\", type: \"string\" as const } },\n };\n\n // Update the field and check the result\n const updated = updateField(fieldRun, context);\n\n // The formatted value should be uppercased and have prefix/suffix applied\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(\"Value: ABC!\");\n });\n\n it(\"validates formatting options for datetime objects\", function () {\n if (!isIntlSupported()) {\n this.skip();\n }\n\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n const fieldRun = FieldRun.create({\n propertyHost,\n propertyPath: { propertyName: \"datetime\"},\n cachedContent: \"oldval\",\n formatOptions: {\n dateTime: {\n formatOptions:{\n month: \"short\",\n day: \"2-digit\",\n year: \"numeric\",\n timeZone: \"UTC\"\n },\n locale: \"en-US\",\n },\n },\n });\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updated = updateField(fieldRun, context);\n\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(\"Aug 28, 2025\");\n });\n });\n});\n"]}
1
+ {"version":3,"file":"Fields.test.js","sourceRoot":"","sources":["../../../../src/test/annotations/Fields.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { expect } from \"chai\";\nimport { Code, ElementAspectProps, FieldPropertyHost, FieldPropertyPath, FieldPropertyType, FieldRun, FieldValue, PhysicalElementProps, SubCategoryAppearance, TextAnnotation, TextBlock, TextBlockProps, TextRun } from \"@itwin/core-common\";\nimport { IModelDb, StandaloneDb } from \"../../IModelDb\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { createUpdateContext, updateField, updateFields } from \"../../internal/annotations/fields\";\nimport { DbResult, Id64, Id64String, ProcessDetector } from \"@itwin/core-bentley\";\nimport { SpatialCategory } from \"../../Category\";\nimport { Point3d, XYAndZ, YawPitchRollAngles } from \"@itwin/core-geometry\";\nimport { Schema, Schemas } from \"../../Schema\";\nimport { ClassRegistry } from \"../../ClassRegistry\";\nimport { PhysicalElement } from \"../../Element\";\nimport { ElementOwnsUniqueAspect, ElementUniqueAspect, FontFile, IModelElementCloneContext, TextAnnotation3d } from \"../../core-backend\";\nimport { ElementDrivesTextAnnotation, TextAnnotationUsesTextStyleByDefault } from \"../../annotations/ElementDrivesTextAnnotation\";\n\nfunction isIntlSupported(): boolean {\n // Node in the mobile add-on does not include Intl, so this test fails. Right now, mobile\n // users are not expected to do any editing, but long term we will attempt to find a better\n // solution.\n return !ProcessDetector.isMobileAppBackend;\n}\n\nfunction createTestElement(imodel: StandaloneDb, model: Id64String, category: Id64String, overrides?: Partial<TestElementProps>, aspectProp = 999): Id64String {\n const props: TestElementProps = {\n classFullName: \"Fields:TestElement\",\n model,\n category,\n code: Code.createEmpty(),\n intProp: 100,\n point: { x: 1, y: 2, z: 3 },\n strings: [\"a\", \"b\", `\"name\": \"c\"`],\n datetime: new Date(\"2025-08-28T13:45:30.123Z\"),\n intEnum: 1,\n outerStruct: {\n innerStruct: { bool: false, doubles: [1, 2, 3] },\n innerStructs: [{ bool: true, doubles: [] }, { bool: false, doubles: [5, 4, 3, 2, 1] }],\n },\n outerStructs: [{\n innerStruct: { bool: true, doubles: [10, 9] },\n innerStructs: [{ bool: false, doubles: [5] }],\n }],\n placement: {\n origin: new Point3d(1, 2, 0),\n angles: new YawPitchRollAngles(),\n },\n jsonProperties: {\n stringProp: \"abc\",\n ints: [10, 11, 12, 13],\n bool: true,\n zoo: {\n address: {\n zipcode: 12345,\n },\n birds: [\n { name: \"duck\", sound: \"quack\" },\n { name: \"hawk\", sound: \"scree!\" },\n ],\n },\n },\n ...overrides,\n };\n\n const id = imodel.elements.insertElement(props);\n\n const aspectProps: TestAspectProps = {\n classFullName: TestAspect.classFullName,\n aspectProp,\n element: new ElementOwnsUniqueAspect(id),\n };\n imodel.elements.insertAspect(aspectProps);\n\n imodel.saveChanges();\n return id;\n}\n\ndescribe(\"updateField\", () => {\n const mockElementId = \"0x1\";\n const mockPath: FieldPropertyPath = {\n propertyName: \"mockProperty\",\n accessors: [0, \"nestedProperty\"],\n };\n const mockCachedContent = \"cachedContent\";\n const mockUpdatedContent = \"updatedContent\";\n\n const createMockContext = (elementId: string, propertyValue?: string) => ({\n hostElementId: elementId,\n getProperty: (field: FieldRun): FieldValue | undefined => {\n const propertyPath = field.propertyPath;\n if (\n propertyPath.propertyName === \"mockProperty\" &&\n propertyPath.accessors?.[0] === 0 &&\n propertyPath.accessors?.[1] === \"nestedProperty\" &&\n propertyValue !== undefined\n ) {\n return { value: propertyValue, type: \"string\" };\n }\n return undefined;\n },\n });\n\n it(\"does nothing if hostElementId does not match\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(\"0x2\", mockUpdatedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.false;\n expect(fieldRun.cachedContent).to.equal(mockCachedContent);\n });\n\n it(\"produces invalid content indicator if property value is undefined\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n\n it(\"returns false if cached content matches new content\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId, mockCachedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.false;\n expect(fieldRun.cachedContent).to.equal(mockCachedContent);\n });\n\n it(\"returns true and updates cached content if new content is different\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = createMockContext(mockElementId, mockUpdatedContent);\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(mockUpdatedContent);\n });\n\n it(\"resolves to invalid content indicator if an exception occurs\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: mockElementId, schemaName: \"TestSchema\", className: \"TestClass\" },\n propertyPath: mockPath,\n cachedContent: mockCachedContent,\n });\n\n const context = {\n hostElementId: mockElementId,\n getProperty: () => {\n throw new Error(\"Test exception\");\n },\n };\n\n const result = updateField(fieldRun, context);\n\n expect(result).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n});\n\nconst fieldsSchemaXml = `\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ECSchema schemaName=\"Fields\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"01.00.04\" alias=\"bis\"/>\n <ECSchemaReference name='ECDbMap' version='02.00.04' alias='ecdbmap' />\n\n <ECEnumeration typeName=\"IntEnum\" backingTypeName=\"int\">\n <ECEnumerator name=\"one\" displayLabel=\"One\" value=\"1\" />\n <ECEnumerator name=\"two\" displayLabel=\"Two\" value=\"2\"/>\n </ECEnumeration>\n\n <ECStructClass typeName=\"InnerStruct\" modifier=\"None\">\n <ECProperty propertyName=\"bool\" typeName=\"boolean\"/>\n <ECArrayProperty propertyName=\"doubles\" typeName=\"double\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECStructClass>\n\n <ECStructClass typeName=\"OuterStruct\" modifier=\"None\">\n <ECStructProperty propertyName=\"innerStruct\" typeName=\"InnerStruct\"/>\n <ECStructArrayProperty propertyName=\"innerStructs\" typeName=\"InnerStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n </ECStructClass>\n\n <ECEntityClass typeName=\"TestElement\" modifier=\"None\">\n <BaseClass>bis:PhysicalElement</BaseClass>\n <ECProperty propertyName=\"intProp\" typeName=\"int\"/>\n <ECProperty propertyName=\"point\" typeName=\"point3d\"/>\n <ECProperty propertyName=\"maybeNull\" typeName=\"int\"/>\n <ECProperty propertyName=\"datetime\" typeName=\"dateTime\"/>\n <ECArrayProperty propertyName=\"strings\" typeName=\"string\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECStructProperty propertyName=\"outerStruct\" typeName=\"OuterStruct\"/>\n <ECStructArrayProperty propertyName=\"outerStructs\" typeName=\"OuterStruct\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n <ECProperty propertyName=\"intEnum\" typeName=\"IntEnum\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestAspect\" modifier=\"None\">\n <BaseClass>bis:ElementUniqueAspect</BaseClass>\n <ECProperty propertyName=\"aspectProp\" typeName=\"int\"/>\n </ECEntityClass>\n\n <ECEntityClass typeName=\"TestElementStringProp\" modifier=\"Abstract\">\n <ECCustomAttributes>\n <QueryView xmlns=\"ECDbMap.02.00.04\">\n <Query>\n SELECT\n jo.ECInstanceId,\n ec_classid('Fields', 'TestElementStringProp') [ECClassId],\n json_extract(jo.jsonProperties, '$.stringProp') [StringProp]\n FROM Fields.TestElement jo\n </Query>\n </QueryView>\n </ECCustomAttributes>\n <ECProperty propertyName=\"StringProp\" typeName=\"string\" />\n </ECEntityClass>\n</ECSchema>\n`;\n\ninterface InnerStruct {\n bool: boolean;\n doubles: number[];\n}\n\ninterface OuterStruct {\n innerStruct: InnerStruct;\n innerStructs: InnerStruct[];\n}\n\ninterface TestElementProps extends PhysicalElementProps {\n intProp: number;\n point: XYAndZ;\n maybeNull?: number;\n strings: string[];\n datetime: Date;\n outerStruct: OuterStruct;\n outerStructs: OuterStruct[];\n intEnum?: number;\n}\n\nclass TestElement extends PhysicalElement {\n public static override get className() { return \"TestElement\"; }\n declare public intProp: number;\n declare public point: XYAndZ;\n declare public maybeNull?: number;\n declare public strings: string[];\n declare public datetime: Date;\n declare public outerStruct: OuterStruct;\n declare public outerStructs: OuterStruct[];\n}\n\nclass TestAspect extends ElementUniqueAspect {\n public static override get className() { return \"TestAspect\"; }\n\n declare public aspectProp: number;\n}\n\ninterface TestAspectProps extends ElementAspectProps {\n aspectProp: number;\n}\n\nclass FieldsSchema extends Schema {\n public static override get schemaName() { return \"Fields\"; }\n}\n\nasync function registerTestSchema(iModel: IModelDb): Promise<void> {\n if (!Schemas.getRegisteredSchema(\"Fields\")) {\n Schemas.registerSchema(FieldsSchema);\n ClassRegistry.register(TestElement, FieldsSchema);\n ClassRegistry.register(TestAspect, FieldsSchema);\n }\n\n await iModel.importSchemaStrings([fieldsSchemaXml]);\n iModel.saveChanges();\n}\n\ndescribe(\"Field evaluation\", () => {\n let imodel: StandaloneDb;\n let model: Id64String;\n let category: Id64String;\n let sourceElementId: Id64String;\n\n before(async () => {\n const iModelPath = IModelTestUtils.prepareOutputFile(\"UpdateFieldsContext\", \"test.bim\");\n imodel = StandaloneDb.createEmpty(iModelPath, { rootSubject: { name: \"UpdateFieldsContext\" }, allowEdit: JSON.stringify({ txns: true } )});\n\n await registerTestSchema(imodel);\n\n model = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(imodel, Code.createEmpty(), true)[1];\n category = SpatialCategory.insert(imodel, StandaloneDb.dictionaryId, \"UpdateFieldsContextCategory\", new SubCategoryAppearance());\n sourceElementId = insertTestElement();\n\n await imodel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n });\n });\n\n after(() => {\n imodel.close();\n });\n\n function insertTestElement(overrides?: Partial<TestElementProps>, aspectProp?: number): Id64String {\n return createTestElement(imodel, model, category, overrides, aspectProp);\n }\n\n function evaluateField(propertyPath: FieldPropertyPath, propertyHost: FieldPropertyHost | Id64String, deletedDependency = false): FieldValue | undefined {\n if (typeof propertyHost === \"string\") {\n propertyHost = { schemaName: \"Fields\", className: \"TestElement\", elementId: propertyHost };\n }\n\n const field = FieldRun.create({\n propertyPath,\n propertyHost,\n });\n\n const context = createUpdateContext(propertyHost.elementId, imodel, deletedDependency);\n return context.getProperty(field);\n }\n\n describe(\"getProperty\", () => {\n function expectValue(expected: any, propertyPath: FieldPropertyPath, propertyHost: FieldPropertyHost | Id64String, deletedDependency = false): void {\n expect(evaluateField(propertyPath, propertyHost, deletedDependency)?.value).to.deep.equal(expected);\n }\n\n it(\"returns a primitive property value\", () => {\n expectValue(100, { propertyName: \"intProp\" }, sourceElementId);\n });\n\n it(\"returns an integer enum property value\", () => {\n expectValue(1, { propertyName: \"intEnum\" }, sourceElementId);\n });\n\n it(\"treats points as primitive values\", () => {\n expectValue({ x: 1, y: 2, z: 3 }, { propertyName: \"point\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"point\", accessors: [\"x\"] }, sourceElementId);\n });\n\n it(\"returns a primitive array value\", () => {\n expectValue(\"a\", { propertyName: \"strings\", accessors: [0] }, sourceElementId);\n expectValue(\"b\", { propertyName: \"strings\", accessors: [1] }, sourceElementId);\n expectValue(`\"name\": \"c\"`, { propertyName: \"strings\", accessors: [2] }, sourceElementId);\n });\n\n it(\"supports negative array indices\", () => {\n expectValue(\"a\", { propertyName: \"strings\", accessors: [-3] }, sourceElementId);\n expectValue(\"b\", { propertyName: \"strings\", accessors: [-2] }, sourceElementId);\n expectValue(`\"name\": \"c\"`, { propertyName: \"strings\", accessors: [-1] }, sourceElementId);\n });\n\n it(\"supports properties of EC views\", () => {\n expectValue(\"abc\", { propertyName: \"stringProp\" }, { schemaName: \"Fields\", className: \"TestElementStringProp\", elementId: sourceElementId });\n });\n\n it(\"returns undefined if the dependency was deleted\", () => {\n expectValue(undefined, { propertyName: \"intProp\" }, sourceElementId, true);\n });\n\n it(\"returns undefined if the host element does not exist\", () => {\n expectValue(undefined, { propertyName: \"intProp\" }, \"0xbaadf00d\");\n });\n\n it(\"returns undefined if the host element is not of the specified class or a subclass thereof\", () => {\n expectValue(undefined, { propertyName: \"origin\" }, { schemaName: \"BisCore\", className: \"GeometricElement2d\", elementId: sourceElementId });\n });\n\n it(\"returns undefined if an access string is specified for a non-object property\", () => {\n expectValue(undefined, { propertyName: \"intProp\", accessors: [\"property\"] }, sourceElementId);\n });\n\n it(\"returns undefined if the specified property does not exist\", () => {\n expectValue(undefined, { propertyName: \"nonExistentProperty\" }, sourceElementId);\n });\n\n it(\"returns undefined if the specified property is null\", () => {\n expectValue(undefined, { propertyName: \"maybeNull\" }, sourceElementId);\n });\n\n it(\"returns undefined if an array index is specified for a non-array property\", () => {\n expectValue(undefined, { propertyName: \"intProp\", accessors: [0] }, sourceElementId);\n });\n\n it(\"returns undefined if an array index is out of bounds\", () => {\n for (const index of [3, 4, -4, -5]) {\n expectValue(undefined, { propertyName: \"strings\", accessors: [index] }, sourceElementId);\n }\n });\n\n it(\"returns undefined for a non-primitive value\", () => {\n expectValue(undefined, { propertyName: \"strings\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStruct\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStruct\", accessors: [\"innerStruct\"] }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\" }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\", accessors: [0] }, sourceElementId);\n expectValue(undefined, { propertyName: \"outerStructs\", accessors: [0, \"innerStruct\"] }, sourceElementId);\n });\n\n it(\"returns arbitrarily-nested properties of structs and struct arrays\", () => {\n expectValue(false, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"bool\"] }, sourceElementId);\n for (const index of [0, 1, 2]) {\n expectValue(index + 1, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", index] },sourceElementId);\n expectValue(3 - index, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", -1 - index] },sourceElementId);\n }\n\n expectValue(9, { propertyName: \"outerStructs\", accessors: [0, \"innerStruct\", \"doubles\", 1] }, sourceElementId);\n expectValue(false, { propertyName: \"outerStructs\", accessors: [0, \"innerStructs\", -1, \"bool\"] }, sourceElementId);\n expectValue(5, { propertyName: \"outerStructs\", accessors: [0, \"innerStructs\", 0, \"doubles\", 0] }, sourceElementId);\n });\n\n it(\"returns the value of a property of an aspect\", () => {\n expect(imodel.elements.getAspects(sourceElementId, \"Fields:TestAspect\").length).to.equal(1);\n expectValue(999, { propertyName: \"aspectProp\" }, { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestAspect\" });\n });\n\n it(\"should fail to evaluate if prop type does not match\", () => {\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"string\", accessors: [0] },\n cachedContent: \"oldValue\",\n formatOptions: {\n case: \"upper\",\n prefix: \"Value: \",\n suffix: \"!\"\n }\n });\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n\n const updated = updateField(fieldRun, context);\n\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(FieldRun.invalidContentIndicator);\n });\n\n function getPropertyType(propertyHost: FieldPropertyHost, propertyPath: string | FieldPropertyPath): FieldPropertyType | undefined {\n if (typeof propertyPath === \"string\") {\n propertyPath = { propertyName: propertyPath };\n }\n\n return evaluateField(propertyPath, propertyHost)?.type;\n }\n\n it(\"deduces type for primitive properties\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"intProp\")).to.equal(\"string\");\n expect(getPropertyType(propertyHost, \"point\")).to.equal(\"coordinate\");\n expect(getPropertyType(propertyHost, { propertyName: \"strings\", accessors: [0] })).to.equal(\"string\");\n expect(getPropertyType(propertyHost, \"intEnum\")).to.equal(\"int-enum\");\n expect(getPropertyType(propertyHost, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"doubles\", 0] })).to.equal(\"quantity\");\n expect(getPropertyType(propertyHost, { propertyName: \"outerStruct\", accessors: [\"innerStruct\", \"bool\"] })).to.equal(\"boolean\");\n\n propertyHost.schemaName = \"BisCore\";\n propertyHost.className = \"GeometricElement3d\";\n expect(getPropertyType(propertyHost, \"LastMod\")).to.equal(\"datetime\");\n expect(getPropertyType(propertyHost, \"FederationGuid\")).to.equal(\"string\");\n });\n\n it(\"returns undefined for non-primitive properties\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"outerStruct\")).to.equal(undefined);\n expect(getPropertyType(propertyHost, \"outerStructs\")).to.equal(undefined);\n });\n\n it(\"returns undefined for invalid property paths\", () => {\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n expect(getPropertyType(propertyHost, \"unknownPropertyName\")).to.be.undefined;\n });\n\n it(\"should return undefined for unsupported primitive types\", () => {\n const host = { elementId: sourceElementId, schemaName: \"BisCore\", className: \"GeometricElement3d\" };\n expect(getPropertyType(host, \"GeometryStream\")).to.be.undefined;\n });\n });\n\n describe(\"updateFields\", () => {\n it(\"recomputes cached content\", () => {\n const textBlock = TextBlock.create();\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"oldValue\",\n });\n\n textBlock.appendRun(fieldRun);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(1);\n expect(fieldRun.cachedContent).to.equal(\"100\"); // `intProp` value from the test element\n });\n\n it(\"does not update a field if recomputed content matches cached content\", () => {\n const textBlock = TextBlock.create();\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"100\",\n });\n\n textBlock.appendRun(fieldRun);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(0);\n expect(fieldRun.cachedContent).to.equal(\"100\");\n });\n\n it(\"returns the number of fields updated\", () => {\n const textBlock = TextBlock.create();\n const fieldRun1 = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"100\",\n });\n\n const fieldRun2 = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"strings\", accessors: [0] },\n cachedContent: \"oldValue\",\n });\n\n textBlock.appendRun(fieldRun1);\n textBlock.appendRun(fieldRun2);\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updatedCount = updateFields(textBlock, context);\n\n expect(updatedCount).to.equal(1);\n expect(fieldRun1.cachedContent).to.equal(\"100\");\n expect(fieldRun2.cachedContent).to.equal(\"a\");\n });\n });\n\n function createAnnotationElement(textBlock: TextBlock | undefined): TextAnnotation3d {\n const elem = TextAnnotation3d.fromJSON({\n model,\n category,\n code: Code.createEmpty(),\n placement: {\n origin: { x: 0, y: 0, z: 0 },\n angles: YawPitchRollAngles.createDegrees(0, 0, 0).toJSON(),\n },\n classFullName: TextAnnotation3d.classFullName,\n defaultTextStyle: new TextAnnotationUsesTextStyleByDefault(\"0x123\").toJSON(),\n }, imodel);\n\n if (textBlock) {\n const annotation = TextAnnotation.fromJSON({ textBlock: textBlock.toJSON() });\n elem.setAnnotation(annotation);\n }\n\n return elem;\n }\n\n function insertAnnotationElement(textBlock: TextBlock | undefined): Id64String {\n const elem = createAnnotationElement(textBlock);\n return elem.insert();\n }\n\n describe(\"ElementDrivesTextAnnotation\", () => {\n function expectNumRelationships(expected: number, targetId?: Id64String): void {\n const where = targetId ? ` WHERE TargetECInstanceId=${targetId}` : \"\";\n const ecsql = `SELECT COUNT(*) FROM BisCore.ElementDrivesTextAnnotation ${where}`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n imodel.withPreparedStatement(ecsql, (stmt) => {\n expect(stmt.step()).to.equal(DbResult.BE_SQLITE_ROW);\n expect(stmt.getValue(0).getInteger()).to.equal(expected);\n });\n }\n\n it(\"can be inserted\", () => {\n expectNumRelationships(0);\n\n const targetId = insertAnnotationElement(undefined);\n expect(targetId).not.to.equal(Id64.invalid);\n\n const target = imodel.elements.getElement(targetId);\n expect(target.classFullName).to.equal(\"BisCore:TextAnnotation3d\");\n expect(target).instanceof(TextAnnotation3d);\n\n const targetAnno = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(targetAnno).instanceof(TextAnnotation3d);\n\n const rel = ElementDrivesTextAnnotation.create(imodel, sourceElementId, targetId);\n const relId = rel.insert();\n expect(relId).not.to.equal(Id64.invalid);\n\n expectNumRelationships(1);\n\n const relationship = imodel.relationships.getInstance(\"BisCore:ElementDrivesTextAnnotation\", relId);\n expect(relationship.sourceId).to.equal(sourceElementId);\n expect(relationship.targetId).to.equal(targetId);\n });\n\n function createField(propertyHost: Id64String | FieldPropertyHost, cachedContent: string, propertyName = \"intProp\", accessors?: Array<string | number>): FieldRun {\n if (typeof propertyHost === \"string\") {\n propertyHost = { schemaName: \"Fields\", className: \"TestElement\", elementId: propertyHost };\n }\n\n return FieldRun.create({\n styleOverrides: { font: { name: \"Karla\" } },\n propertyHost,\n cachedContent,\n propertyPath: { propertyName, accessors },\n });\n }\n\n describe(\"updateFieldDependencies\", () => {\n it(\"creates exactly one relationship for each unique source element on insert and update\", () => {\n const source1 = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(source1, \"1\"));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n\n const source2 = insertTestElement();\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n const anno = target.getAnnotation()!;\n anno.textBlock.appendRun(createField(source2, \"2a\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n\n anno.textBlock.appendRun(createField(source2, \"2b\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n\n const source3 = insertTestElement();\n anno.textBlock.appendRun(createField(source3, \"3\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(3, targetId);\n });\n\n it(\"deletes stale relationships\", () => {\n const sourceA = insertTestElement();\n const sourceB = insertTestElement();\n\n const block = TextBlock.create();\n block.appendRun(createField(sourceA, \"A\"));\n block.appendRun(createField(sourceB, \"B\"));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n expectNumRelationships(2, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n const anno = target.getAnnotation()!;\n\n // Remove the sourceA FieldRun from the first paragraph.\n const p1 = anno.textBlock.children[0];\n p1.children.shift();\n\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).not.to.be.undefined;\n\n anno.textBlock.children.length = 0;\n anno.textBlock.appendRun(createField(sourceA, \"A2\"));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(1, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).not.to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;\n\n anno.textBlock.children.length = 0;\n anno.textBlock.appendRun(TextRun.create({\n styleOverrides: { font: { name: \"Karla\" } },\n content: \"not a field\",\n }));\n target.setAnnotation(anno);\n target.update();\n imodel.saveChanges();\n\n expectNumRelationships(0, targetId);\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceA })).to.be.undefined;\n expect(imodel.relationships.tryGetInstance(ElementDrivesTextAnnotation.classFullName, { targetId, sourceId: sourceB })).to.be.undefined;\n });\n\n it(\"ignores invalid source element Ids\", () => {\n const source = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(Id64.invalid, \"invalid\"));\n block.appendRun(createField(\"0xbaadf00d\", \"non-existent\"));\n block.appendRun(createField(source, \"valid\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectNumRelationships(1, targetId);\n });\n });\n\n function expectText(expected: string, elemId: Id64String, db?: StandaloneDb): void {\n db = db ?? imodel;\n const elem = db.elements.getElement<TextAnnotation3d>(elemId);\n const anno = elem.getAnnotation()!;\n const actual = anno.textBlock.stringify();\n expect(actual).to.equal(expected);\n }\n\n it(\"evaluates cachedContent when annotation element is inserted\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"initial cached content\"));\n expect(block.stringify()).to.equal(\"initial cached content\");\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(target.getAnnotation()!.textBlock.stringify()).to.equal(\"100\");\n });\n\n it(\"updates fields when source element is modified or deleted\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"old value\"));;\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(target.getAnnotation()).not.to.be.undefined;\n\n expectText(\"100\", targetId);\n\n let source = imodel.elements.getElement<TestElement>(sourceId);\n source.intProp = 50;\n source.update();\n\n expectText(\"100\", targetId);\n\n imodel.saveChanges();\n\n source = imodel.elements.getElement<TestElement>(sourceId);\n expect(source.intProp).to.equal(50);\n\n expectText(\"50\", targetId);\n\n imodel.elements.deleteElement(sourceId);\n expectText(\"50\", targetId);\n\n imodel.saveChanges();\n expectText(FieldRun.invalidContentIndicator, targetId);\n });\n\n it(\"updates fields when source element aspect is modified, deleted, or recreated\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField({ elementId: sourceId, schemaName: \"Fields\", className: \"TestAspect\" }, \"\", \"aspectProp\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"999\", targetId);\n\n const aspects = imodel.elements.getAspects(sourceId, \"Fields:TestAspect\");\n expect(aspects.length).to.equal(1);\n const aspect = aspects[0] as TestAspect;\n expect(aspect.aspectProp).to.equal(999);\n\n aspect.aspectProp = 12345;\n imodel.elements.updateAspect(aspect.toJSON());\n imodel.saveChanges();\n expectText(\"12345\", targetId);\n\n imodel.elements.deleteAspect([aspect.id]);\n imodel.saveChanges();\n expectText(FieldRun.invalidContentIndicator, targetId);\n\n const newAspect: TestAspectProps = {\n element: new ElementOwnsUniqueAspect(sourceId),\n classFullName: TestAspect.classFullName,\n aspectProp: 42,\n };\n imodel.elements.insertAspect(newAspect);\n imodel.saveChanges();\n expectText(\"42\", targetId);\n });\n\n it(\"updates only fields for specific modified element\", () => {\n const sourceA = insertTestElement();\n const sourceB = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceA, \"A\"));\n block.appendRun(createField(sourceB, \"B\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"100100\", targetId);\n\n const sourceElem = imodel.elements.getElement<TestElement>(sourceB);\n sourceElem.intProp = 123;\n sourceElem.update();\n imodel.saveChanges();\n\n expectText(\"100123\", targetId);\n });\n\n it(\"supports complex property paths\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField(sourceId, \"\", \"outerStruct\", [\"innerStructs\", 1, \"doubles\", -2]));\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n expectText(\"2\", targetId);\n\n const source = imodel.elements.getElement<TestElement>(sourceId);\n source.outerStruct.innerStructs[1].doubles[3] = 12.5;\n source.update();\n imodel.saveChanges();\n expectText(\"12.5\", targetId);\n });\n\n it(\"updates EC view fields when the element changes if the EC view queries the element directly\", () => {\n const sourceId = insertTestElement();\n const block = TextBlock.create();\n block.appendRun(createField({\n elementId: sourceId, schemaName: \"Fields\", className: \"TestElementStringProp\",\n }, \"cached-content\", \"StringProp\"));\n\n const targetId = insertAnnotationElement(block);\n imodel.saveChanges();\n\n const target = imodel.elements.getElement<TextAnnotation3d>(targetId);\n expect(target.getAnnotation()).not.to.be.undefined;\n\n expectText(\"abc\", targetId);\n\n let source = imodel.elements.getElement<TestElement>(sourceId);\n source.jsonProperties.stringProp = \"zyx\";\n source.update();\n\n expectText(\"abc\", targetId);\n\n imodel.saveChanges();\n expectText(\"zyx\", targetId);\n\n source = imodel.elements.getElement<TestElement>(sourceId);\n expect(source.jsonProperties.stringProp).to.equal(\"zyx\");\n\n expectText(\"zyx\", targetId);\n\n imodel.elements.deleteElement(sourceId);\n expectText(\"zyx\", targetId);\n\n imodel.saveChanges();\n expectText(FieldRun.invalidContentIndicator, targetId);\n });\n\n describe(\"remapFields\", () => {\n let dstIModel: StandaloneDb;\n let dstModel: Id64String;\n let dstCategory: Id64String;\n let dstSourceElementId: Id64String;\n\n before(async () => {\n const path = IModelTestUtils.prepareOutputFile(\"RemapFields\", `dst.bim`);\n dstIModel = StandaloneDb.createEmpty(path, { rootSubject: { name: `RemapFields-dst` }, allowEdit: JSON.stringify({ txns: true })});\n await registerTestSchema(dstIModel);\n\n // Insert additional unused elements to ensure element Ids differ between src and dst iModels\n for (let i = 0; i < 3; i++) {\n IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);\n }\n\n const modelAndElement = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(dstIModel, Code.createEmpty(), true);\n expect(modelAndElement[0]).to.equal(modelAndElement[1]);\n\n dstModel = modelAndElement[1];\n dstCategory = SpatialCategory.insert(dstIModel, StandaloneDb.dictionaryId, `dstCat`, new SubCategoryAppearance());\n dstSourceElementId = createTestElement(dstIModel, dstModel, dstCategory, {\n intProp: 200,\n point: { x: -1, y: -2, z: -3 },\n strings: [\"x\", \"y\", \"z\"],\n intEnum: 2,\n }, 1234);\n\n await dstIModel.fonts.embedFontFile({\n file: FontFile.createFromTrueTypeFileName(IModelTestUtils.resolveFontFile(\"Karla-Regular.ttf\"))\n });\n\n expect(dstCategory).not.to.equal(category);\n expect(dstModel).not.to.equal(model);\n expect(dstSourceElementId).not.to.equal(sourceElementId);\n });\n\n after(() => {\n dstIModel.close();\n });\n\n function getTextBlockJson(): TextBlockProps {\n return {\n children: [{\n children: [{\n type: \"field\",\n propertyHost: {\n elementId: sourceElementId,\n schemaName: \"Fields\",\n className: \"TestElement\",\n },\n propertyPath: { propertyName: \"intProp\" },\n cachedContent: \"intProp\",\n }, {\n type: \"field\",\n propertyHost: {\n elementId: category,\n schemaName: \"BisCore\",\n className: \"Element\",\n },\n propertyPath: { propertyName: \"CodeValue\" },\n cachedContent: \"CodeValue\"\n }],\n }],\n };\n }\n\n function expectHostIds(elem: TextAnnotation3d, host1: Id64String, host2: Id64String): void {\n const anno = elem.getAnnotation()!;\n expect(anno.textBlock.children.length).to.equal(1);\n const para = anno.textBlock.children[0];\n expect(para.children.length).to.equal(2);\n expect(para.children.every((x) => x.type === \"field\"));\n const field1 = para.children[0] as FieldRun;\n expect(field1.propertyHost.elementId).to.equal(host1);\n const field2 = para.children[1] as FieldRun;\n expect(field2.propertyHost.elementId).to.equal(host2);\n }\n\n it(\"remaps field hosts\", () => {\n const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));\n expectHostIds(elem, sourceElementId, category);\n\n const context = new IModelElementCloneContext(imodel, dstIModel);\n context.remapElement(sourceElementId, dstSourceElementId);\n context.remapElement(category, dstCategory);\n\n ElementDrivesTextAnnotation.remapFields(elem, context);\n expectHostIds(elem, dstSourceElementId, dstCategory);\n });\n\n it(\"invalidates field host if source element not remapped\", () => {\n const elem = createAnnotationElement(TextBlock.create(getTextBlockJson()));\n expectHostIds(elem, sourceElementId, category);\n\n const context = new IModelElementCloneContext(imodel, dstIModel);\n\n ElementDrivesTextAnnotation.remapFields(elem, context);\n expectHostIds(elem, Id64.invalid, Id64.invalid);\n });\n });\n });\n\n describe(\"Format Validation\", () => {\n it(\"validates formatting options for string property type\", () => {\n // Create a FieldRun with string property type and some format options\n const fieldRun = FieldRun.create({\n propertyHost: { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" },\n propertyPath: { propertyName: \"strings\", accessors: [0] },\n cachedContent: \"oldValue\",\n formatOptions: {\n case: \"upper\",\n prefix: \"Value: \",\n suffix: \"!\"\n }\n });\n\n // Context returns a string value for the property\n const context = {\n hostElementId: sourceElementId,\n getProperty: () => { return { value: \"abc\", type: \"string\" as const } },\n };\n\n // Update the field and check the result\n const updated = updateField(fieldRun, context);\n\n // The formatted value should be uppercased and have prefix/suffix applied\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(\"Value: ABC!\");\n });\n\n it(\"validates formatting options for datetime objects\", function () {\n if (!isIntlSupported()) {\n this.skip();\n }\n\n const propertyHost = { elementId: sourceElementId, schemaName: \"Fields\", className: \"TestElement\" };\n const fieldRun = FieldRun.create({\n propertyHost,\n propertyPath: { propertyName: \"datetime\"},\n cachedContent: \"oldval\",\n formatOptions: {\n dateTime: {\n formatOptions:{\n month: \"short\",\n day: \"2-digit\",\n year: \"numeric\",\n timeZone: \"UTC\"\n },\n locale: \"en-US\",\n },\n },\n });\n\n const context = createUpdateContext(sourceElementId, imodel, false);\n const updated = updateField(fieldRun, context);\n\n expect(updated).to.be.true;\n expect(fieldRun.cachedContent).to.equal(\"Aug 28, 2025\");\n });\n });\n});\n"]}
@@ -4,7 +4,7 @@
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { expect } from "chai";
6
6
  import { Angle, Point3d, Range2d, Range3d, YawPitchRollAngles } from "@itwin/core-geometry";
7
- import { FieldRun, FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
7
+ import { FieldRun, FontType, FractionRun, SubCategoryAppearance, TextAnnotation, TextBlock, TextRun, TextStyleSettings } from "@itwin/core-common";
8
8
  import { StandaloneDb } from "../../IModelDb";
9
9
  import { AnnotationTextStyle, parseTextAnnotationData, TEXT_ANNOTATION_JSON_VERSION, TEXT_STYLE_SETTINGS_JSON_VERSION, TextAnnotation2d, TextAnnotation3d } from "../../annotations/TextAnnotationElement";
10
10
  import { IModelTestUtils } from "../IModelTestUtils";
@@ -20,6 +20,7 @@ import { TextAnnotationUsesTextStyleByDefault } from "../../annotations/ElementD
20
20
  import { layoutTextBlock, TextStyleResolver } from "../../annotations/TextBlockLayout";
21
21
  import { appendTextAnnotationGeometry } from "../../annotations/TextAnnotationGeometry";
22
22
  import { IModelElementCloneContext } from "../../IModelElementCloneContext";
23
+ import * as fs from "fs";
23
24
  function mockIModel() {
24
25
  const iModel = {
25
26
  fonts: {
@@ -461,7 +462,7 @@ describe("TextAnnotation element", () => {
461
462
  return elem;
462
463
  }
463
464
  describe("within a single iModel", () => {
464
- it("leaves property hosts intact", () => {
465
+ it("leaves property hosts intact", async () => {
465
466
  const textBlock = TextBlock.create({
466
467
  children: [{
467
468
  children: [{
@@ -491,32 +492,32 @@ describe("TextAnnotation element", () => {
491
492
  context.remapElement("0x123", "0x456");
492
493
  context.remapElement("0xabc", "0xdef");
493
494
  context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
494
- const props = context.cloneElement(elem);
495
+ const props = await context.cloneElement(elem);
495
496
  expect(props.textAnnotationData).not.to.be.undefined;
496
497
  const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
497
498
  const para = anno.textBlock.children[0];
498
499
  expect(para.children[0].propertyHost.elementId).to.equal("0x123");
499
500
  expect(para.children[1].propertyHost.elementId).to.equal("0xabc");
500
501
  });
501
- it("leaves default text style intact", () => {
502
- function clone(styleId, expectedStyleId) {
502
+ it("leaves default text style intact", async () => {
503
+ async function clone(styleId, expectedStyleId) {
503
504
  const elem = insertStyledElement(styleId, imodel);
504
505
  const context = new IModelElementCloneContext(imodel);
505
506
  context.remapElement(createElement2dArgs.model, createElement2dArgs.model);
506
- const props = context.cloneElement(elem);
507
+ const props = await context.cloneElement(elem);
507
508
  expect(props.defaultTextStyle?.id).to.equal(expectedStyleId);
508
509
  if (styleId) {
509
510
  // Even an explicit remapping is ignored when cloning within a single iModel
510
511
  // (per the examples set by most other elements, excluding RenderMaterial).
511
512
  context.remapElement(styleId, "0x99887");
512
- const props2 = context.cloneElement(elem);
513
+ const props2 = await context.cloneElement(elem);
513
514
  expect(props2.defaultTextStyle?.id).to.equal(expectedStyleId);
514
515
  }
515
516
  }
516
- clone(seedStyleId, seedStyleId);
517
- clone(undefined, undefined);
518
- clone("0x12345", "0x12345");
519
- clone(Id64.invalid, undefined);
517
+ await clone(seedStyleId, seedStyleId);
518
+ await clone(undefined, undefined);
519
+ await clone("0x12345", "0x12345");
520
+ await clone(Id64.invalid, undefined);
520
521
  });
521
522
  });
522
523
  describe("between iModels", () => {
@@ -533,7 +534,7 @@ describe("TextAnnotation element", () => {
533
534
  dstElemArgs = { category, model };
534
535
  });
535
536
  after(() => dstDb.close());
536
- it("remaps property hosts", () => {
537
+ it("remaps property hosts", async () => {
537
538
  const textBlock = TextBlock.create({
538
539
  children: [{
539
540
  children: [{
@@ -563,47 +564,47 @@ describe("TextAnnotation element", () => {
563
564
  context.remapElement("0x123", "0x456");
564
565
  context.remapElement("0xabc", "0xdef");
565
566
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
566
- const props = context.cloneElement(elem);
567
+ const props = await context.cloneElement(elem);
567
568
  expect(props.textAnnotationData).not.to.be.undefined;
568
569
  const anno = TextAnnotation.fromJSON(parseTextAnnotationData(props.textAnnotationData)?.data);
569
570
  const para = anno.textBlock.children[0];
570
571
  expect(para.children[0].propertyHost.elementId).to.equal("0x456");
571
572
  expect(para.children[1].propertyHost.elementId).to.equal("0xdef");
572
573
  });
573
- it("sets default text style to undefined if source style does not exist", () => {
574
+ it("sets default text style to undefined if source style does not exist", async () => {
574
575
  const elem = insertStyledElement("0x12345", imodel);
575
576
  const context = new IModelElementCloneContext(imodel, dstDb);
576
577
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
577
- const props = context.cloneElement(elem);
578
+ const props = await context.cloneElement(elem);
578
579
  expect(props.defaultTextStyle).to.be.undefined;
579
580
  });
580
- it("remaps to an existing text style with the same code if present", () => {
581
+ it("remaps to an existing text style with the same code if present", async () => {
581
582
  const dstStyleId = createAnnotationTextStyle(dstDb, dstDefModel, "test", { font: { name: "Karla" } }).insert();
582
583
  expect(dstStyleId).not.to.equal(seedStyleId);
583
584
  const srcElem = insertStyledElement(seedStyleId, imodel);
584
585
  const context = new IModelElementCloneContext(imodel, dstDb);
585
586
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
586
- const props = context.cloneElement(srcElem);
587
+ const props = await context.cloneElement(srcElem);
587
588
  expect(props.defaultTextStyle?.id).to.equal(dstStyleId);
588
589
  });
589
- it("throws an error if definition model is not remapped", () => {
590
+ it("throws an error if definition model is not remapped", async () => {
590
591
  const srcElem = insertStyledElement(seedStyleId2, imodel);
591
592
  const context = new IModelElementCloneContext(imodel, dstDb);
592
593
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
593
- expect(() => context.cloneElement(srcElem)).to.throw("Invalid target model");
594
+ await expect(context.cloneElement(srcElem)).to.be.rejectedWith("Invalid target model");
594
595
  });
595
- it("imports default text style if necessary", () => {
596
+ it("imports default text style if necessary", async () => {
596
597
  const srcElem = insertStyledElement(seedStyleId2, imodel);
597
598
  const context = new IModelElementCloneContext(imodel, dstDb);
598
599
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
599
600
  context.remapElement(seedDefinitionModelId, dstDefModel);
600
- const props = context.cloneElement(srcElem);
601
+ const props = await context.cloneElement(srcElem);
601
602
  const dstStyleId = props.defaultTextStyle.id;
602
603
  expect(dstStyleId).not.to.be.undefined;
603
604
  expect(dstStyleId).not.to.equal(seedStyleId2);
604
605
  expect(dstDb.elements.tryGetElement(dstStyleId)).not.to.be.undefined;
605
606
  });
606
- it("remaps multiple occurrences of same style to same Id", () => {
607
+ it("remaps multiple occurrences of same style to same Id", async () => {
607
608
  const srcStyleId = createAnnotationTextStyle(imodel, seedDefinitionModelId, "styyyle", { font: { name: "Karla" } }).insert();
608
609
  const srcElem1 = insertStyledElement(srcStyleId, imodel);
609
610
  const srcElem2 = insertStyledElement(srcStyleId, imodel);
@@ -611,15 +612,15 @@ describe("TextAnnotation element", () => {
611
612
  const context = new IModelElementCloneContext(imodel, dstDb);
612
613
  context.remapElement(createElement2dArgs.model, dstElemArgs.model);
613
614
  context.remapElement(seedDefinitionModelId, dstDefModel);
614
- const props1 = context.cloneElement(srcElem1);
615
- const props2 = context.cloneElement(srcElem2);
615
+ const props1 = await context.cloneElement(srcElem1);
616
+ const props2 = await context.cloneElement(srcElem2);
616
617
  expect(props1.defaultTextStyle).not.to.be.undefined;
617
618
  expect(props1.defaultTextStyle?.id).not.to.equal(srcStyleId);
618
619
  expect(props2.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
619
620
  const context2 = new IModelElementCloneContext(imodel, dstDb);
620
621
  context2.remapElement(createElement2dArgs.model, dstElemArgs.model);
621
622
  context2.remapElement(seedDefinitionModelId, dstDefModel);
622
- const props3 = context2.cloneElement(srcElem3);
623
+ const props3 = await context2.cloneElement(srcElem3);
623
624
  expect(props3.defaultTextStyle?.id).to.equal(props1.defaultTextStyle?.id);
624
625
  });
625
626
  });
@@ -795,6 +796,51 @@ describe("AnnotationTextStyle", () => {
795
796
  })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
796
797
  });
797
798
  });
799
+ describe("onCloned", () => {
800
+ let targetDb;
801
+ let targetDefModel;
802
+ before(async () => {
803
+ // The source and target iModel will both contain the Karla font family.
804
+ targetDb = await createIModel("AnnotationTextStyleTargetDb");
805
+ const jobSubjectId = createJobSubjectElement(targetDb, "Job").insert();
806
+ targetDefModel = DefinitionModel.insert(targetDb, jobSubjectId, "Definition");
807
+ // Embed a font into the source iModel that doesn't exist in the target iModel.
808
+ const shxName = IModelTestUtils.resolveFontFile("Cdm.shx");
809
+ const shxBlob = fs.readFileSync(shxName);
810
+ const shxFile = FontFile.createFromShxFontBlob({ blob: shxBlob, familyName: "Cdm" });
811
+ await imodel.fonts.embedFontFile({ file: shxFile });
812
+ });
813
+ after(() => targetDb.close());
814
+ it("embeds font into target Db if not already embedded", async () => {
815
+ const getFontCounts = () => {
816
+ let files = 0;
817
+ for (const _ of targetDb.fonts.queryEmbeddedFontFiles()) {
818
+ files++;
819
+ }
820
+ let families = 0;
821
+ for (const _ of targetDb.fonts.queryMappedFamilies()) {
822
+ families++;
823
+ }
824
+ return { files, families };
825
+ };
826
+ const initialCounts = getFontCounts();
827
+ const karlaStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "karla-style", TextStyleSettings.fromJSON({ font: { name: "Karla" } }));
828
+ karlaStyle.insert();
829
+ const cdmStyle = createAnnotationTextStyle(imodel, seedDefinitionModel, "cdm-style", TextStyleSettings.fromJSON({ font: { name: "Cdm", type: FontType.Shx } }));
830
+ cdmStyle.insert();
831
+ const context = new IModelElementCloneContext(imodel, targetDb);
832
+ context.remapElement(seedDefinitionModel, targetDefModel);
833
+ expect(targetDb.fonts.findId({ name: "Karla" })).not.to.be.undefined;
834
+ await context.cloneElement(karlaStyle);
835
+ expect(getFontCounts()).to.deep.equal(initialCounts);
836
+ expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).to.be.undefined;
837
+ await context.cloneElement(cdmStyle);
838
+ expect(targetDb.fonts.findId({ name: "Cdm", type: FontType.Shx })).not.to.be.undefined;
839
+ const finalCounts = getFontCounts();
840
+ expect(finalCounts.files).greaterThan(initialCounts.files);
841
+ expect(finalCounts.families).greaterThan(initialCounts.families);
842
+ });
843
+ });
798
844
  });
799
845
  describe("appendTextAnnotationGeometry", () => {
800
846
  let imodel;