@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.
- package/CHANGELOG.md +26 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +14 -0
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +11 -0
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.d.ts.map +1 -1
- package/lib/cjs/DisplayStyle.js +4 -4
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/Element.d.ts +31 -3
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +55 -3
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +24 -1
- package/lib/cjs/ElementAspect.d.ts.map +1 -1
- package/lib/cjs/ElementAspect.js +102 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +26 -3
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +60 -5
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts +1 -1
- package/lib/cjs/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js +2 -2
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.d.ts.map +1 -1
- package/lib/cjs/Material.js +2 -2
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/NavigationRelationship.d.ts +15 -0
- package/lib/cjs/NavigationRelationship.d.ts.map +1 -1
- package/lib/cjs/NavigationRelationship.js +22 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +5 -0
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +7 -0
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +8 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +30 -2
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +1 -1
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +2 -2
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +4 -4
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +13 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +90 -10
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +6 -5
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +34 -14
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js +2 -0
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +14 -0
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +11 -0
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.d.ts.map +1 -1
- package/lib/esm/DisplayStyle.js +4 -4
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/Element.d.ts +31 -3
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +55 -4
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +24 -1
- package/lib/esm/ElementAspect.d.ts.map +1 -1
- package/lib/esm/ElementAspect.js +101 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +26 -3
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +60 -5
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts +1 -1
- package/lib/esm/IModelElementCloneContext.d.ts.map +1 -1
- package/lib/esm/IModelElementCloneContext.js +2 -2
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.d.ts.map +1 -1
- package/lib/esm/Material.js +2 -2
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/NavigationRelationship.d.ts +15 -0
- package/lib/esm/NavigationRelationship.d.ts.map +1 -1
- package/lib/esm/NavigationRelationship.js +19 -0
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/Relationship.d.ts +5 -0
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +7 -0
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +8 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +30 -2
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +1 -1
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +2 -2
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +4 -4
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +13 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +91 -12
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +6 -5
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +34 -14
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js +2 -0
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts +93 -0
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -0
- package/lib/esm/test/ElementDrivesElement.test.js +862 -0
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -0
- package/lib/esm/test/ElementLRUCache.test.js +19 -0
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +44 -0
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +48 -2
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +73 -27
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +2 -2
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +33 -2
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.d.ts +2 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.d.ts.map +1 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.js +80 -0
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -0
- package/lib/esm/test/element/SheetInformationAspect.test.d.ts +2 -0
- package/lib/esm/test/element/SheetInformationAspect.test.d.ts.map +1 -0
- package/lib/esm/test/element/SheetInformationAspect.test.js +182 -0
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -0
- package/lib/esm/test/hubaccess/Rebase.test.js +169 -2
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.d.ts +2 -0
- package/lib/esm/test/imodel/Code.test.d.ts.map +1 -0
- package/lib/esm/test/imodel/Code.test.js +272 -0
- package/lib/esm/test/imodel/Code.test.js.map +1 -0
- package/lib/esm/test/imodel/IModel.test.js +175 -2
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +66 -60
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js +6 -6
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js +75 -6
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js +4 -4
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js +33 -5
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- 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(
|
|
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("
|
|
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(
|
|
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
|
});
|