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

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 (171) 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 +31 -3
  15. package/lib/cjs/Element.d.ts.map +1 -1
  16. package/lib/cjs/Element.js +55 -3
  17. package/lib/cjs/Element.js.map +1 -1
  18. package/lib/cjs/ElementAspect.d.ts +24 -1
  19. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  20. package/lib/cjs/ElementAspect.js +102 -1
  21. package/lib/cjs/ElementAspect.js.map +1 -1
  22. package/lib/cjs/IModelDb.d.ts +26 -3
  23. package/lib/cjs/IModelDb.d.ts.map +1 -1
  24. package/lib/cjs/IModelDb.js +60 -5
  25. package/lib/cjs/IModelDb.js.map +1 -1
  26. package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
  27. package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
  28. package/lib/cjs/IModelElementCloneContext.js +2 -2
  29. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  30. package/lib/cjs/Material.d.ts +1 -1
  31. package/lib/cjs/Material.d.ts.map +1 -1
  32. package/lib/cjs/Material.js +2 -2
  33. package/lib/cjs/Material.js.map +1 -1
  34. package/lib/cjs/NavigationRelationship.d.ts +15 -0
  35. package/lib/cjs/NavigationRelationship.d.ts.map +1 -1
  36. package/lib/cjs/NavigationRelationship.js +22 -1
  37. package/lib/cjs/NavigationRelationship.js.map +1 -1
  38. package/lib/cjs/Relationship.d.ts +5 -0
  39. package/lib/cjs/Relationship.d.ts.map +1 -1
  40. package/lib/cjs/Relationship.js +7 -0
  41. package/lib/cjs/Relationship.js.map +1 -1
  42. package/lib/cjs/TxnManager.d.ts +8 -0
  43. package/lib/cjs/TxnManager.d.ts.map +1 -1
  44. package/lib/cjs/TxnManager.js +30 -2
  45. package/lib/cjs/TxnManager.js.map +1 -1
  46. package/lib/cjs/ViewDefinition.d.ts +1 -1
  47. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  48. package/lib/cjs/ViewDefinition.js +2 -2
  49. package/lib/cjs/ViewDefinition.js.map +1 -1
  50. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  51. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  52. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +4 -4
  53. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  54. package/lib/cjs/annotations/LeaderGeometry.d.ts +13 -1
  55. package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
  56. package/lib/cjs/annotations/LeaderGeometry.js +90 -10
  57. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  58. package/lib/cjs/annotations/TextAnnotationElement.d.ts +6 -5
  59. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  60. package/lib/cjs/annotations/TextAnnotationElement.js +34 -14
  61. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  62. package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
  63. package/lib/cjs/internal/ElementLRUCache.js +2 -0
  64. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  65. package/lib/esm/BriefcaseManager.d.ts.map +1 -1
  66. package/lib/esm/BriefcaseManager.js +14 -0
  67. package/lib/esm/BriefcaseManager.js.map +1 -1
  68. package/lib/esm/CloudSqlite.d.ts +11 -0
  69. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  70. package/lib/esm/CloudSqlite.js.map +1 -1
  71. package/lib/esm/DisplayStyle.d.ts +2 -2
  72. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  73. package/lib/esm/DisplayStyle.js +4 -4
  74. package/lib/esm/DisplayStyle.js.map +1 -1
  75. package/lib/esm/ECDb.js +1 -1
  76. package/lib/esm/ECDb.js.map +1 -1
  77. package/lib/esm/Element.d.ts +31 -3
  78. package/lib/esm/Element.d.ts.map +1 -1
  79. package/lib/esm/Element.js +55 -4
  80. package/lib/esm/Element.js.map +1 -1
  81. package/lib/esm/ElementAspect.d.ts +24 -1
  82. package/lib/esm/ElementAspect.d.ts.map +1 -1
  83. package/lib/esm/ElementAspect.js +101 -1
  84. package/lib/esm/ElementAspect.js.map +1 -1
  85. package/lib/esm/IModelDb.d.ts +26 -3
  86. package/lib/esm/IModelDb.d.ts.map +1 -1
  87. package/lib/esm/IModelDb.js +60 -5
  88. package/lib/esm/IModelDb.js.map +1 -1
  89. package/lib/esm/IModelElementCloneContext.d.ts +1 -1
  90. package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
  91. package/lib/esm/IModelElementCloneContext.js +2 -2
  92. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  93. package/lib/esm/Material.d.ts +1 -1
  94. package/lib/esm/Material.d.ts.map +1 -1
  95. package/lib/esm/Material.js +2 -2
  96. package/lib/esm/Material.js.map +1 -1
  97. package/lib/esm/NavigationRelationship.d.ts +15 -0
  98. package/lib/esm/NavigationRelationship.d.ts.map +1 -1
  99. package/lib/esm/NavigationRelationship.js +19 -0
  100. package/lib/esm/NavigationRelationship.js.map +1 -1
  101. package/lib/esm/Relationship.d.ts +5 -0
  102. package/lib/esm/Relationship.d.ts.map +1 -1
  103. package/lib/esm/Relationship.js +7 -0
  104. package/lib/esm/Relationship.js.map +1 -1
  105. package/lib/esm/TxnManager.d.ts +8 -0
  106. package/lib/esm/TxnManager.d.ts.map +1 -1
  107. package/lib/esm/TxnManager.js +30 -2
  108. package/lib/esm/TxnManager.js.map +1 -1
  109. package/lib/esm/ViewDefinition.d.ts +1 -1
  110. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  111. package/lib/esm/ViewDefinition.js +2 -2
  112. package/lib/esm/ViewDefinition.js.map +1 -1
  113. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
  114. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  115. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +4 -4
  116. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  117. package/lib/esm/annotations/LeaderGeometry.d.ts +13 -1
  118. package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
  119. package/lib/esm/annotations/LeaderGeometry.js +91 -12
  120. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  121. package/lib/esm/annotations/TextAnnotationElement.d.ts +6 -5
  122. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  123. package/lib/esm/annotations/TextAnnotationElement.js +34 -14
  124. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  125. package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
  126. package/lib/esm/internal/ElementLRUCache.js +2 -0
  127. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  128. package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
  129. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
  130. package/lib/esm/test/ElementDrivesElement.test.js +862 -0
  131. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
  132. package/lib/esm/test/ElementLRUCache.test.js +19 -0
  133. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  134. package/lib/esm/test/annotations/Fields.test.js +44 -0
  135. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  136. package/lib/esm/test/annotations/LeaderGeometry.test.js +48 -2
  137. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  138. package/lib/esm/test/annotations/TextAnnotation.test.js +73 -27
  139. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  140. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +2 -2
  141. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  142. package/lib/esm/test/ecdb/ECSqlStatement.test.js +33 -2
  143. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  144. package/lib/esm/test/element/ProjectInformationRecord.test.d.ts +2 -0
  145. package/lib/esm/test/element/ProjectInformationRecord.test.d.ts.map +1 -0
  146. package/lib/esm/test/element/ProjectInformationRecord.test.js +80 -0
  147. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -0
  148. package/lib/esm/test/element/SheetInformationAspect.test.d.ts +2 -0
  149. package/lib/esm/test/element/SheetInformationAspect.test.d.ts.map +1 -0
  150. package/lib/esm/test/element/SheetInformationAspect.test.js +182 -0
  151. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -0
  152. package/lib/esm/test/hubaccess/Rebase.test.js +169 -2
  153. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  154. package/lib/esm/test/imodel/Code.test.d.ts +2 -0
  155. package/lib/esm/test/imodel/Code.test.d.ts.map +1 -0
  156. package/lib/esm/test/imodel/Code.test.js +272 -0
  157. package/lib/esm/test/imodel/Code.test.js.map +1 -0
  158. package/lib/esm/test/imodel/IModel.test.js +175 -2
  159. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  160. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  161. package/lib/esm/test/standalone/ChangesetReader.test.js +66 -60
  162. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  163. package/lib/esm/test/standalone/DisplayStyle.test.js +6 -6
  164. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  165. package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
  166. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  167. package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
  168. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  169. package/lib/esm/test/standalone/TxnManager.test.js +33 -5
  170. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  171. package/package.json +14 -14
@@ -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
  });
@@ -786,13 +787,58 @@ describe("AnnotationTextStyle", () => {
786
787
  }),
787
788
  })).to.throw(`JSON version 999.999.999 is newer than supported version ${TEXT_STYLE_SETTINGS_JSON_VERSION}. Application update required to understand data.`);
788
789
  });
789
- it("throws if the JSON version is old and cannot be migrated", () => {
790
+ it("should not throw error if the JSON version is old", () => {
790
791
  expect(() => makeStyle({
791
792
  settings: JSON.stringify({
792
793
  version: "0.0.1",
793
794
  data: TextStyleSettings.defaultProps
794
795
  }),
795
- })).to.throw(`Migration for settings from version 0.0.1 to ${TEXT_STYLE_SETTINGS_JSON_VERSION} failed.`);
796
+ })).to.not.throw();
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);
796
842
  });
797
843
  });
798
844
  });